1 #ifndef _RNBO_ExternalData_h_
2 #define _RNBO_ExternalData_h_
9 #include "RNBO_String.h"
10 #include "RNBO_DataRef.h"
45 , _name(ref->getName())
47 if (ref->getFile() ==
nullptr) _file.clear();
48 else _file = ref->getFile();
49 if (ref->getTag() ==
nullptr) _tag.clear();
50 else _tag = ref->getTag();
51 _data = _dataRef->getData();
54 const char* getMemoryId()
const {
58 const char* getFile()
const {
62 const char *getTag()
const {
70 char* getData()
const {
71 if (_dataRef)
return _dataRef->getData();
75 bool isValid()
const {
76 return _dataRef !=
nullptr;
84 RNBO_ASSERT(!isValid());
85 Platform::assertTrue(ref,
"ref must be non null");
87 if (_callback && _data && _data != ref->getData()) {
88 _callback(getMemoryId(), _data);
93 if (ref->getFile() ==
nullptr) _file.clear();
94 else _file = ref->getFile();
95 if (ref->getTag() ==
nullptr) _tag.clear();
96 else _tag = ref->getTag();
99 void updateDataRef(
char* data,
size_t sizeInBytes) {
100 Platform::assertTrue(_dataRef,
"_dataRef must be non null");
102 if (_callback && _dataRef->getData() && data != _dataRef->getData()) {
103 _callback(getMemoryId(), _dataRef->getData());
106 _dataRef->setData(data, sizeInBytes);
110 void updateDataRef(
char* data,
size_t sizeInBytes,
DataType type) {
111 Platform::assertTrue(_dataRef,
"_dataRef must be non null");
113 updateDataRef(data, sizeInBytes);
114 _dataRef->setType(type);
117 void updateDataRef(
char* data,
size_t sizeInBytes,
ReleaseCallback callback) {
118 Platform::assertTrue(_dataRef,
"_dataRef must be non null");
120 updateDataRef(data, sizeInBytes);
121 _callback = callback;
125 updateDataRef(data, sizeInBytes, type);
126 _callback = callback;
129 void setTouched(
bool value) {
130 if (_dataRef) _dataRef->setTouched(value);
133 bool getTouched()
const {
134 if (_dataRef)
return _dataRef->getTouched();
139 if (_dataRef)
return _dataRef->getType();
143 size_t getSizeInBytes()
const {
144 if (_dataRef)
return _dataRef->getSizeInBytes();
154 DataRef* _dataRef =
nullptr;
159 char* _data =
nullptr;
166 class ExternalDataEvent
170 enum class EventAction {
179 , _action(EventAction::Undefined)
183 ExternalDataEvent(
const ExternalDataEvent& other) =
default;
184 ExternalDataEvent& operator = (
const ExternalDataEvent& other) =
default;
186 ExternalDataEvent(String memoryId,
char* data,
size_t sizeInBytes, DataType type, EventAction action, ReleaseCallback callback)
187 : _memoryId(std::make_shared<String>(memoryId))
189 , _sizeInBytes(sizeInBytes)
192 , _callback(callback)
196 const String& getMemoryId()
const {
return *_memoryId; }
197 char *getData()
const {
return _data; }
198 size_t getSizeInBytes()
const {
return _sizeInBytes; }
199 DataType getType()
const {
return _type; }
200 EventAction getAction()
const {
return _action; }
204 std::shared_ptr<String> _memoryId;
214 using UpdateRefCallback =
const std::function<void(DataRefIndex,
char*,
size_t, DataType)>;
215 using ReleaseRefCallback =
const std::function<void(DataRefIndex)>;
216 using ConstRefList =
const ExternalDataRef*
const*;
226 virtual void processBeginCallback(
DataRefIndex numRefs, ConstRefList refList, UpdateRefCallback updateDataRef, ReleaseRefCallback releaseDataRef) = 0;
227 virtual void processEndCallback(
DataRefIndex numRefs, ConstRefList refList) = 0;
239 constexpr
const char *InValidExternalDataId =
"";
242 #endif // _RNBO_ExternalData_h_