aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_ptr.hpp
diff options
context:
space:
mode:
authorJP Cimalando <jpcima@users.noreply.github.com>2018-05-16 03:27:07 +0200
committerJP Cimalando <jpcima@users.noreply.github.com>2018-05-16 19:34:07 +0200
commit8cce88f8706ca6fb52592458aa12641c43469a6e (patch)
tree7c35d9e37ac7885377d05a6cebb6d89ccc19119a /src/adlmidi_ptr.hpp
parentaf1926e8fe3627880290baad4e45335a5c627620 (diff)
downloadlibADLMIDI-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.hpp36
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