Notes C API探訪: テキスト用LIST型のラップクラス(その4)
前回の記事に引き続き、テキストリスト(テキストを要素に持つLIST構造体)をラップするクラスに機能を追加していきます。
今回は、要素の削除です。インデックスを指定して要素を1つ削除するメソッドと、要素すべてを削除するメソッドの2つを定義します。これらは領域を増減させる部類になるので、インスタンスメソッドのみの定義になります。
要素を1つ削除
要素を1つ削除するには、ListRemoveEntry関数を使用します。
// class nxpp::TextList内
public:
/**
* @brief 指定した位置の要素を削除
* @param index 削除する要素のインデックス
* @return 成功すればtrue
*/
bool removeAt(WORD index) {
if (handle_ == NULLHANDLE || index >= size()) { return false; }
auto curSize = byteSize();
Status status = ListRemoveEntry(
handle_,
fPrefix_,
&curSize,
index
);
if (!status) { throw status; }
return true;
}
/**
* @brief 末尾の要素削除
* @return 成功すればtrue
*/
bool pop_back() {
return removeAt(size() - 1);
}
そもそもハンドルがなくて削除する要素がなかったり、指定した位置が範囲外の場合はfalseを返します。APIの実行が成功すればtrueを返します。
続くpop_backは、末尾の要素を削除するショートカットメソッドです。
要素すべてを削除
要素をすべて削除するには、ListRemoveAllEntries関数を使用します。
// class nxpp::TextList内
public:
/**
* @brief すべての要素を削除
*/
void removeAll() {
if (handle_ == NULLHANDLE || size() == 0) { return; }
auto curSize = byteSize();
Status status = ListRemoveAllEntries(
handle_,
fPrefix_,
&curSize
);
if (!status) { throw status; }
}
ハンドルがなかったり要素がなければ何もせずに終了します。
APIの実行に失敗すればエラーステータスをスローします。
まとめ
次回は、ListDuplicate関数をラップしてテキストリストインスタンスをコピーするメソッドを作ってみます。