SimpleBuffer

固定バッファ長の配列クラス

可変長の配列ですが、最大長は固定の配列クラスです。

template <class T, 
          class SOUT=_SimpleBuffer_DummyStreamOut,
          int is_string_type=0>
class SimpleBuffer : public SOUT

配列のメモリは、外部の固定バッファを参照する方法と、内部にコストラクタで確保する方法の2種類があります。

template 引数

いくつかの派生クラスを定義するためtemplateによる定義となっています。

引数

意味

T

データ型

SOUT

IStreamOut 派生クラスを継承することで<<演算子などを用いたデータ追加を可能とします。 IStreamOutクラスを継承するとメンバー変数が増えるため、デフォルトはダミーとなっています。

is_sting_type

1を指定すると、文字列型 (uint8_twchar_t) の場合に、NUL終端を意識したコードを有効にします。

  • バッファを確保する際に終端文字分を余分に確保する

  • 固定長配列によるコピーコンストラクトなどではNUL文字までをコピー対象とする

メソッド

SimpleBuffer() - コストラクタ

パラメータなしのコンストラクタは、バッファ未登録として初期化します。バッファが未登録の場合はlength_max()が0になります。このオブジェクトを配列として利用するにはattach()メソッドにより改めてバッファを登録する必要があります。

外部のバッファを参照する場合は、バッファへのポインタp、配列の初期長u16len、配列の最大長u16maxlenを指定します。

メモリを動的確保するにはu16maxlenのみを指定するコンストラクタを呼び出します。

代入演算子、コピーコンストラクタ

コピー元が、外部メモリ参照の場合は、コピー元の参照先をそのままコピーします。

コピー元が、内部にメモリ確保している場合は、コピー元のメモリ領域をそのまま利用します。新たにメモリのコピーを作成するわけではありません。本クラスでの内部確保したメモリは、スマートポインタshared_ptrで管理されます。コピー先とコピー元すべてのオブジェクトが破棄された時点で、メモリ領域を破棄します。

attach()

配列の参照先を再設定します。

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が末尾になります。

最終更新