Common Library  0.9.5
Serialization< Code, Out > クラステンプレート

データをビット列に変換する [詳解]

公開メンバ関数

 Serialization (Out out)
 出力先反復子を指定して構築 [詳解]
 
 ~Serialization ()
 デストラクタ [詳解]
 
template<class Data >
void operator() (Data data, size_t length)
 データの書き込みを行う [詳解]
 
void flush ()
 キャッシュ内のデータを出力する [詳解]
 

詳解

template<class Code, class Out>
class Serialization< Code, Out >

データをビット列に変換する

Data 型のデータをビット列として Code 型のデータに変換する。 クラス・テンプレート引数の Code は変換後のデータ型、Out は出力先反復子をそれぞれ表す。 メンバ関数 Serialization< Code, Out >::operator() がビット列への変換処理を行う。 Serialization< Code, Out >::operator() のテンプレート引数 Data は変換前のデータの型を表す。

Out は出力イテレータなので、データ型は未定義(void)である。したがって、Out の他に出力するビット列の型 Code も指定しなければならない。 back_insert_iterator を利用した場合のサンプル・プログラムは以下の通り。

std::vector< unsigned char > data;
:
std::vector< unsigned int > code;
for ( std::vector< unsigned char >::const_iterator i = data.begin() ; i != data.end() ; ++i ) {
serial( *i, sizeof( unsigned char ) * CHAR_BIT );
}
データをビット列に変換する
Definition: serialize.h:62

型の名前が冗長だが、std::for_each と Create_BackInsertSerialization を利用することで多少はすっきりと書ける。

using namespace std::placeholders;
std::vector< unsigned char > data;
:
std::vector< unsigned int > code;
std::for_each( data.begin(), data.end(), std::bind( Create_BackInsertSerialization( code ), _1, sizeof( unsigned char ) * CHAR_BIT ) );
Serialization< typename Container::value_type, std::back_insert_iterator< Container > > Create_BackInsertSerialization(Container &c)
std::back_insert_iterator を利用した Serialization オブジェクトを生成するヘルパ関数
Definition: serialize.h:471

サンプル・プログラムにおいて、Code とコンテナの要素の型が一致しなかった場合、結果は不定となる (余分な部分にゼロが埋められるか、足りない領域が削られてしまう)。

Data 型及び Code 型は符号なし整数であることを前提としている。ともにビットシフト演算 ( >>, << ) を利用し、 両者の間で論理演算 ( &, | ) も行われる。したがって、これらの演算が定義され、互いに型変換できる必要がある。 基本的には組み込み変数での利用を想定している。

構築子と解体子

◆ Serialization()

template<class Code , class Out >
Serialization< Code, Out >::Serialization ( Out  out)
inlineexplicit

出力先反復子を指定して構築

引数
out出力先反復子

◆ ~Serialization()

template<class Code , class Out >
Serialization< Code, Out >::~Serialization ( )
inline

デストラクタ

キャッシュに残ったデータは解体時に書き込まれる

関数詳解

◆ operator()()

template<class Code , class Out >
template<class Data >
void Serialization< Code, Out >::operator() ( Data  data,
size_t  length 
)

データの書き込みを行う

引数
data書き込むデータ
lengthデータ長(ビット列の長さ)
戻り値
なし

◆ flush()

template<class Code , class Out >
void Serialization< Code, Out >::flush

キャッシュ内のデータを出力する

戻り値
なし

このクラス詳解は次のファイルから抽出されました: