<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>株式会社エス・スリー・フォー &#187; reference</title>
	<atom:link href="http://www.s34.co.jp/category/cpptechdoc/reference/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.s34.co.jp</link>
	<description>株式会社エス・スリー・フォーは、一人一人のスキルを重視したシステム・ネットワーク構築のプロフェッショナル集団です。蓄積されたノウハウと最新技術により、お客様が考えられているシステムを明確にし、ご提案させて頂きます。</description>
	<lastBuildDate>Mon, 23 Jan 2012 07:59:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>9章: クラス RWBTreeOnDisk の使い方</title>
		<link>http://www.s34.co.jp/cpptechdoc/reference/tools-9/</link>
		<comments>http://www.s34.co.jp/cpptechdoc/reference/tools-9/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 08:58:28 +0000</pubDate>
		<dc:creator>cpptechdoc</dc:creator>
				<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.s34.co.jp/?p=1358</guid>
		<description><![CDATA[9.1 生成 9.2 例 RWBTreeOnDisk クラスは、ディスク上のファイルで B ツリーを管理するために設計されています。このクラスは、キーと値の関連付けを順序よく並べたコレクションを表わします。その順序はキーを比較することによって内部的に決定されます。キーを指定すると、値を取り出すことができます。キーの重複は許可されません。 キーは char の配列で、キーの長さはコンストラクタによって設定されます。B ツリー内の順序は、キーを外部関数 (変更可能) と比較することによって決定されます。 値の型は次のとおりです。 typedef long RWstoredValue; 値は通常、オブジェクトが格納されているファイル内の場所へのオフセットを表わします。キーを指定すると、オブジェクトが格納されている位置を見つけ、それを取り出すことができます。ただし、RWBTreeOnDisk クラスに関するかぎり、この値は特別な意味を持ちません。これを解釈するのはプログラマ次第です。 RWBTreeOnDisk クラスは、RWFileManager クラスを使って B ツリーノードの領域の割り当ておよび解放を管理します。B ツリーとデータが同じファイル内にある場合は、同じ RWFileManager を使って、オブジェクト自体の領域を管理できます。または、別の RWFileManager を使って別のファイルを管理し、B ツリーとデータを別々のファイルに格納することも可能です。 RWBTreeOnDisk クラスのメンバ関数は、メモリにおける RWBTreeDictionary クラスのメンバ関数と似ています。違う点は、キーが RWCollectable ではなく、char の配列であることです。メンバ関数には、キーと値のペアを追加する、ペアを削除する、キーに関連付けられている値を置き換える、キーに関連付けられている情報を照会する、キーと値の全ペアで順序正しく操作する、ツリーに項目数を返す、キーがツリーに含まれているかどうかを決定する、などの関数があります。]]></description>
			<content:encoded><![CDATA[<p><span id="more-1358"></span></p>
<ul>
<li><a href="/cpptechdoc/reference/tools-9-1/">9.1 生成</a></li>
<li><a href="/cpptechdoc/reference/tools-9-2/">9.2 例</a></li>
</ul>
<p><code>RWBTreeOnDisk</code> クラスは、ディスク上のファイルで B ツリーを管理するために設計されています。このクラスは、キーと値の関連付けを順序よく並べたコレクションを表わします。その順序はキーを比較することによって内部的に決定されます。キーを指定すると、値を取り出すことができます。キーの重複は許可されません。</p>
<p>キーは char の配列で、キーの長さはコンストラクタによって設定されます。B ツリー内の順序は、キーを外部関数 (変更可能) と比較することによって決定されます。</p>
<p>値の型は次のとおりです。</p>
<pre>
typedef long RWstoredValue;
</pre>
<p>
値は通常、オブジェクトが格納されているファイル内の場所へのオフセットを表わします。キーを指定すると、オブジェクトが格納されている位置を見つけ、それを取り出すことができます。ただし、<code>RWBTreeOnDisk</code> クラスに関するかぎり、この値は特別な意味を持ちません。これを解釈するのはプログラマ次第です。</p>
<p><code>RWBTreeOnDisk</code> クラスは、<code>RWFileManager</code> クラスを使って B ツリーノードの領域の割り当ておよび解放を管理します。B ツリーとデータが同じファイル内にある場合は、同じ <code>RWFileManager</code> を使って、オブジェクト自体の領域を管理できます。または、別の <code>RWFileManager</code> を使って別のファイルを管理し、B ツリーとデータを別々のファイルに格納することも可能です。</p>
<p><code>RWBTreeOnDisk</code> クラスのメンバ関数は、メモリにおける <code>RWBTreeDictionary</code> クラスのメンバ関数と似ています。違う点は、キーが <code>RWCollectable</code> ではなく、char の配列であることです。メンバ関数には、キーと値のペアを追加する、ペアを削除する、キーに関連付けられている値を置き換える、キーに関連付けられている情報を照会する、キーと値の全ペアで順序正しく操作する、ツリーに項目数を返す、キーがツリーに含まれているかどうかを決定する、などの関数があります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.s34.co.jp/cpptechdoc/reference/tools-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4 章: クラス RWDate の使い方</title>
		<link>http://www.s34.co.jp/cpptechdoc/reference/tools-4/</link>
		<comments>http://www.s34.co.jp/cpptechdoc/reference/tools-4/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 08:50:39 +0000</pubDate>
		<dc:creator>cpptechdoc</dc:creator>
				<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.s34.co.jp/?p=1329</guid>
		<description><![CDATA[4.1 例 4.2 コンストラクタ クラス RWDate はユリウス日の数値として格納された日付を表わします。ユリウス日による表現は便利なため、ソフトウェアでは一般的に用いられています。これにより迅速な暦の計算ができ、うるう年などの詳細にわずらわされることなく、一般の日付形式間との変換を簡単に行えます。 ユリウス日の数値は、Tools.h++ で簡単に求めることができます。一般の日付をユリウス日番号に変換するために Tools.h++ が使用するアルゴリズムは、ACM の 『Communications』 Volume6、No. 8、1963 年 8 月付けの 444 ページにある「Algorithm 199」に掲載されています。 グレゴリ暦は現在ほとんど世界中で使用されており、これはローマ法王グレゴリ 13 世によって 1582 年に導入され、その後各国に広まりました。グレゴリ暦は、1752 年 9 月 14 日に英国で受け入れられ、その後アメリカにやってきました。グレゴリ暦の由来を説明したのには理由があります。グレゴリ暦の導入以前の日付に対する RWDate は、グレゴリ方式から推定して求めることしかできないのです。そのような日付に対して、RWDate の出力、またはそのメソッドを使って日や月を処理することは、予期しない結果を招くことがあります。]]></description>
			<content:encoded><![CDATA[<p><span id="more-1329"></span></p>
<ul>
<li><a href="/cpptechdoc/reference/tools-4-1/">4.1 例</a></li>
<li><a href="/cpptechdoc/reference/tools-4-2/">4.2 コンストラクタ</a></li>
</ul>
<p>クラス <code>RWDate</code> はユリウス日の数値として格納された日付を表わします。ユリウス日による表現は便利なため、ソフトウェアでは一般的に用いられています。これにより迅速な暦の計算ができ、うるう年などの詳細にわずらわされることなく、一般の日付形式間との変換を簡単に行えます。</p>
<p>ユリウス日の数値は、<em>Tools.h++</em> で簡単に求めることができます。一般の日付をユリウス日番号に変換するために <em>Tools.h++</em> が使用するアルゴリズムは、ACM の 『<cite>Communications</cite>』 Volume6、No. 8、1963 年 8 月付けの 444 ページにある「Algorithm 199」に掲載されています。</p>
<p>グレゴリ暦は現在ほとんど世界中で使用されており、これはローマ法王グレゴリ 13 世によって 1582 年に導入され、その後各国に広まりました。グレゴリ暦は、1752 年 9 月 14 日に英国で受け入れられ、その後アメリカにやってきました。グレゴリ暦の由来を説明したのには理由があります。グレゴリ暦の導入以前の日付に対する <code>RWDate</code> は、グレゴリ方式から推定して求めることしかできないのです。そのような日付に対して、<code>RWDate</code> の出力、またはそのメソッドを使って日や月を処理することは、予期しない結果を招くことがあります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.s34.co.jp/cpptechdoc/reference/tools-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6章: 仮想ストリームの使い方</title>
		<link>http://www.s34.co.jp/cpptechdoc/reference/tools-6/</link>
		<comments>http://www.s34.co.jp/cpptechdoc/reference/tools-6/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 08:50:39 +0000</pubDate>
		<dc:creator>cpptechdoc</dc:creator>
				<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.s34.co.jp/?p=1339</guid>
		<description><![CDATA[6.1 特殊仮想ストリーム 6.2 単純な例 6.3 Windows クリップボードと DDE Streambuf 6.4 DDE の例 6.5 RWAuditStreamBuffer 6.6 まとめ 各 C++ コンパイラに付属の iostream 機能は、C++ の開発者に広く理解されている機能です。その利点には、ストリームへの挿入および抽出における型保証、新しい型への拡張性、およびストリームバイトのソースおよび宛先のユーザへの透過性があげられます。これらは、streambuf クラスによって設定されます。 ただし、iostream 機構には、数多くの制限があり、フォーマット機能が特に問題になります。例えば、ostream に倍精度のデータを挿入する場合、それをバイナリとして挿入するような型保証はありません。さらに、すべてのバイトソースと宛先が streambuf のモデルに適合するわけではありません。XDR など多くのプロトコルの場合、形式は本質的にバイトストリームに結び付けられていて、切り離すことができません。 Rogue Wave の仮想ストリーム機能は、ストリームの理想的なモデルを提供することによって、これらの制限を克服しており、形式やストリームモデムによって制約を受けることがありません。Rwvios クラスは仮想ストリームクラス階層のルートにあります。これは、標準ライブラリクラス ios と同様のインタフェースを持つ抽象基底クラスです。 class RWvios{ public: virtual int eof() = 0; virtual int fail() = 0; virtual int bad() = 0; virtual int [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-1339"></span></p>
<ul>
<li><a href="/cpptechdoc/reference/tools-6-1/">6.1 特殊仮想ストリーム</a></li>
<li><a href="/cpptechdoc/reference/tools-6-2/">6.2 単純な例</a></li>
<li><a href="/cpptechdoc/reference/tools-6-3/">6.3 Windows クリップボードと DDE Streambuf</a></li>
<li><a href="/cpptechdoc/reference/tools-6-4/">6.4 DDE の例</a></li>
<li><a href="/cpptechdoc/reference/tools-6-5/">6.5 RWAuditStreamBuffer</a></li>
<li><a href="/cpptechdoc/reference/tools-6-6/">6.6 まとめ</a></li>
</ul>
<p>各 C++ コンパイラに付属の iostream 機能は、C++ の開発者に広く理解されている機能です。その利点には、ストリームへの挿入および抽出における型保証、新しい型への拡張性、およびストリームバイトのソースおよび宛先のユーザへの透過性があげられます。これらは、<code>streambuf</code> クラスによって設定されます。</p>
<p>ただし、iostream 機構には、数多くの制限があり、フォーマット機能が特に問題になります。例えば、<code>ostream</code> に倍精度のデータを挿入する場合、それをバイナリとして挿入するような型保証はありません。さらに、すべてのバイトソースと宛先が <code>streambuf</code> のモデルに適合するわけではありません。XDR など多くのプロトコルの場合、形式は本質的にバイトストリームに結び付けられていて、切り離すことができません。</p>
<p>Rogue Wave の仮想ストリーム機能は、ストリームの理想的なモデルを提供することによって、これらの制限を克服しており、形式やストリームモデムによって制約を受けることがありません。<code>Rwvios</code> クラスは仮想ストリームクラス階層のルートにあります。これは、標準ライブラリクラス <code>ios</code> と同様のインタフェースを持つ抽象基底クラスです。</p>
<pre>
 class RWvios{
public:
  virtual int   eof()             = 0;
  virtual int   fail()            = 0;
  virtual int   bad()             = 0;
  virtual int   good()            = 0;
  virtual int   rdstate()         = 0;
  virtual int   clear(int v = 0)  = 0;
};
</pre>
<p><code>RWvios</code> から派生したクラスは、これらの関数を定義します。</p>
<p>抽象基底クラス <code>RWvistream</code> と <code>RWvostream</code> は、<code>Rwvios</code> を継承しています。これらのクラスは、すべての基本的な組み込み型および組み込み型の配列に対して、operator&amp;#60;&amp;#60;()、put()、get() などの純粋仮想関数を宣言しています。</p>
<pre>
 class RWvistream : public RWvios {
public:
  virtual Rwvistream&amp;  operator&gt;&gt;(char&amp;)       = 0;
  virtual Rwvistream&amp;  operator&gt;&gt;(double&amp;)     = 0;
  virtual int          get()                   = 0;
  virtual Rwvistream&amp;  get(char&amp;)              = 0;
  virtual Rwvistream&amp;  get(double&amp;)            = 0;
  virtual Rwvistream&amp;  get(char*, size_t N)    = 0;
  virtual Rwvistream&amp;  get(double*, size_t N)  = 0;
  .
  .
  .
};

class RWvostream : public RWvios {
public:
  virtual Rwvostream&amp;  operator&amp;#60;&amp;#60;(char)             = 0;
  virtual Rwvostream&amp;  operator&amp;#60;&amp;#60;(double)           = 0;
  virtual Rwvostream&amp;  put(char)                    = 0;
  virtual Rwvostream&amp;  put(double)                  = 0;
  virtual Rwvostream&amp;  put(const char*, size_t N)   = 0;
  virtual Rwvostream&amp;  put(const double*, size_t N) = 0;
  .
  .
  .
};
</pre>
<p><code>RWvistream</code> と <code>RWvostream</code> を継承したストリームは、ユーザにわかりやすい形式で、組み込みを特殊ストリームに格納するものです。</p>
<p>
仮想ストリーム機能の基本的機能は、形式に関係なく仮想出力ストリームに組み込みを挿入したり、抽出したりすることにあります。つまり、空白類、コンマなどで出力をフォーマットする必要がないということです。つまり、「ここは倍精度です。都合のいい形式で保存して、戻して欲しいと言ったときにそれを正しい形式で取り出してください」と <code>Rwvostream</code> に効果的に指示しているわけです。</p>
<p>
このクラスは、非常に強力で、使用する最終出力媒体または形式を一切知らなくても、ストリーム演算子を書いたり使用することができます。例えば、出力媒体はディスク、メモリ領域、あるいはネットワークのどれでもかまいません。さらに、バイナリ、ASCII、またネットワークパケットなど、どの形式にも対応しています。これらいずれの場合も、同じストリーム演算子を使用します。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.s34.co.jp/cpptechdoc/reference/tools-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>付録 B: Typedef とマクロ</title>
		<link>http://www.s34.co.jp/cpptechdoc/reference/tools-b/</link>
		<comments>http://www.s34.co.jp/cpptechdoc/reference/tools-b/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 08:50:39 +0000</pubDate>
		<dc:creator>cpptechdoc</dc:creator>
				<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.s34.co.jp/?p=1612</guid>
		<description><![CDATA[定数 #define FALSE 0 // RWBoolean 値 (defs.h) #define TRUE 1 // RWBoolean 値 (defs.h) #define rwnil 0 // nil ポインタ (defs.h) #define RWTOOLS 0x700 // (実際の現在のバージョン番号) // number) (tooldefs.h) const RWoffset RWNIL = -1L; // RWFile にはオフセットがない // (defs.h) const size_t RW_NPOS = ~(size_t)0; // 配列へのインデックスが // 見つからない (defs.h) Typedef typedef unsigned short RWClassID; [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-1612"></span></p>
<h3>定数</h3>
<pre>
#define FALSE 0                         // RWBoolean 値 (<em>defs.h</em>)

#define TRUE 1                          // RWBoolean 値 (<em>defs.h</em>)

#define rwnil 0                         // nil ポインタ (<em>defs.h</em>)

#define RWTOOLS 0x700                   // (実際の現在のバージョン番号)
                                        // number) (<em>tooldefs.h</em>)

const RWoffset RWNIL = -1L;             // RWFile にはオフセットがない
                                        // (<em>defs.h</em>)

const size_t RW_NPOS = ~(size_t)0;      // 配列へのインデックスが
                                        // 見つからない (<em>defs.h</em>)
</pre>
<h3>Typedef</h3>
<pre>
typedef unsigned short RWClassID;       // (<em>defs.h</em>)      各クラスで一意

typedef int RWBoolean;                  // (<em>defs.h</em>)      TRUE または FALSE

typedef unsigned char RWByte;           // (<em>defs.h</em>)      ビットフラッグ アトム

typedef RWCollectable* RWCollectableP   // (<em>tooldefs.h</em>)  トークン化に必要

typedef unsigned short RWErrNo          // (<em>defs.h</em>)      エラー処理に使用

typedef long RWoffset;                  // (<em>tooldefs.h</em>)  ファイルオフセットに使用

typedef unsigned long RWspace;          // (<em>tooldefs.h</em>)  ファイルレコードに使用

typedef long RWstoredValue;             // (<em>tooldefs.h</em>)  ファイルオフセットに使用

typedef void* RWvoid;                   // (<em>tooldefs.h</em>)  void* の配列用
</pre>
<h3>関数へのポインタ</h3>
<pre>
typedef void                 (*RWapplyCollectable)    (RWCollectable*, void*);

typedef void                 (*RWapplyGeneric)        (void*, void*);

typedef void                 (*RWapplyKeyAndValue)    (RWCollectable*,
                                                      RWCollectable*, void*);

typedef void                 (*RWauditFunction)       (unsigned char, void*);

typedef void                 (*RWdiskTreeApply)       (const char*,
                                                      RWstoredValue, void*);

typedef int                  (*RWdiskTreeCompare)     (const char*, const char*,
                                                      size_t);

typedef RWBoolean            (*RWtestGeneric)         (const void*, const void*);

typedef RWBoolean            (*RWtestCollectable)     (const RWCollectable*,
                                                      const void*);

typedef RWBoolean            (*RWtestCollectablePair) (const RWCollectable*,
                                                      constRWCollectable*,void*);

typedef RWCollectable*       (*RWuserCreator)         ();
</pre>
<h3>Enumerations</h3>
<pre>
enum RWSeverity {RWWARNING, RWDEFAULT, RWFATAL}
</pre>
<p>
以下は、関連するクラスのメンバ関数やコンストラクタの動作を変更します。<strong>太字</strong>で示されている値は、デフォルト値です。</p>
<pre>
RWCString::enum stripType       {leading,<strong>trailing</strong>,both}        // 文字を剥ぎ取る場所

RWCString::enum caseCompare     {<strong>exact</strong>, ignoreCase}            // 比較中に大文字小文字
                                                                  // の区別をしない
RWCString::enum scopeType       {<strong>one</strong>, all}                     // 置換する部分文字列
                                                                  // の数

RWBTreeOnDisk::enum styleMode   {<strong>V6Style</strong>, V5Style}             // ファイル形式

RWBTreeOnDisk::enum createMode  {<strong>autoCreate</strong>, create}           //(再使用,新規作成)
                                                                  // ファイルの B-ツリー

RWeostream::enum Endian         { LittleEndian,                   // コンストラクタ
                                BigEndian, <strong>HostEndian</strong> }

                                                                  // 引数

RWLocale::enum CurrSymbol       { NONE, <strong>LOCAL</strong>, INTL }          // 「asString」メソッド
                                                                  // で使用

RWWString::enum stripType       {leading,<strong>trailing</strong>,both}        // 文字を剥ぎ取る場所

RWWString::enum caseCompare     {<strong>exact</strong>, ignoreCase}            // 比較中に大文字小文字
                                                                  // の区別をしない

RWWString::enum scopeType       {<strong>one</strong>, all}                     // 置換する部分文字列
                                                                  // の数
</pre>
<h3>Tools.h++ の公開マクロ</h3>
<p>これらのマクロは、<em>Tools.h++</em> API の一部としてユーザが使用できるように、定義されています。</p>
<h4>collect.h ファイル</h4>
<pre>
// マクロの本体は記載されていない。『<cite>Tools.h++ Class Reference</cite>』のRwcollectable
// およびこのマニュアルを参照。
#define RWDECLARE_ABSTRACT_COLLECTABLE(className)
#define RWDEFINE_ABSTRACT_COLLECTABLE(className)
#define RWDECLARE_COLLECTABLE(className)
#define RWDEFINE_COLLECTABLE(className,id)
#define RWDEFINE_NAMED_COLLECTABLE(className,str)
</pre>
<h4>defs.h ファイル</h4>
<pre>
// RWDEBUG が定義されるときに以下のように定義する。それ以外の場合は、何も定義しない。
#define RWPOSTCONDITION(a)    assert( (a) != 0 )
#define RWPRECONDITION2(a,b)  assert( (a) != 0 )
#define RWPOSTCONDITION2(a,b) assert( (a) != 0 )
#define RWPRECONDITION2(a,b)  assert((b, (a) !=0))
#define RWPOSTCONDITION2(a,b) assert((b, (a) !=0))
#define RWASSERT(a)           assert( (a) != 0 )
</pre>
<h4>edefs.h ファイル</h4>
<pre>
// マクロの本体は記載されていない。第 14 章「永続性」を参照。
#define RWDECLARE_PERSISTABLE_IO(CLASS,ISTR,OSTR)
#define RWDECLARE_PERSISTABLE_TEMPLATE_IO(TEMPLATE, ISTR, OSTR)
#define RWDECLARE_PERSISTABLE_TEMPLATE_IO_2(TEMPLATE, ISTR, OSTR)
#define RWDECLARE_PERSISTABLE_TEMPLATE_IO_3(TEMPLATE, ISTR, OSTR)
#define RWDECLARE_PERSISTABLE_TEMPLATE_IO_4(TEMPLATE, ISTR, OSTR)
#define RWDECLARE_PERSISTABLE(CLASS)
#define RWDECLARE_PERSISTABLE_TEMPLATE(TEMPLATE)
#define RWDECLARE_PERSISTABLE_TEMPLATE_2(TEMPLATE)
#define RWDECLARE_PERSISTABLE_TEMPLATE_3(TEMPLATE)
#define RWDECLARE_PERSISTABLE_TEMPLATE_4(TEMPLATE)
</pre>
<h4>epersist.h ファイル</h4>
<pre>
// マクロの本体は記載されていない。第 14 章「永続性」を参照。
#define RWDEFINE_PERSISTABLE_IO(CLASS,ISTR,OSTR)
#define RWDEFINE_PERSISTABLE_TEMPLATE_IO(TEMPLATE,ISTR,OSTR)
#define RWDEFINE_PERSISTABLE_TEMPLATE_IO_2(TEMPLATE,ISTR,OSTR
#define RWDEFINE_PERSISTABLE_TEMPLATE_IO_3(TEMPLATE,ISTR,OSTR)
#define RWDEFINE_PERSISTABLE_TEMPLATE_IO_4(TEMPLATE,ISTR,OSTR)
#define RWDEFINE_PERSISTABLE(CLASS)
#define RWDEFINE_PERSISTABLE_TEMPLATE(TEMPLATE)
#define RWDEFINE_PERSISTABLE_TEMPLATE_2(TEMPLATE)
#define RWDEFINE_PERSISTABLE_TEMPLATE_3(TEMPLATE)
#define RWDEFINE_PERSISTABLE_TEMPLATE_4(TEMPLATE)
</pre>
<h4>strmshft.h ファイル</h4>
<pre>
// 便利なマクロ
#define RW_PROVIDE_DVSTREAM_INSERTER(DerivedOstream,vstreamable)
#define RW_PROVIDE_DVSTREAM_EXTRACTOR(DerivedIstream,vstreamable)
</pre>
<h4>tphasht.h、tvhasht.h、tphdict.h、tvhdict.h、tphmmap.h、tvhmmap.h、tphset.h、tvhset.h<br />
の各ファイル</h4>
<pre>
// 現在のコンパイラと ANSI 準拠のコンパイラ間で移植可能なコードを
// 書く場合に便利。
// テンプレートを参照
#define RWDefHArgs(T) ,RWTHasher&lt;T&gt;,equal_to&lt;T&gt;
</pre>
<h4>In files tpsrtvec.h, tvsrtvec.h</h4>
<pre>
// 現在のコンパイラと ANSI 準拠のコンパイラ間で移植可能なコードを
// 書く場合に便利。
// テンプレートを参照
#define RWDefCArgs(T) ,less&lt;T&gt;
</pre>
<h3>Smalltalk 標準インタフェース</h3>
<h4>(RW_STD_TYPEDEFS を定義することでアクティブになる)</h4>
<pre>
typedef     RWBag                         Bag;
typedef     RWBagIterator                 BagIterator;
typedef     RWBinaryTree                  SortedCollection;
typedef     RWBinaryTreeIterator          SortedCollectionIterator;
typedef     RWBitVec                      BitVec
typedef     RWCollectable                 Object;    // All-too-common type!
typedef     RWCollectableDate             Date;
typedef     RWCollectableInt              Integer;
typedef     RWCollectableString           String;
typedef     RWCollectableTime             Time;
typedef     RWCollection                  Collection;
typedef     RWHashDictionary              Dictionary;
typedef     RWHashDictionaryIterator      DictionaryIterator;
typedef     RWIdentityDictionary          IdentityDictionary;
typedef     RWIdentitySet                 IdentitySet;
typedef     RWOrdered                     OrderedCollection;
typedef     RWOrderedIterator             OrderedCollectionIterator;
typedef     RWSequenceable                SequenceableCollection;
typedef     RWSet                         Set;
typedef     RWSetIterator                 SetIterator;
typedef     RWSlistCollectables           LinkedList;
typedef     RWSlistCollectablesIterator   LinkedListIterator;
typedef     RWSlistCollectablesQueue      Queue;
typedef     RWSlistCollectablesStack      Stack;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.s34.co.jp/cpptechdoc/reference/tools-b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A.1 Tools.h++ コレクションクラスの選択</title>
		<link>http://www.s34.co.jp/cpptechdoc/reference/tools-a-1/</link>
		<comments>http://www.s34.co.jp/cpptechdoc/reference/tools-a-1/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 08:50:39 +0000</pubDate>
		<dc:creator>cpptechdoc</dc:creator>
				<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.s34.co.jp/?p=1733</guid>
		<description><![CDATA[選択チャートには、コレクションに格納するデータについての質問が含まれています。選択チャートにざっと目を通すことにより、作成するプログラムとそのデータにどの Tools.h++ コレクションが最適であるかが分かります。 A.1.1 選択チャートの使い方 選択チャートを見やすくするために、各選択肢の質問は簡潔になっています。次に、選択肢の質問について解説します。 コレクション内のデータの順序には意味がありますか? コレクションの中には、コレクション内のデータの位置を制御できるものがあります。例えば、配列やベクトル、およびリンクリストはデータを「順序付きで」提示します。特定の順序で、または数値インデックスに基づいてデータにアクセスする必要がある場合、順序には意味があります。 重複項目を許可しますか? コレクションの中には、コレクション内にすでに存在している項目と等しい項目を挿入できないものがあります (通常、この種のコレクションはセットと呼ばれます)。別の種類のコレクションには、複数の同一項目を保持する様々な方法があり、重複項目の挿入を許可します。Tools.h++ コレクションには、重複を調べる機構と重複項目を保持する機構の両方が備えられています。 順序付けは本質的なものですか、それとも外部的なものですか? コレクション内のデータがそれを挿入する方法によって制御される場合は、「順序が外部的に決定される」と言います。例えば、ベクトルやリンクリストは、外部的に順序付けられています。データがコレクションによって使用されるアルゴリズムによって決定された位置に格納される場合は、順序付けは「本質的」です。例えば、格納されたベクトルやバランスツリーは本質的な順序を持ちます。 外部キーによってデータにアクセスしますか? 値とは異なるキーを基準にして値にアクセスする場合、「外部キーによってデータにアクセスする」と言います。例えば、「電話番号リスト」は、電話番号というデータを、名前の形式をとったキーに関連付けます。逆に、「委員会メンバのリスト」は、名前の形をとったデータだけになります。情報を取得するためには、キーを必要としません。 数値インデックスでデータにアクセスしますか? 配列またはベクトルに格納されているオブジェクトには、数値インデックスでアクセスします。例えば、数値インデックス「12」を用いてオブジェクトを見つけ、12 という位置にあるオブジェクトにアクセスします。 自身との比較によってデータにアクセスしますか? 明示的なインデックスやキーのいずれとも一緒に格納されていないデータは、検索データとコレクション内のデータの一致を探すことによって見つけることができます。前述した委員会メンバのリストは、この種類のデータの例です。Set や Bag は自身との比較によってアクセスするコレクションの例です。 自身との比較によってデータにアクセスする場合は、どの種類の一致基準を使用するかを知る必要があります。一致には、あるオブジェクトを別のオブジェクトと直接比較する「等値性」を基準にすることも、オブジェクトのアドレスを比較し、オブジェクトが同一であるかどうかを調べる「アイデンティティ」を基準にすることもできます。 最適のアクセス方式は、リンクノードによるものですか? リンクノードを利用するコレクションは、通常リストと呼ばれます。リストでは、コレクションの両端にあるデータに素早くアクセスでき、コレクションの真ん中にデータを効率よく挿入することができます。ただし、コレクションの真ん中にあるデータに頻繁にアクセスする必要がある場合、リストは他のコレクションに比べてそれほど効率的ではありません。 頻繁にアクセスするデータがコレクションの両端にありますか? 処理しなければならないデータの量が分からない場合は頻繁にありますが、処理するほとんどのデータは、コレクションの最も新しいデータか、最も古いデータです。最後に追加されたデータを処理するのに最も効率的なのは、「後入れ先出し」方式を持つコレクションです。後入れ先出し (LIFO) のコンテナは「スタック」です。先入れ先出し (FIFO) 方式でデータを処理するコレクションは、「待ち行列」と呼ばれます。最新データと最古データの両方に効率的にアクセスできるコレクションは、「両頭列」あるいは Deque (Double Ended Queue) と呼ばれます。 リンクリストの場合－データにリストの一方からだけ、または両方からアクセスする必要がありますか? 一重リンクリストはサイズが小さいのですが、リストの「正面」からだけアクセスできます。二重リンクリストは、より柔軟性のあるアクセス方式を持ちますが、格納されている各オブジェクトごとに追加のポインタを必要とします。 数値インデックスでアクセスするコレクションの場合－コレクションを自動的にサイズ変更する必要がありますか? コレクションに格納する項目の最大数があらかじめ分かっている場合は、固定サイズのコレクションを選択する方がより効率的に挿入と削除を行うことができます。反対に、ほとんど無制限に拡張する必要がある場合は、現在格納しているデータ量に合わせて自動的にサイズを調整するコレクションを選択するべきです。 A.1.2 その他の選択基準 どのコレクションを選択するかは、これまでの経験や直観を含め、数多くの要素に依存します。選択チャートの質問の他に、どのコレクションを選択するかを決める上で次の質問も考慮してください。 複数コレクションで単一オブジェクトを保持する必要がありますか? 「はい」の場合は、ポインタベースのコレクションを使用します。 コピーするのに時間のかかるオブジェクトを収集しますか? 「はい」の場合は、ポインタベースのコレクションを使用します。 ポインタベースのコレクションを使用しなければならない理由がありますか? 「いいえ」の場合は、値ベースのコレクションを使用します。 コレクション内のオブジェクトの順序を外部的に制御しますか? 「はい」の場合は、ベクトルやリストなどのシーケンスコレクションを使用します。 挿入後、コレクション内の項目が変更可能である必要がありますか? 「はい」の場合は、シーケンスコレクションまたはマッピング [...]]]></description>
			<content:encoded><![CDATA[<p>選択チャートには、コレクションに格納するデータについての質問が含まれています。選択チャートにざっと目を通すことにより、作成するプログラムとそのデータにどの <em>Tools.h++</em> コレクションが最適であるかが分かります。</p>
<h3 id="toca11">A.1.1 選択チャートの使い方</h3>
<p>選択チャートを見やすくするために、各選択肢の質問は簡潔になっています。次に、選択肢の質問について解説します。</p>
<h4>コレクション内のデータの順序には意味がありますか?</h4>
<p>コレクションの中には、コレクション内のデータの位置を制御できるものがあります。例えば、配列やベクトル、およびリンクリストはデータを「順序付きで」提示します。特定の順序で、または数値インデックスに基づいてデータにアクセスする必要がある場合、順序には意味があります。</p>
<h4>重複項目を許可しますか?</h4>
<p>コレクションの中には、コレクション内にすでに存在している項目と等しい項目を挿入できないものがあります (通常、この種のコレクションはセットと呼ばれます)。別の種類のコレクションには、複数の同一項目を保持する様々な方法があり、重複項目の挿入を許可します。<em>Tools.h++</em> コレクションには、重複を調べる機構と重複項目を保持する機構の両方が備えられています。</p>
<h4>順序付けは本質的なものですか、それとも外部的なものですか?</h4>
<p>コレクション内のデータがそれを挿入する方法によって制御される場合は、「順序が外部的に決定される」と言います。例えば、ベクトルやリンクリストは、外部的に順序付けられています。データがコレクションによって使用されるアルゴリズムによって決定された位置に格納される場合は、順序付けは「本質的」です。例えば、格納されたベクトルやバランスツリーは本質的な順序を持ちます。</p>
<h4>外部キーによってデータにアクセスしますか?</h4>
<p>値とは異なるキーを基準にして値にアクセスする場合、「外部キーによってデータにアクセスする」と言います。例えば、「電話番号リスト」は、電話番号というデータを、名前の形式をとったキーに関連付けます。逆に、「委員会メンバのリスト」は、名前の形をとったデータだけになります。情報を取得するためには、キーを必要としません。</p>
<h4>数値インデックスでデータにアクセスしますか?</h4>
<p>配列またはベクトルに格納されているオブジェクトには、数値インデックスでアクセスします。例えば、数値インデックス「12」を用いてオブジェクトを見つけ、12<br />
という位置にあるオブジェクトにアクセスします。</p>
<h4>自身との比較によってデータにアクセスしますか?</h4>
<p>明示的なインデックスやキーのいずれとも一緒に格納されていないデータは、検索データとコレクション内のデータの一致を探すことによって見つけることができます。前述した委員会メンバのリストは、この種類のデータの例です。Set や Bag は自身との比較によってアクセスするコレクションの例です。</p>
<p>自身との比較によってデータにアクセスする場合は、どの種類の一致基準を使用するかを知る必要があります。一致には、あるオブジェクトを別のオブジェクトと直接比較する「等値性」を基準にすることも、オブジェクトのアドレスを比較し、オブジェクトが同一であるかどうかを調べる「アイデンティティ」を基準にすることもできます。</p>
<h4>最適のアクセス方式は、リンクノードによるものですか?</h4>
<p>リンクノードを利用するコレクションは、通常リストと呼ばれます。リストでは、コレクションの両端にあるデータに素早くアクセスでき、コレクションの真ん中にデータを効率よく挿入することができます。ただし、コレクションの真ん中にあるデータに頻繁にアクセスする必要がある場合、リストは他のコレクションに比べてそれほど効率的ではありません。</p>
<h4>頻繁にアクセスするデータがコレクションの両端にありますか?</h4>
<p>処理しなければならないデータの量が分からない場合は頻繁にありますが、処理するほとんどのデータは、コレクションの最も新しいデータか、最も古いデータです。最後に追加されたデータを処理するのに最も効率的なのは、「後入れ先出し」方式を持つコレクションです。後入れ先出し (LIFO) のコンテナは「スタック」です。先入れ先出し (FIFO) 方式でデータを処理するコレクションは、「待ち行列」と呼ばれます。最新データと最古データの両方に効率的にアクセスできるコレクションは、「両頭列」あるいは <em>Deque</em> (Double Ended Queue) と呼ばれます。</p>
<h4>リンクリストの場合－データにリストの一方からだけ、または両方からアクセスする必要がありますか?</h4>
<p>一重リンクリストはサイズが小さいのですが、リストの「正面」からだけアクセスできます。二重リンクリストは、より柔軟性のあるアクセス方式を持ちますが、格納されている各オブジェクトごとに追加のポインタを必要とします。</p>
<h4>数値インデックスでアクセスするコレクションの場合－コレクションを自動的にサイズ変更する必要がありますか?</h4>
<p>コレクションに格納する項目の最大数があらかじめ分かっている場合は、固定サイズのコレクションを選択する方がより効率的に挿入と削除を行うことができます。反対に、ほとんど無制限に拡張する必要がある場合は、現在格納しているデータ量に合わせて自動的にサイズを調整するコレクションを選択するべきです。</p>
<h3 id="toca12">A.1.2 その他の選択基準</h3>
<p>どのコレクションを選択するかは、これまでの経験や直観を含め、数多くの要素に依存します。選択チャートの質問の他に、どのコレクションを選択するかを決める上で次の質問も考慮してください。</p>
<h4>複数コレクションで単一オブジェクトを保持する必要がありますか?</h4>
<p>「はい」の場合は、ポインタベースのコレクションを使用します。</p>
<h4>コピーするのに時間のかかるオブジェクトを収集しますか?</h4>
<p>「はい」の場合は、ポインタベースのコレクションを使用します。</p>
<h4>ポインタベースのコレクションを使用しなければならない理由がありますか?</h4>
<p>「いいえ」の場合は、値ベースのコレクションを使用します。</p>
<h4>コレクション内のオブジェクトの順序を外部的に制御しますか?</h4>
<p>「はい」の場合は、ベクトルやリストなどのシーケンスコレクションを使用します。</p>
<h4>挿入後、コレクション内の項目が変更可能である必要がありますか?</h4>
<p>「はい」の場合は、シーケンスコレクションまたはマッピング (辞書) コレクションを使用します。マップと辞書は、不変のキーを持ちますが、値は変更可能です。</p>
<h4>コレクションがオブジェクトの比較を基準に独自の順序を保持するようにしますか?</h4>
<p>「はい」の場合は、セット、マップ、あるいはソート済みコレクションを使用します。</p>
<h4>数値インデックスによってコレクション内のオブジェクトにアクセスしますか?</h4>
<p>「はい」の場合は、シーケンスコレクションまたはソート済みコレクションを使用します。</p>
<h4>非数値キーによって値を検索する必要がありますか?</h4>
<p>「はい」の場合は、マップまたは辞書を使用します。</p>
<h4>比較するオブジェクトを指定して、コレクション内のオブジェクトにアクセスしますか?</h4>
<p>「はい」の場合は、セット、マップ、あるいはハッシュベースのコレクションを使用します。</p>
<h4>意味のある順序付けをなしで済まし、その代わりメモリをキーによる定時間のルックアップに使いますか?</h4>
<p>「はい」の場合は、ハッシュベースのコレクションを使用します。</p>
<h4>必要に応じて拡張または縮小するコレクションで高速のルックアップと挿入が必要ですか?</h4>
<p>「はい」の場合は、B-ツリー、あるいは新しい標準 C++ ライブラリを基にした連想コンテナを使用します。</p>
<h4>メモリにデータすべてを読み込まずに、アクセスする必要がありますか?</h4>
<p><strong>RWBTreeOnDisk</strong> または <strong>RWTValVirtualArray</strong> を使用します。</p>
<p>
<a href="http://www.s34.co.jp/wp-content/uploads/2009/12/Graphic1.gif"><img src="http://www.s34.co.jp/wp-content/uploads/2009/12/Graphic1.gif" alt="Graphic1" title="Graphic1" width="552" height="745" class="alignleft size-full wp-image-1743" /></a>
</p>
<p>
<a href="http://www.s34.co.jp/wp-content/uploads/2009/12/image21.gif"><img src="http://www.s34.co.jp/wp-content/uploads/2009/12/image21.gif" alt="image21" title="image21" width="531" height="571" class="alignleft size-full wp-image-1744" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.s34.co.jp/cpptechdoc/reference/tools-a-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2.1 具体クラス</title>
		<link>http://www.s34.co.jp/cpptechdoc/reference/tools-2-1/</link>
		<comments>http://www.s34.co.jp/cpptechdoc/reference/tools-2-1/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 08:50:39 +0000</pubDate>
		<dc:creator>cpptechdoc</dc:creator>
				<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.s34.co.jp/?p=1807</guid>
		<description><![CDATA[具体クラスは、以下のクラスから構成されています。: 第 3 章から第 5 章で説明されている、日付、時刻、文字列などを表わす単純クラス 第 11 章で説明されているテンプレートベースのコレクションクラス 第 12 章で説明されている、プリプロセッサ &#38;#60;generic.h&#62; を使う汎用コレクションクラス 2.1.1 単純クラス Tools.h++ には、軽量化された単純クラスが多く含まれています。軽量化されたクラスとは、時間のかからない初期設定子とコピーコンストラクタを持つクラスを意味します。単純クラスには、RWDate (日付)、 RWTime(時刻、各種の時間帯および地域に対応)、RWCString (シングルおよびマルチバイト文字列)、RWWString (ワイド文字)、および RWCRegexp または RWCRexpr (正規表現) などがあります。これらのクラスのほとんどは、4バイト以下で保持することができ、また非常に簡単なコピーコンストラクタ（通常1ビットコピー）を持ち、仮想関数は持っていません。Tools.h++ Class Referenceを参照してください。 2.1.2 テンプレートベースのコレクションクラス テンプレートベースのコレクションクラス (略してテンプレート) には、速度と型保証という利点があります。しかし、コードサイズを減らすためには、あまり使わないようにしてください。テンプレートは多くの異なる型で使用できますが、各型がまったく新しいクラスを生成するために、コードサイズが大きくなる可能性があります。使用コンパイラで標準 C++ ライブラリが使える場合は、標準 C++ ライブラリをもとにしている Tools.h++ テンプレートベースコレクションを使用できます。使用コンパイラで標準 C++ ライブラリを使えない場合でも、11.3.1節および 11.10 節に説明されている、サブセットのテンプレートを使用できます。 2.1.3 汎用コレクションクラス 汎用コレクションクラスは、C++ コンパイラに付属しているプリプロセッサマクロ&#38;#60;generic.h&#62; を使用するクラスです。このクラスは、テンプレートに対応していないコンパイラに対しては、型保証がされているために、テンプレートとほとんど同じように扱えます。このため、移植性が高いとも言えます。ただし、プリプロセッサにかなり依存しているため、この汎用コレクションクラスを含むコードで、デバッガを使用することが困難になる場合があります。さらに詳しくは、第 12 章を参照してください。]]></description>
			<content:encoded><![CDATA[<p>具体クラスは、以下のクラスから構成されています。:</p>
<ul>
<li>第 3 章から第 5 章で説明されている、日付、時刻、文字列などを表わす単純クラス</li>
<li>第 11 章で説明されているテンプレートベースのコレクションクラス</li>
<li>第 12 章で説明されている、プリプロセッサ &amp;#60;generic.h&gt; を使う汎用コレクションクラス</li>
</ul>
<h3 id="toc211">2.1.1 単純クラス</h3>
<p><em>Tools.h++</em> には、軽量化された単純クラスが多く含まれています。軽量化されたクラスとは、時間のかからない初期設定子とコピーコンストラクタを持つクラスを意味します。単純クラスには、<strong>RWDate</strong> (日付)、 <strong>RWTime</strong>(時刻、各種の時間帯および地域に対応)、<strong>RWCString</strong> (シングルおよびマルチバイト文字列)、<strong>RWWString</strong> (ワイド文字)、および <strong>RWCRegexp</strong> または <strong>RWCRexpr</strong> (正規表現) などがあります。これらのクラスのほとんどは、4バイト以下で保持することができ、また非常に簡単なコピーコンストラクタ（通常1ビットコピー）を持ち、仮想関数は持っていません。<em>Tools.h++ Class Reference</em>を参照してください。</p>
<h3 id="toc212">2.1.2 テンプレートベースのコレクションクラス</h3>
<p>テンプレートベースのコレクションクラス (略してテンプレート) には、速度と型保証という利点があります。しかし、コードサイズを減らすためには、あまり使わないようにしてください。テンプレートは多くの異なる型で使用できますが、各型がまったく新しいクラスを生成するために、コードサイズが大きくなる可能性があります。使用コンパイラで標準 C++ ライブラリが使える場合は、標準 C++ ライブラリをもとにしている <em>Tools.h++</em> テンプレートベースコレクションを使用できます。使用コンパイラで標準 C++ ライブラリを使えない場合でも、11.3.1節および 11.10 節に説明されている、サブセットのテンプレートを使用できます。</p>
<h3 id="toc213">2.1.3 汎用コレクションクラス</h3>
<p>汎用コレクションクラスは、C++ コンパイラに付属しているプリプロセッサマクロ&amp;#60;generic.h&gt; を使用するクラスです。このクラスは、テンプレートに対応していないコンパイラに対しては、型保証がされているために、テンプレートとほとんど同じように扱えます。このため、移植性が高いとも言えます。ただし、プリプロセッサにかなり依存しているため、この汎用コレクションクラスを含むコードで、デバッガを使用することが困難になる場合があります。さらに詳しくは、第 12 章を参照してください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.s34.co.jp/cpptechdoc/reference/tools-2-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2.2 抽象基底クラス</title>
		<link>http://www.s34.co.jp/cpptechdoc/reference/tools-2-2/</link>
		<comments>http://www.s34.co.jp/cpptechdoc/reference/tools-2-2/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 08:50:39 +0000</pubDate>
		<dc:creator>cpptechdoc</dc:creator>
				<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.s34.co.jp/?p=1810</guid>
		<description><![CDATA[Tools.h++ には、抽象基底クラスといろいろな機能のフレームワークを提供する特殊化クラスが含まれています。以下の表は、機能と抽象基底クラスの関係を示したものです。抽象基底クラスの場合は、Tools.h++ Class Referenceの各クラスごとの説明に明記されています。 表 1.抽象基底クラスと機能 機能 クラス 参照箇所 Locale RWLocale 16.4 節 時間帯 RWZone 16.4 節 仮想ストリーム RWvistream RWvostream 第 6 章 多形永続性 RWCollectable 第 14 章 仮想ページヒープ RWVirtualPageHeap 『Class Reference』 モデルビューコントローラ抽象化 RWModel RWModelClient 『Class Reference』]]></description>
			<content:encoded><![CDATA[<p><em>Tools.h++</em> には、抽象基底クラスといろいろな機能のフレームワークを提供する特殊化クラスが含まれています。以下の表は、機能と抽象基底クラスの関係を示したものです。抽象基底クラスの場合は、<em>Tools.h++ Class Reference</em>の各クラスごとの説明に明記されています。</p>
<h3>表 1.抽象基底クラスと機能</h3>
<dl>
<dt>機能</dt>
<dd>クラス</dd>
<dd>参照箇所</dd>
<dt>Locale</dt>
<dd>RWLocale</dd>
<dd>16.4 節</dd>
<dt>時間帯</dt>
<dd>RWZone</dd>
<dd>16.4 節</dd>
<dt>仮想ストリーム</dt>
<dd>RWvistream RWvostream</dd>
<dd>第 6 章</dd>
<dt>多形永続性</dt>
<dd>RWCollectable</dd>
<dd>第 14 章</dd>
<dt>仮想ページヒープ</dt>
<dd>RWVirtualPageHeap</dd>
<dd>『Class Reference』</dd>
<dt>モデルビューコントローラ抽象化</dt>
<dd>RWModel RWModelClient</dd>
<dd>『Class Reference』</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.s34.co.jp/cpptechdoc/reference/tools-2-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2.4 共通メンバ関数</title>
		<link>http://www.s34.co.jp/cpptechdoc/reference/tools-2-4/</link>
		<comments>http://www.s34.co.jp/cpptechdoc/reference/tools-2-4/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 08:50:39 +0000</pubDate>
		<dc:creator>cpptechdoc</dc:creator>
				<category><![CDATA[reference]]></category>

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

		<guid isPermaLink="false">http://www.s34.co.jp/?p=1821</guid>
		<description><![CDATA[オブジェクトがヒープ領域に割り当てられている場合、それを削除するのは誰の役割でしょうか? 他社のライブラリでは、誰がオブジェクトを所有しているかが問題になる場合があります。 ほとんどの Rogue Wave のクラスでは、非常に簡単な対策をとっており、ユーザがヒープ領域から何かを割り当てた場合は、それを解放するのは、そのユーザの責任になります。Rogue Wave ライブラリがヒープ領域から何かを割り当てた場合は、ライブラリが責任を持って解放します。 オブジェクトの作成に関しては、例外が 2 つあります。最初の例外は、演算子によるものです。 RWFile&#38; operator&#62;&#62;(RWFile&#38; file, RWCollectable*&#38;); Rwvistream&#38; operator&#62;&#62;(RWvistream&#38; vstream, RWCollectable*&#38;); これらの演算子は、それぞれ RWFile または RWvistream からの RWCollectable を継承しているオブジェクトを復元します。これらは、ヒープ領域から割り当てられたオブジェクトへのポインタを返します。これを解放するのは、ユーザの責任です。 2 番目の例外は、メンバ関数によるものです。 RWCollection* RWCollection::select(RWtestCollectable, void*)const; この関数は、ある選択基準を満たすメンバとともに、ヒープ領域から割り当てられたコレクションへのポインタを返します。終了したら、このコレクションを削除するのもユーザの責任です。 また、オブジェクトの削除に関する例外もあります。多くのコレクションクラスでは、メソッド clearAndDestroy() を使うことができます。これは、コレクションからすべてのポインタを取り除き、それぞれ解放します。ただし、clearAndDestroy() を使用する場合は、そのコレクションのポインタすべてを削除しても問題が起きないかどうかを判断するのは、ユーザの責任となります。 これらのメソッドについて詳しくは、Tools.h++ Class Referenceを参照してください。]]></description>
			<content:encoded><![CDATA[<p>オブジェクトがヒープ領域に割り当てられている場合、それを削除するのは誰の役割でしょうか? 他社のライブラリでは、誰がオブジェクトを所有しているかが問題になる場合があります。</p>
<p>ほとんどの Rogue Wave のクラスでは、非常に簡単な対策をとっており、ユーザがヒープ領域から何かを割り当てた場合は、それを解放するのは、そのユーザの責任になります。Rogue Wave ライブラリがヒープ領域から何かを割り当てた場合は、ライブラリが責任を持って解放します。</p>
<p>オブジェクトの作成に関しては、例外が 2 つあります。最初の例外は、演算子によるものです。</p>
<pre>
RWFile&amp;      operator&gt;&gt;(RWFile&amp; file, RWCollectable*&amp;);
Rwvistream&amp;  operator&gt;&gt;(RWvistream&amp; vstream, RWCollectable*&amp;);
</pre>
<p>これらの演算子は、それぞれ <strong>RWFile</strong> または <strong>RWvistream</strong> からの <strong>RWCollectable</strong> を継承しているオブジェクトを復元します。これらは、ヒープ領域から割り当てられたオブジェクトへのポインタを返します。これを解放するのは、ユーザの責任です。</p>
<p>2 番目の例外は、メンバ関数によるものです。</p>
<pre>
RWCollection* RWCollection::select(RWtestCollectable, void*)const;
</pre>
<p>
この関数は、ある選択基準を満たすメンバとともに、ヒープ領域から割り当てられたコレクションへのポインタを返します。終了したら、このコレクションを削除するのもユーザの責任です。</p>
<p>また、オブジェクトの削除に関する例外もあります。多くのコレクションクラスでは、メソッド clearAndDestroy() を使うことができます。これは、コレクションからすべてのポインタを取り除き、それぞれ解放します。ただし、clearAndDestroy() を使用する場合は、そのコレクションのポインタすべてを削除しても問題が起きないかどうかを判断するのは、ユーザの責任となります。</p>
<p>これらのメソッドについて詳しくは、<cite>Tools.h++ Class Reference</cite>を参照してください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.s34.co.jp/cpptechdoc/reference/tools-2-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2.7 マルチスレッド保証</title>
		<link>http://www.s34.co.jp/cpptechdoc/reference/tools-2-7/</link>
		<comments>http://www.s34.co.jp/cpptechdoc/reference/tools-2-7/#comments</comments>
		<pubDate>Fri, 14 Apr 2006 08:50:39 +0000</pubDate>
		<dc:creator>cpptechdoc</dc:creator>
				<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.s34.co.jp/?p=1827</guid>
		<description><![CDATA[コンパイラのリリースノートにしたがって適切なオプションでコンパイルする場合、Tools.h++ はマルチスレッドに対応します。つまり、Tools.h++ のすべての関数はマルチスレッド環境でも、シングルスレッド環境と同じように動作します。もちろんこれは、プログラムがスレッド間で個々のオブジェクトを共有しない、またはスレッド間で共有されているオブジェクトを操作中にロックすることを前提としています。Tools.h++ は、十分な内部ロックを行って独自の内部統合性を保持し、適切なマルチスレッド対応のシステム呼び出しを使用します。]]></description>
			<content:encoded><![CDATA[<p>コンパイラのリリースノートにしたがって適切なオプションでコンパイルする場合、<em>Tools.h++</em> はマルチスレッドに対応します。つまり、<em>Tools.h++</em> のすべての関数はマルチスレッド環境でも、シングルスレッド環境と同じように動作します。もちろんこれは、プログラムがスレッド間で個々のオブジェクトを共有しない、またはスレッド間で共有されているオブジェクトを操作中にロックすることを前提としています。<em>Tools.h++</em> は、十分な内部ロックを行って独自の内部統合性を保持し、適切なマルチスレッド対応のシステム呼び出しを使用します。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.s34.co.jp/cpptechdoc/reference/tools-2-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

