diff options
author | JP Cimalando <jpcima@users.noreply.github.com> | 2018-05-16 03:27:07 +0200 |
---|---|---|
committer | JP Cimalando <jpcima@users.noreply.github.com> | 2018-05-16 19:34:07 +0200 |
commit | 8cce88f8706ca6fb52592458aa12641c43469a6e (patch) | |
tree | 7c35d9e37ac7885377d05a6cebb6d89ccc19119a /src/adlmidi_ptr.hpp | |
parent | af1926e8fe3627880290baad4e45335a5c627620 (diff) | |
download | libADLMIDI-8cce88f8706ca6fb52592458aa12641c43469a6e.tar.gz libADLMIDI-8cce88f8706ca6fb52592458aa12641c43469a6e.tar.bz2 libADLMIDI-8cce88f8706ca6fb52592458aa12641c43469a6e.zip |
c++98 support for bank map
Diffstat (limited to 'src/adlmidi_ptr.hpp')
-rw-r--r-- | src/adlmidi_ptr.hpp | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/src/adlmidi_ptr.hpp b/src/adlmidi_ptr.hpp index bd2b8fb..7faacff 100644 --- a/src/adlmidi_ptr.hpp +++ b/src/adlmidi_ptr.hpp @@ -123,10 +123,24 @@ public: }; /* + Generic deleters for smart pointers + */ +template <class T> +struct ADLMIDI_DefaultDelete +{ + void operator()(T *x) { delete x; } +}; +template <class T> +struct ADLMIDI_DefaultArrayDelete +{ + void operator()(T *x) { delete[] x; } +}; + +/* Shared pointer with non-atomic counter FAQ: Why not std::shared_ptr? Because of Android NDK now doesn't supports it */ -template<class VALUE> +template< class VALUE, class DELETER = ADLMIDI_DefaultDelete<VALUE> > class AdlMIDI_SPtr { VALUE *m_p; @@ -160,8 +174,10 @@ public: void reset(VALUE *p = NULL) { if(p != m_p) { - if(m_p && --*m_counter == 0) - delete m_p; + if(m_p && --*m_counter == 0) { + DELETER del; + del(m_p); + } m_p = p; if(!p) { if(m_counter) { @@ -178,7 +194,7 @@ public: } } - VALUE *get() + VALUE *get() const { return m_p; } @@ -186,10 +202,20 @@ public: { return *m_p; } - VALUE *operator->() + const VALUE &operator*() const + { + return *m_p; + } + VALUE *operator->() const { return m_p; } }; +template<class VALUE> +class AdlMIDI_SPtrArray : + public AdlMIDI_SPtr< VALUE, ADLMIDI_DefaultArrayDelete<VALUE> > +{ +}; + #endif //ADLMIDI_PTR_HPP_THING |