バナーをクリックすれば目次に戻ります

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.


RWTIsvDlist<T>

形式

#include <rw/tidlist.h>
RWTIsvDlist<T> list;

説明

このクラスは、侵入的二重リンクリストを実装するクラスです。

侵入的リストとは、リスト内のメンバーが共通基底クラス (この場合、RWIsvDlink) から継承されていなければならないものをいいます。このリストの長所は、メモリーとディスク空間に対する要求が最小であること、欠点は、継承階層が柔軟性に欠けるため、既存クラスでの使用が多少困難であることです。非侵入的な代替リンクリストとして、クラス RWTValDlist<T> があります。

侵入的リストの詳細は、Stroustrup (1991 年、Section 8.3.1) を参照してください。


注 - 侵入的リストに項目を挿入するときは、コピーではなく実体を挿入します。各項目は 1 つのリンクフィールドのみを持つので、同じ項目を複数のリストに挿入したり、同じ項目を複数回同じリストに挿入することはできません。

#include <rw/tidlist.h>
#include <rw/rstream.h>
#include <string.h>

struct Symbol : public RWIsvDlink {
  char name[10];
  Symbol( const char* cs)
    { strncpy(name, cs, sizeof(name)); name[9] = '\0'; }
};

void printem(Symbol* s, void*) { cout << s->name << endl; }

main(){
  RWTIsvDlist<Symbol> list;
  list.insert( new Symbol("one") );
  list.insert( new Symbol("two") );
  list.prepend( new Symbol("zero") );

  list.apply(printem, 0);
  list.clearAndDestroy();  //
リスト内に挿入された項目を削除する
  return 0;
}

プログラム出力:

zero
one
two

公開コンストラクタ

RWTIsvDlist();

空のリストを作成します。

RWTIsvDlist(T* a);

1 個の項目から成るリスト a を作成します。

公開メンバー関数

void
append(T* a);

項目 a をリストの最後に追加します。

void
apply(void (*applyFun)(T*, void*), void* d);

コレクション内の全項目に対して関数 applyFun を呼び出します。この関数には次のようなプロトタイプが必要です。

void  yourFun(T* item, void* d);

項目は引数 item として渡されます。クライアントデータはパラメータ d で引き渡すことができます。

T*
at(size_t i) const;

インデックス i の項目を返します。インデックス i は、0 〜 (コレクション内の項目数 -1) の範囲になければなりません。範囲外にあると TOOL_INDEX 型の例外が発生します。

void
clear();

リストからすべての項目を取り除きます。

void
clearAndDestroy();

リスト内の各項目を取り除き、それぞれに対して delete を呼び出します。この処理は、各項目がヒープから割り当てられていることを前提としています。

RWBoolean
contains(RWBoolean (*testFun)(const T*, void*),void* d)
         const;

ユーザー定義テスト関数 testFunTRUE を返す項目がリストにあれば TRUE を返します。テスト関数には次のプロトタイプが必要です。

    RWBoolean yourTester(const T* item, void* d);

リスト内の各項目について、その項目を第 1 引数としてこの関数を呼び出します。クライアントデータをパラメータ d として引き渡すことができます。

RWBoolean
containsReference(const T* a) const;

アドレス a を持つ項目がリストにあれば TRUE を返します。

size_t
entries() const;

現在、リストにある項目の数を返します。

T*
find(RWBoolean (*testFun)(const T*, void*),void* d) const;

リスト内のユーザー定義テスト関数 testFunTRUE を返す最初の項目を返します。そのような項目がなければ NULL を返します。テスト関数には次のプロトタイプが必要です。

   RWBoolean yourTester(const T* item, void* d);

リスト内の各項目について、その項目を第 1 引数としてこの関数を呼び出します。クライアントデータをパラメータ d として引き渡すことができます。

T*
first() const;

リスト内の最初の項目を返します (ただし、取り除きません)。リストが空であれば NULL を返します。

T*
get();

リストの最初の項目を返し、それを取り除きます。リストが空であれば NULL を返します。

size_t
index(RWBoolean (*testFun)(const T*, void*),void* d) const;

リスト内のユーザー定義テスト関数 testFunTRUE を返す最初の項目のインデックスを返します。そのような項目がなければ RW_NPOS を返します。テスト関数には次のプロトタイプが必要です。

    RWBoolean yourTester(const T* item, void* d);

リスト内の各項目について、その項目を第 1 引数としてこの関数を呼び出します。クライアントデータをパラメータ d として引き渡すことができます。

void
insert(T* a);

a が指す項目をリストの最後に追加します。この項目を複数のリストに挿入したり同じリストに複数回挿入することはできません。

void
insertAt(size_t i, T* a);

インデックス位置 i に項目 a を挿入します。この位置は、0 〜 (リスト内の項目数) の範囲になければなりません。範囲外にあると TOOL_INDEX 型の例外が発生します。この項目を複数のリストに挿入したり同じリストに複数回挿入することはできません。

RWBoolean
isEmpty() const;

リスト内に項目がまったくなければ TRUE を、あれば FALSE を返します。

T*
last() const;

リスト内の最後の項目を返します (ただし、取り除きません)。リストが空であれば NULL を返します。

size_t
occurrencesOf(RWBoolean (*testFun)(const T*, void*),void* d)
              const;

リストを走査し、ユーザー定義テスト関数 testFunTRUE を返した項目の数を返します。テスト関数には次のプロトタイプが必要です。

   RWBoolean yourTester(const T* item, void* d);

リスト内の各項目について、その項目を第 1 引数としてこの関数を呼び出します。クライアントデータをパラメータ d として引き渡すことができます。

size_t
occurrencesOfReference(const T* a) const;

リスト内に項目 a が何個あるか、その個数を返します。項目は複数回リストに挿入できないので、この関数は 0 か 1 しか返しません。

void
prepend(T* a);

項目 a をリストの最初に追加します。

T*
remove(RWBoolean (*testFun)(const T*, void*),void* d);

ユーザー定義テスト関数 testFunTRUE を返す最初の項目を取り除き、その項目を返します。そのような項目がなければ NULL を返します。テスト関数には次のプロトタイプが必要です。

   RWBoolean yourTester(const T* item, void* d);

リスト内の各項目について、その項目を第 1 引数としてこの関数を呼び出します。クライアントデータをパラメータ d として引き渡すことができます。

T*
removeAt(size_t i);

インデックス i の項目を取り除き、その項目を返します。インデックス i は 0 〜 (コレクション内の項目数 -1) の範囲になければなりません。範囲外にあると TOOL_INDEX 型の例外が発生します。

T*
removeFirst();

リスト内の最初の項目を取り除いて、その項目を返します。リストが空であれば NULL を返します。

T*
removeLast();

リスト内の最後の項目を取り除いて、その項目を返します。リストが空であれば NULL を返します。

T*
removeReference(T* a);

アドレス a を持った項目を取り除いて、その項目を返します。そのような項目がなければ NULL を返します。