/** @file @brief 可変長データを示すクラスを記述する。 */ #pragma once //----------------------------------------------------------- #include //----------------------------------------------------------- namespace apcl { namespace util { using ::apcl::util::byte; using ::apcl::util::u32; /** * 可変長データを示すクラス *
	 * データを作成した際,領域を新たに確保した際,値は0がセットされる。
	 * 
*/ class Data { public: Data(void); explicit Data( const Data& ); Data( const void* aBytes , u32 aLength ); ///< コピー元のデータを指定して作成する。 virtual ~Data(); /// 引数のデータと長さで初期化する。 void init( const void* aBytes , u32 aLength ); /// データの長さを変える。元のサイズ部分の内容は保持される。 void resize( u32 aSize ); /// データを末端に追加する。 void push( const Data& ); /// 指定の長さのデータを終端から除去する。 void pop( u32 aLength ); /// データの内容が等しいかどうかを取得する。 bool equals( const Data& )const; /// 指定のインデックスの値を取得する。 byte& at( u32 aIndex ); byte at( u32 aIndex )const; /// バイトポインタを取得する。 byte* bytes(void); const byte* bytes(void)const; /// 長さを取得する。 u32 length(void)const; const Data& operator +=( const Data& ); ///< push() byte& operator []( u32 aIndex ); ///< at() byte operator []( u32 aIndex )const; ///< at() bool operator ==( const Data& )const; ///< equals() const Data& operator =( const Data& ); ///< init() private: byte* bytes_; u32 length_; void _releaseBytes(); }; } // end of namespace util } // end of namespace apcl