C++ 互換コンテナ

この節では C++ のコンテナをパステルステッチで使用するためのラッパーを規定する。提供されるコンテナはベクター、セット、マップの 3 種類である。ベクター (ベクトル) とセット (集合) はパステルステッチではまったく別の意味で使われているため、C++ 互換コンテナについては「ベクターコンテナ」および「セットコンテナ」と呼んで区別する。対称性のため、マップも「マップコンテナ」と呼ぶ。

コンテナに要素を追加するには、まず値を比較可能値 (comparable value) でラップする。比較可能値、コンテナ、イテレーターはすべてカプセルでラップされる。

比較可能値

比較可能値を作成するには make comparable valuec plus plus プリミティブ演算を用いる。このプリミティブ演算は引数 value, less, equal を取る。value 引数は必須、less 引数と equal 引数は省略可能である。value 引数には任意の値を指定できる。less 引数と equal 引数の値はコンティニュエーションである必要がある。これらのコンティニュエーションは、left コンティニュエーション引数と right コンティニュエーション引数で得られた値を比較し、halt 制御構文の main 引数にブーリアン型の値を渡さなければならない。less 引数のコンティニュエーションは、leftright よりも小さければ true を、そうでなければ false を返す必要がある。同様に、equal 引数のコンティニュエーションは、leftright と等しければ true を、そうでなければ false を返す必要がある。

less 引数を省略した場合は、この比較可能型の値をセットコンテナの要素およびマップコンテナのキーとして使用できない。また、less 引数または equal 引数を省略した場合は、この比較可能型の値を要素とするベクターコンテナに対して、一部の演算が動作しない。

比較可能値は以下のメソッドディスクリプターを使用できる。戻り値の型が「なし」であるものは、実際にはブーリアン型の false を返す。

メソッドディスクリプター 引数とその型 戻り値の型
typec plus plus main (ベクトル) ブーリアン
copyc plus plus main (比較可能値) 比較可能値
assignc plus plus main (比較可能値) なし
get valuec plus plus なし 任意
set valuec plus plus main (任意) なし
get lessc plus plus なし コンティニュエーション
set lessc plus plus main (コンティニュエーション) なし
get equalc plus plus なし コンティニュエーション
set equalc plus plus main (コンティニュエーション) なし

type メソッドは main 引数の値が comparable valuec plus plus であれば true を返す。copy メソッドは比較可能値のコピーを返す。assign メソッドは比較可能値の内容を main 引数のものに置き換える。get value, get less, get equal メソッドは、それぞれ比較可能値の構成要素を返す。set value, set less, set equal メソッドは、それぞれ比較可能値の構成要素をセットする。

ベクターコンテナ

make vector containerc plus plus プリミティブ演算は空のベクターコンテナを返す。

ベクターコンテナは以下のメソッドディスクリプターを使用できる。

メソッドディスクリプター 引数とその型 戻り値の型
typec plus plus main (ベクトル) ブーリアン
copyc plus plus main (ベクターコンテナ) ベクターコンテナ
sortc plus plus main (コンティニュエーション) なし
beginc plus plus なし イテレーター
endc plus plus なし イテレーター
rbeginc plus plus なし リバースイテレーター
rendc plus plus なし リバースイテレーター
sizec plus plus なし unitmax%t
emptyc plus plus なし ブーリアン
atc plus plus main (uintmax%t) 比較可能値
frontc plus plus なし 比較可能値
backc plus plus なし 比較可能値
assignc plus plus main (ベクターコンテナ) なし
assignc plus plus 1 (イテレーター), 2 (イテレーター) なし
push backc plus plus main (比較可能値) なし
pop backc plus plus なし なし
insertc plus plus 1 (イテレーター) 2 (比較可能値) イテレーター
insertc plus plus 1 (イテレーター) 2 (イテレーター) 3 (イテレーター) イテレーター
erasec plus plus main (イテレーター) イテレーター
erasec plus plus 1 (イテレーター) 2 (イテレーター) イテレーター
swapc plus plus main (ベクターコンテナ) なし
clearc plus plus なし なし
{=} main (ベクターコンテナ) ブーリアン
{<} main (ベクターコンテナ) ブーリアン
{^le} main (ベクターコンテナ) ブーリアン

type メソッドは main 引数の値が vector containerc plus plus であれば true を返す。copy メソッドはベクターコンテナのコピーを返す。sort メソッドはベクターコンテナをソートする。sort メソッドの main 引数は、比較可能値の less 構成要素と同様のコンティニュエーションである必要がある。他のメソッドは C++ の同名のメンバー関数に従う。

セットコンテナ

make set containerc plus plus プリミティブ演算は空のセットコンテナを返す。

セットコンテナは以下のメソッドディスクリプターを使用できる。

メソッドディスクリプター 引数とその型 戻り値の型
typec plus plus main (ベクトル) ブーリアン
copyc plus plus main (セットコンテナ) セットコンテナ
assignc plus plus main (セットコンテナ) なし
beginc plus plus なし イテレーター
endc plus plus なし イテレーター
rbeginc plus plus なし リバースイテレーター
rendc plus plus なし リバースイテレーター
emptyc plus plus なし ブーリアン
sizec plus plus なし unitmax%t
insertc plus plus main (比較可能値) なし
insertc plus plus 1 (イテレーター) 2 (イテレーター) なし
erasec plus plus main (イテレーター) イテレーター
erasec plus plus main (比較可能値) なし
erasec plus plus 1 (イテレーター) 2 (イテレーター) イテレーター
swapc plus plus main (セットコンテナ) なし
clearc plus plus なし なし
findc plus plus main (比較可能値) イテレーター
{=} main (ベクターコンテナ) ブーリアン
{<} main (ベクターコンテナ) ブーリアン
{^le} main (ベクターコンテナ) ブーリアン

type メソッドは main 引数の値が set containerc plus plus であれば true を返す。copy メソッドはセットコンテナのコピーを返す。assign メソッドはセットコンテナの内容を main 引数のものに置き換える。他のメソッドは C++ の同名のメンバー関数に従う。

マップコンテナ

get map containerc plus plus プリミティブ演算は空のマップコンテナを返す。

マップコンテナは以下のメソッドディスクリプターを使用できる。

メソッドディスクリプター 引数とその型 戻り値の型
typec plus plus main (ベクトル) ブーリアン
copyc plus plus main (マップコンテナ) マップコンテナ
assignc plus plus main (マップコンテナ) なし
beginc plus plus なし イテレーター
endc plus plus なし イテレーター
rbeginc plus plus なし リバースイテレーター
rendc plus plus なし リバースイテレーター
emptyc plus plus なし ブーリアン
sizec plus plus なし unitmax%t
atc plus plus 比較可能値 比較可能値
insertc plus plus 1 (比較可能値) 2 (比較可能値) なし
insertc plus plus 1 (イテレーター) 2 (イテレーター) なし
erasec plus plus main (イテレーター) イテレーター
erasec plus plus main (比較可能値) なし
erasec plus plus 1 (イテレーター) 2 (イテレーター) イテレーター
swapc plus plus main (セットコンテナ) なし
clearc plus plus なし なし
findc plus plus main (比較可能値) イテレーター
{=} main (ベクターコンテナ) ブーリアン
{<} main (ベクターコンテナ) ブーリアン
{^le} main (ベクターコンテナ) ブーリアン

type メソッドは main 引数の値が set containerc plus plus であれば true を返す。copy メソッドはマップコンテナのコピーを返す。assign メソッドはマップコンテナの内容を main 引数のものに置き換える。他のメソッドは C++ の同名のメンバー関数に従う。

イテレーター

イテレーターはコンテナから得られる。

イテレーターは以下のメソッドディスクリプターを使用できる。ただし、イテレーターがベクターコンテナ、セットコンテナ、マップコンテナのいずれから作成されたかによって、どのメソッドを使用できるかが異なる。

メソッドディスクリプター 引数とその型 戻り値の型
typec plus plus main (ベクトル) ブーリアン
copyc plus plus main (イテレーター) イテレーター
assignc plus plus main (イテレーター) なし
getc plus plus なし 比較可能値
setc plus plus main (比較可能値) なし
get keyc plus plus なし 比較可能値
set keyc plus plus main (比較可能値) なし
get valuec plus plus なし 比較可能値
set valuec plus plus main (比較可能値) なし
increasec plus plus main (uintmax%t) なし
decreasec plus plus main (uintmax%t) なし
distancec plus plus main (イテレーター) uintmax%t
prevc plus plus main (uintmax%t) イテレーター
nextc plus plus main (uintmax%t) イテレーター
{=} main (イテレーター) ブーリアン
{<} main (イテレーター) ブーリアン
{^le} main (イテレーター) ブーリアン

type メソッドは main 引数の値が iteratorc plus plus であれば true を返す。copy メソッドはイテレーターのコピーを返す。assign メソッドはイテレーターの内容を main 引数のものに置き換える。get メソッドはイテレーターの値を得る。set メソッドはイテレーターの値を置き換える。get key, set key, get value, set value メソッドは、イテレーターがマップコンテナに属する場合に使用できる。increase メソッドと decrease メソッドはイテレーターを進めるか戻す。distance メソッドは、1 引数のイテレーターよりもイテレーターが進んでいる場合に、それらの距離を返す。