- give access to the SetParent to KaxSimpleBlock as well
- change the placement of a MATROSKA_DLL_API so that it actually works
- remove all references to the old/outdated/previous tag system
+ - add the possibility for a DataBuffer class to use its own internal memory
2010-06-04 robux4/mosu
New 1.0.0 version:
uint32 mySize;
bool bValidValue;
bool (*myFreeBuffer)(const DataBuffer & aBuffer); // method to free the internal buffer
+ bool bInternalBuffer;
public:
- DataBuffer(binary * aBuffer, uint32 aSize, bool (*aFreeBuffer)(const DataBuffer & aBuffer) = NULL)
- :myBuffer(aBuffer)
+ DataBuffer(binary * aBuffer, uint32 aSize, bool (*aFreeBuffer)(const DataBuffer & aBuffer) = NULL, bool _bInternalBuffer = false)
+ :myBuffer(NULL)
,mySize(aSize)
- ,bValidValue(true)
- ,myFreeBuffer(aFreeBuffer)
- {}
+ ,bValidValue(true)
+ ,myFreeBuffer(aFreeBuffer)
+ ,bInternalBuffer(_bInternalBuffer)
+ {
+ if (bInternalBuffer)
+ {
+ myBuffer = new binary[mySize];
+ if (myBuffer == NULL)
+ bValidValue = false;
+ else
+ memcpy(myBuffer, aBuffer, mySize);
+ }
+ else
+ myBuffer = aBuffer;
+ }
+
virtual ~DataBuffer() {}
- virtual binary * Buffer() {return myBuffer;}
+ virtual binary * Buffer() {assert(bValidValue); return myBuffer;}
virtual uint32 & Size() {return mySize;};
- virtual const binary * Buffer() const {return myBuffer;}
+ virtual const binary * Buffer() const {assert(bValidValue); return myBuffer;}
virtual const uint32 Size() const {return mySize;};
bool FreeBuffer(const DataBuffer & aBuffer) {
bool bResult = true;
- if (myBuffer != NULL && myFreeBuffer != NULL && bValidValue) {
- bResult = myFreeBuffer(aBuffer);
+ if (myBuffer != NULL && bValidValue) {
+ if (myFreeBuffer != NULL)
+ bResult = myFreeBuffer(aBuffer);
+ if (bInternalBuffer)
+ delete [] myBuffer;
myBuffer = NULL;
+ mySize = 0;
bValidValue = false;
}
return bResult;