00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #pragma once
00024
00025 #include "cinder/Cinder.h"
00026
00027 #define DEFAULT_COMPRESSION_LEVEL 6
00028
00029 namespace cinder {
00030
00031 class Buffer {
00032 private:
00033 struct Obj {
00034 Obj( void * aBuffer, size_t aSize, bool aOwnsData );
00035 ~Obj();
00036
00037 void * mData;
00038 size_t mAllocatedSize;
00039 size_t mDataSize;
00040 bool mOwnsData;
00041 };
00042
00043 public:
00044 Buffer() {}
00045 Buffer( void * aBuffer, size_t aSize );
00046 Buffer( size_t size );
00047
00048 size_t getAllocatedSize() const { return mObj->mAllocatedSize; }
00049 size_t getDataSize() const { return mObj->mDataSize; }
00050 void setDataSize( size_t aSize ) { mObj->mDataSize = aSize; }
00051
00052 void * getData() { return mObj->mData; }
00053 const void * getData() const { return mObj->mData; }
00054
00056 shared_ptr<uint8_t> convertToSharedPtr();
00057
00058 void resize( size_t newSize );
00059
00060 void copyFrom( const void * aData, size_t length );
00061
00062
00063 private:
00064 shared_ptr<Obj> mObj;
00065
00066 public:
00068
00069 typedef shared_ptr<Obj> Buffer::*unspecified_bool_type;
00070 operator unspecified_bool_type() { return ( mObj.get() == 0 ) ? 0 : &Buffer::mObj; }
00071 void reset() { mObj.reset(); }
00073 };
00074
00075 Buffer compressBuffer( const Buffer &aBuffer, int8_t compressionLevel = DEFAULT_COMPRESSION_LEVEL, bool resizeResult = true );
00076 Buffer decompressBuffer( const Buffer &aBuffer, bool resizeResult = true );
00077
00078 }