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

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


RWGDlist(type)

形式

#include <rw/gdlist.h>
declare(RWGDlist, type)

RWGDlist(type) a;

説明

このクラスは型 type の順序付き要素の集まりを表します。外部キーではアクセスできません。要素の重複は許可されています。二重リンクリストとして実装されます。この型のオブジェクトは、標準 C++ ヘッダファイル <generic.h> で定義されたマクロを使用して宣言されます。コレクション内の特定の項目を見つけるには、矛盾なく一致しているかどうかを調べるユーザー定義の大域テスト関数が必要です。この関数には次のプロトタイプが必要です。

    RWBoolean yourTesterFunction(const type* c, const void* d);
引数 c は、一致するかどうかを調べるコレクション内の要素です。引数 dyourTesterFunction() に渡して cd が一致すれば、関数は TRUE を返します。

記述を簡単にするため、テスト関数に対して次のような仮想の typedef が使用されています。

    typedef RWBoolean (*yourTester)(const type*, const void*);

持続性

なし

#include <rw/gdlist.h>
#include <rw/rstream.h>

declare(RWGDlist,int)    /* 整数のリストを宣言する */

main()  {
  RWGDlist(int) list;    // 整数のリストを定義する
  int *ip;

  list.insert(new int(5));   // 整数を挿入する
  list.insert(new int(7));
  list.insert(new int(1));
  list.prepend(new int(11));

  RWGDlistIterator(int) next(list);

  while(ip = next() )
    cout << *ip << endl;   // メンバーを出力する

  while(!list.isEmpty())
    delete list.get();     // リスト項目を削除する
  return 0;
}
END FILE

プログラム出力:

    11
    5
    7
    1

公開コンストラクタ

RWGDlist(type)();

空のコレクションを作成します。

RWGDlist(type)(type* a);

1 項目 a から成るコレクションを作成します。

RWGDlist(type)(const RWGDlist(type)& a);

コピーコンストラクタ。a のシャローコピーを作成します。

代入演算子

void
operator=(const RWGDlist(type)& a);

代入演算子。a のシャローコピーを作成します。

公開メンバー関数

type*
append(type* a);

項目をコレクションの最後に追加します。挿入が失敗すると NULL を返します。

void
apply(void (*ap)(type*, void*), void* );

コレクション内のすべての項目に最初から最後の順序でアクセスし、各項目に対して ユーザー提供関数 ap を呼び出します。この関数には次のようなプロトタイプが必要です。

   void yourApplyFunction(type* c, void*);

また、この関数は、アドレス c にあるオブジェクトに対して任意の操作を実行できます。最後の引数は、apply 関数にデータを渡すのに使用できます。

type*&
at(size_t i);
const type*
at(size_t i) const;

コレクションの i 番目の項目へのポインタを返します。最初に記述した可変要素は左辺値として使用できますが、2 番目の可変要素は使用できません。インデックス i は 0 〜 (コレクションの項目数 -1) の範囲になければなりません。範囲外にあると TOOL_INDEX 型の例外が発生します。

void
clear();

コレクションからすべての項目を取り除きます。

RWBoolean
contains(yourTester t, const void* d) const;

ユーザー定義関数 t が、d と一致するとみなした項目がコレクションにあれば、TRUE を返します。

RWBoolean
containsReference(const type* e) const;

アドレス e を持つ項目がコレクションにあれば TRUE を返します。

size_t
entries() const;

コレクションにある項目の数を返します。

type*
find(yourTester t, const void* d) const;

ユーザー提供関数 t が、d と一致するとみなした、コレクション内の最初の項目を返します。一致する項目がないと NULL を返します。

type*
findReference(const type* e) const;

コレクション内のアドレス e を持つ最初の項目を返します。そのような項目がないと NULL を返します。

type*
first() const;

コレクションの最初の項目を返します。

type*
get();

コレクションの最初の項目を返し、それを取り除きます。

type*
insert(type* e);

項目をコレクションの最後に追加し、その項目を返します。挿入が失敗すると NULL を返します。

void
insertAt(size_t indx, type* e);

コレクション内のインデックス位置 indx に新しい項目を追加します。今まで indx にあった項目は indx+1 に移動し、以降の項目も同様に移動します。インデックス indx は 0 〜 (コレクションの項目数) の範囲になければなりません。範囲外にあると TOOL_INDEX 型の例外が発生します。

RWBoolean
isEmpty() const;

コレクションに項目がまったくなければ TRUE を、あれば FALSE を返します。

type*
last() const;

コレクション内の最後の項目を返します。

size_t
occurrencesOf(yourTester t, const void* d) const;

ユーザー提供関数 t が、d と一致するとみなした、コレクション内の項目の数を返します。

size_t
occurrencesOfReference(const type* e) const;

コレクション内のアドレス e を持つ項目の数を返します。

type*
prepend(type* a);

項目をコレクションの最初に追加します。挿入が失敗すると NULL を返します。

type*
remove(yourTester t, const void* d);

ユーザー提供関数 t が、d と一致するとみなした最初の項目を、コレクションから取り除き、その項目を返します。そのような項目がなければ NULL を返します。

type*
removeReference(const type* e);

アドレス e を持った最初の項目をコレクションから取り除き、その項目を返します。そのような項目がなければ NULL を返します。