見出し画像

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関数をラップしてテキストリストインスタンスをコピーするメソッドを作ってみます。

この記事が気に入ったらサポートをしてみませんか?