From 88a117c706328e8ccead5280490a447ab8a28383 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Thu, 16 Feb 2017 18:07:13 +0300 Subject: Remove usage of std::shared_ptr because it is not supported on Android NDK, yet (even C++11 usagae is enabled!) --- src/adlmidi_load.cpp | 8 +++----- src/adlmidi_private.hpp | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/adlmidi_load.cpp b/src/adlmidi_load.cpp index 1ef355d..a39c191 100644 --- a/src/adlmidi_load.cpp +++ b/src/adlmidi_load.cpp @@ -26,8 +26,6 @@ #include "adlmidi_mus2mid.h" #include "adlmidi_xmi2mid.h" -#include - uint64_t MIDIplay::ReadBEint(const void *buffer, size_t nbytes) { uint64_t result = 0; @@ -105,7 +103,7 @@ bool MIDIplay::LoadMIDI(MIDIplay::fileReader &fr) size_t fsize; qqq(fsize); //! Temp buffer for conversion - std::shared_ptr cvt_buf; + AdlMIDI_CPtr cvt_buf; //std::FILE* fr = std::fopen(filename.c_str(), "rb"); if(!fr.isValid()) @@ -219,7 +217,7 @@ riffskip: ADLMIDI_ErrorString = "Invalid MUS/DMX data format!"; return false; } - cvt_buf.reset(mid, ::free); + cvt_buf.reset(mid); //Open converted MIDI file fr.openData(mid, static_cast(mid_len)); //Re-Read header again! @@ -257,7 +255,7 @@ riffskip: ADLMIDI_ErrorString = "Invalid XMI data format!"; return false; } - cvt_buf.reset(mid, ::free); + cvt_buf.reset(mid); //Open converted MIDI file fr.openData(mid, static_cast(mid_len)); //Re-Read header again! diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp index 4f89cae..2d6ecae 100644 --- a/src/adlmidi_private.hpp +++ b/src/adlmidi_private.hpp @@ -68,6 +68,33 @@ extern std::string ADLMIDI_ErrorString; +/* + Smart pointer for C heaps, created with malloc() call. + FAQ: Why not std::shared_ptr? Because of Android NDK now doesn't supports it +*/ +template +class AdlMIDI_CPtr +{ + PTR* m_p; +public: + AdlMIDI_CPtr() : m_p(NULL) {} + ~AdlMIDI_CPtr() + { + reset(NULL); + } + + void reset(PTR *p = NULL) + { + if(m_p) + free(m_p); + m_p = p; + } + + PTR* get() { return m_p;} + PTR& operator*() { return *m_p; } + PTR* operator->() { return m_p; } +}; + class MIDIplay; struct OPL3 { -- cgit v1.2.3