Go to the documentation of this file.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 );
00048 explicit Buffer( std::shared_ptr<class DataSource> dataSource );
00049
00050 size_t getAllocatedSize() const { return mObj->mAllocatedSize; }
00051 size_t getDataSize() const { return mObj->mDataSize; }
00052 void setDataSize( size_t aSize ) { mObj->mDataSize = aSize; }
00053
00054 void * getData() { return mObj->mData; }
00055 const void * getData() const { return mObj->mData; }
00056
00058 std::shared_ptr<uint8_t> convertToSharedPtr();
00059
00060 void resize( size_t newSize );
00061
00062 void copyFrom( const void * aData, size_t length );
00063
00064
00066 void write( std::shared_ptr<class DataTarget> dataTarget );
00067
00068 private:
00069 std::shared_ptr<Obj> mObj;
00070
00071 public:
00073
00074 typedef std::shared_ptr<Obj> Buffer::*unspecified_bool_type;
00075 operator unspecified_bool_type() const { return ( mObj.get() == 0 ) ? 0 : &Buffer::mObj; }
00076 void reset() { mObj.reset(); }
00078 };
00079
00080 Buffer compressBuffer( const Buffer &aBuffer, int8_t compressionLevel = DEFAULT_COMPRESSION_LEVEL, bool resizeResult = true );
00081 Buffer decompressBuffer( const Buffer &aBuffer, bool resizeResult = true, bool useGZip = false );
00082
00083 }