SimpleBuffer
固定バッファ長の配列クラス
可変長の配列ですが、最大長は固定の配列クラスです。
配列のメモリは、外部の固定バッファを参照する方法と、内部にコストラクタで確保する方法の2種類があります。
外部のバッファを参照する場合、参照先のメモリを安全に利用できるようユーザプログラムで管理しなければなりません。
template 引数
いくつかの派生クラスを定義するためtemplateによる定義となっています。
引数
意味
T
データ型
SOUT
IStreamOut
派生クラスを継承することで<<
演算子などを用いたデータ追加を可能とします。
IStreamOut
クラスを継承するとメンバー変数が増えるため、デフォルトはダミーとなっています。
is_sting_type
1
を指定すると、文字列型 (uint8_t
やwchar_t
) の場合に、NUL終端を意識したコードを有効にします。
バッファを確保する際に終端文字分を余分に確保する
固定長配列によるコピーコンストラクトなどではNUL文字までをコピー対象とする
メソッド
SimpleBuffer() - コストラクタ
パラメータなしのコンストラクタは、バッファ未登録として初期化します。バッファが未登録の場合はlength_max()
が0になります。このオブジェクトを配列として利用するにはattach()
メソッドにより改めてバッファを登録する必要があります。
外部のバッファを参照する場合は、バッファへのポインタp
、配列の初期長u16len
、配列の最大長u16maxlen
を指定します。
メモリを動的確保するにはu16maxlen
のみを指定するコンストラクタを呼び出します。
代入演算子、コピーコンストラクタ
コピー元が、外部メモリ参照の場合は、コピー元の参照先をそのままコピーします。
コピー元が、内部にメモリ確保している場合は、コピー元のメモリ領域をそのまま利用します。新たにメモリのコピーを作成するわけではありません。本クラスでの内部確保したメモリは、スマートポインタshared_ptr
で管理されます。コピー先とコピー元すべてのオブジェクトが破棄された時点で、メモリ領域を破棄します。
attach()
配列の参照先を再設定します。
内部メモリ確保のオブジェクトの場合、内部メモリのスマートポインタを破棄しません。
一時的に部分配列として取り扱うといった使い方を想定します。以下の例では、128バイトの長さのbuf
を生成した後に、先頭17バイト目から末尾までの部分配列buf_sub
を生成しています。
begin(), end()
配列の先頭ポインタ、末尾+1のアドレスのポインタを返します。STLのアルゴリズムや範囲for文などで利用されます。
配列バッファの先頭ポインタを得るときにbegin()
を用います。
append()
⇒push_back()
push_back()
配列の末尾に要素を追加します。要素が追加できないときはfalseが戻ります。
length(), length_max()
⇒size(), capacity()
size(), capacity()
size()
は配列の長さ、capacity()
は配列の最大長を返します。
redim()
⇒reserve()
reserve()
配列の長さを変更します。現在の長さより大きくなる場合は要素型T
のデフォルトの初期化方法T{}
にて初期化されます。数値型なら0です。
operator []
配列へのアクセス手段を提供します。
インデックスi
は、負の値の場合は配列の末尾からのインデックスとなります。-1
が末尾になります。
最終更新