2.4 共通メンバ関数
クラスはすべて、その分類にはかかわらず、似たようなプログラミングインタフェースを持っています。この節では、その共通機能について説明します。
2.4.1永続性
Tools.h++ は、以下のメンバ関数を使ってClassName 型のオブジェクトを RWFile や Rogue Wave 仮想ストリームへ格納し、復元します。
RWFile& operator<<(RWFile& file, const ClassName&); RWFile& operator>>(RWFile& file, ClassName&); Rwvostream& operator<<(RWvostream& vstream,const ClassName&); Rwvistream& operator>>(RWvistream& vstream, ClassName&);
ANSI-C ファイル I/O をカプセル化するクラス RWFile は、オブジェクトをバイナリ形式で保存します。その結果、ファイルへの格納と取り出しが効率的に行われます。RWFile について詳しくは、Tools.h++ User’s Guideの第 7 章を参照してください。
クラス RWvistream と RWvostream は Rogue Wave 仮想ストリーム機能が使用する抽象基底クラスです。最終の出力形式は、特殊クラスによって決定されます。例えば、RWpistream と RWpostreamは、それぞれ RWvistream と RWvostream から派生した 2 つのクラスです。これらのクラスは、移植可能な ASCII 形式を使ってオブジェクトを格納または取り出します。結果は異なるオペレーティングシステム間で転送することができます。これらのクラスについて詳しくは、Tools.h++ User’s Guide の第 6 章を参照してください。
RWFile または Rogue Wave ストリームのどちらに格納するかの判断は、ユーザに任されています。RWFileへの格納は、速い代わりに、別のホストマシンやオペレーティングシステムに結果を移植するときに制限が生じます。Rogue Wave ストリームへの格納は、速度に欠ける代わりに、異なるマシン間で移植可能な形式や、分散型計算のためのXDRストリームによるカプセル化などの、便利な機能を持つ特殊クラスが使えます。
2.4.2 格納サイズ
次の共通メンバ関数は、RWFileが ClassName 型オブジェクトを格納するのに必要な、二次格納領域のバイト数を返します。
Rwspace ClassName::binaryStoreSize() const; Rwspace ClassName::recursiveStoreSize() const;
メンバ関数は、次の関数を使用します。
RWFile& operator<<(RWFile& file, const ClassName&);
上記のメンバ関数は、クラス RWFileManager および RWBTreeOnDisk
を使うオブジェクトを格納するときに便利です。RWCollectable から継承するオブジェクトの場合、2 番目のメンバ関数 recursiveStoreSize() は、再帰格納で使用されているバイト数を計算します。これは、次の関数を使用します。
RWFile& operator<<(RWFile& file, const RWCollectable&)
あらゆるストリームに対して、RWAuditStreamBuffer クラスを使ってバッファに渡されるバイト数を数えることができます。つまり、このクラスは、上記のメンバ関数 recursiveStoreSize() がファイルに対して与えるのと同じ機能を、ストリームに提供します。RWAuditStreamBuffer について詳しくは、Tools.h++ Class Reference を参照してください。
2.4.3 ストリーム I/O
多重定義された左シフト演算子 << は、最初の引数として ostream オブジェクトをとり、人間が読める形式でオブジェクトの内容を出力します。逆に、多重定義された右シフト演算子 >> は、最初の引数として istream オブジェクトをとり、人間が読める形式でストリームからオブジェクトを読み取り、分割します。
ostream& operator<<(ostream& ostr, const ClassName& x); istream& operator>>(istream& istr, const ClassName& x);
多重定義された左シフトおよび右シフト演算子は、永続性演算子と対照を成します。
Rwvostream& operator<<(RWvostream& vstream, const ClassName&); Rwvistream& operator>>(RWvistream& vstream, ClassName&);
永続性シフト演算子は、ストリームへ格納およびストリームから復元しますが、必ずしも「人間が読める」形式でそれを実行するとはかぎりません。
2.4.4 比較
ほとんどのクラスが比較と同等のメンバ関数を持ちます。
int compareTo(ClassName*) const; RWBoolean equalTo(ClassName*) const;
また、論理演算子の対を持ちます。
RWBoolean operator==(const ClassName&) const; RWBoolean operator!=(const ClassName&) const; RWBoolean operator<=(const ClassName&) const; RWBoolean operator>=(const ClassName&) const; RWBoolean operator<(const ClassName&) const; RWBoolean operator>(const ClassName&) const;