メッセージキューイングアクセス機能 TP1/Message Queue - Access 使用の手引

[目次][用語][索引][前へ][次へ]

ImqStringクラス(C++)

このクラスは,ヌル文字で終了するストリングに文字ストリング記憶域と操作を提供します。パラメタがchar*を呼び出す状態では,多くの場合,char*の代わりにImqStringを使用できます。

インクルードファイル

このクラスを使用するときは,imqstr.hppファイルをインクルードしてください。

オブジェクト属性

● characters

ヌル文字の前にあるstorage内の文字です。

● length

characters内のバイト数です。storageがない場合,lengthは0です。初期値は0です。

● storage

任意のサイズの,バイトアレイです。charactersの終わりを検出できるように,charactersの後ろのstorageには,必ずヌル文字が含まれなければなりません。メソッドは,この状態が必ず保持されるようにしますが,アレイにバイトを直接設定するときには,必ず,変更の後ろにヌル文字があるように注意する必要があります。最初は,storageはありません。

コンストラクタ

● ImqString( );

デフォルトのコンストラクタです。

● ImqString( const ImqString & string);

コピーコンストラクタです。

● ImqString( const char c );

charactersはcから構成されます。

● ImqString( const char * text );

charactersはtextからコピーされます。

● ImqString( const void * buffer, const size_t length );

bufferからlength分のバイトをコピーし,それらをcharactersに割り当てます。コピーされたすべてのヌル文字は,ピリオド(.)に置き換えます。ヌル文字以外の印刷不能または表示不能文字はそのままになります。

メソッド

● static ImqBoolean copy( char * destination-buffer, const size_t length, const char* source-buffer, const char pad = 0 );

最大length分のバイトをsource-bufferからdestination-bufferへコピーします。

source-buffer内の文字数が不十分な場合,destination-buffer内の残りのスペースにpad文字が埋められます。source-bufferは0でもかまいません。lengthも0の場合は,destination-bufferはヌルでかまいません。正常に実行された場合はTRUEを返します。

● virtual ImqBoolean copyOut( ImqMessage & msg );

多重定義されたImqItemメソッドです。charactersをメッセージバッファへコピーし,既存の内容と置き換えます。msgformatをMQFMT_STRINGに設定します。

詳細については,親クラスのメソッドの説明を参照してください。

● virtual ImqBoolean pasteIn( ImqMessage & msg );

多重定義されたImqItemメソッドです。メッセージバッファから残りのデータを転送することによってcharactersを設定し,既存のcharactersを置き換えます。

正常に実行されるためには,次の指定をしなければなりません。

詳細については,親クラスのメソッドの説明を参照してください。

● char & operator [ ] ( const size_t offset ) const ;

storage内のオフセット(offset)にある文字を参照します。必ず関係のあるバイトが存在し,アドレス可能であるようにしてください。

● ImqString operator ( ) ( const size_t offset, const size_t length = 1 ) const ;

offsetから始まるcharactersからバイトをコピーすることによってサブストリングを返します。

lengthが0の場合は,charactersの残りが返されます。offsetとlengthを組み合わせてもcharacters内で参照されない場合には,空のImqStringが返されます。

● void operator = ( const ImqString & string );

インスタンスデータがstringからコピーされ,既存のインスタンスデータと置き換えられます。

● ImqString operator + ( const char c ) const ;

cをcharactersに付加した結果を返します。

● ImqString operator + ( const char * text ) const ;

textをcharactersに付加した結果を返します。位置を逆に指定できます。例えば,次のどちらの形式で指定してもかまいません。

 
strOne + "string two" ;
"string one" + strTwo;

● ImqString operator + ( const ImqString & string1 ) const ;

string1をcharactersに付加した結果を返します。

● ImqString operator + ( const double number ) const ;

テキストに変換後numberをcharactersに付加した結果を返します。

● ImqString operator + ( const long number ) const ;

テキストに変換後numberをcharactersに付加した結果を返します。

● void operator += ( const char c );

cはcharactersに付加されます。

● void operator += ( const char * text );

textをcharactersに付加します。

● void operator += ( const ImqString & string );

stringをcharactersに付加します。

● void operator += ( const double number );

テキストに変換後numberをcharactersに付加します。

● void operator += ( const long number );

テキストに変換後numberをcharactersに付加します。

● void operator char * ( ) const ;

storage内の最初のバイトのアドレスを返します。この値は0でもかまいません。

● ImqBoolean operator < ( const ImqString & string ) const ;

● ImqBoolean operator > ( const ImqString & string ) const ;

● ImqBoolean operator <= ( const ImqString & string ) const ;

● ImqBoolean operator >= ( const ImqString & string ) const ;

● ImqBoolean operator == ( const ImqString & string ) const ;

● ImqBoolean operator != ( const ImqString & string ) const ;

compareメソッドを使用して,charactersをstringの内容と比較します。TRUEまたはFALSEのどれかを返します。

● short compare( const ImqString & string ) const ;

charactersをstringの内容と比較します。結果は,両方のcharactersが等しい場合は0,前者の方が小さい場合は負,大きい場合は正です。比較には,大文字小文字の区別があります。

空のImqStringは,空でないImqStringより小さいと見なされます。

● ImqBoolean copyOut( char * buffer, const size_t length, const char pad = 0 );

最大length分のバイトをcharactersからbufferへコピーします。buffer内のcharactersの数が不十分な場合,buffer内の残りのスペースにpad文字が埋められます。lengthも0であれば,bufferは0でもかまいません。正常に実行された場合はTRUEを返します。

● size_t copyOut( long & number ) const ;

テキストから変換後,charactersからnumberを設定します。変換にかかわった文字数を返します。

これが0の場合,変換されていないので,numberは設定されません。変換文字シーケンスは,次の形式で始まっている必要があります。

ストリングテキストから整数への変換の形式は次のとおりです。

  <blank(s)>
  <+|->
  digit(s)

● size_t copyOut( ImqString & token, const char c = ' ' ) const ;

charactersにcと異なる一つまたは複数の文字が含まれている場合,tokenは,そのような文字の最初の連続するシーケンスとして識別されます。この場合,tokenはそのシーケンスに設定され,返された値は先行文字cの数とシーケンス中のバイトの数との合計です。それ以外の場合は,0が返され,tokenは設定されません。

● size_t cutOut( long & number );

copyメソッドの場合と同様にnumberを設定しますが,さらに,戻り値によって指示されたバイト数をcharactersから除去します。例えば,次に示すストリングは,cutOut( number )を3回使用することによって,三つの数値に分割できます。

ストリングテキストから整数を検索する例を次に示します。

 
strNumbers = "-1 0   +55 ";
 while ( strNumbers.cutOut( number ) );
 number becomes -1, then 0, then 55
 leaving strNumbers == " "

● size_t cutOut( ImqString & token, const char c = ' ' );

copyOutメソッドの場合と同様にtokenを設定し,charactersからstrToken分の文字を除去し,さらに,token分の文字の前にある任意の文字cも除去します。cが空白でない場合,token分の文字の直後に続く文字cも除去されます。除去された文字の数を返します。例えば,次のストリングは,cutOut( token )を3回使用することによって,三つのtokenに分割できます。

ストリングテキストからtokenを検索する例を次に示します。

 
 strText = " Program Version 1.1 ";
  while ( strText.cutOut( token ) );
 // token becomes "Program", then "Version",
 // then "1.1" leaving strText == " "
 

ストリング内のDOSパス名を解析する方法について,次の例で示します。

 
 strPath = "C:\\WINNT\\WINNT.BMP"
 strPath.cutOut( strDrive, ':' );
 strPath.stripLeading( ':' );
 while ( strPath.cutOut( strFile, '\\' ) );
 // strDrive becomes "C".
 // strFile becomes "WINNT", 
 // then "WINNT.BMP" leaving strPath empty.
 

● ImqBoolean find( const ImqString & string );

characters内のどこかにstringの完全一致がないか探索します。一致が見つからない場合は,FALSEを返します。一致が見つかった場合は,TRUEを返します。stringが空の場合は,TRUEを返します。

● ImqBoolean find( const ImqString & string, size_t & offset );

オフセットoffsetから先のcharacters内のどこかにstringの完全一致がないか探索します。

stringが空の場合は,offsetを更新しないでTRUEを返します。一致が見つからない場合はFALSEを返します。offsetの値が増やされている場合もあるので注意してください。一致が見つかった場合は,TRUEを返し,offsetをcharacters内のstringのオフセットに更新します。

● size_t length( ) const ;

lengthを返します。

● ImqBoolean pasteIn( const double number, const char * format = "%f" );

テキストへの変換後,numberがcharactersに付加されます。正常に実行された場合はTRUEを返します。

浮動小数点変換を形式設定するために,指定formatが使用されます。これを指定する場合は,printf,および浮動小数点数(例えば,"%.3f")とともに使用するのに適したものでなければなりません。

● ImqBoolean pasteIn( const long number );

テキストへの変換後,numberがcharactersに付加されます。正常に実行された場合はTRUEを返します。

● ImqBoolean pasteIn( const void * buffer, const size_t length );

bufferからcharactersへlength分のバイトを付加し,最後のヌル文字を追加します。コピーされたあらゆるヌル文字に対して置き換えられます。置き換えられる文字はピリオド(.)です。コピーされたその他の印刷不能または表示不能文字に特別な考慮はされません。正常に実行された場合はTRUEを返します。

● ImqBoolean set( const char * buffer, const size_t length );

固定長文字フィールドからのcharactersを設定します。これには,ヌル文字が含まれている場合もありますが,含まれていない場合もあります。必要に応じて固定長フィールドからの文字にヌル文字が付加されます。正常に実行された場合はTRUEを返します。

● size_t storage( ) const ;

storage内のバイト数を返します。

● ImqBoolean setStorage( const size_t length );

storageを(再度)割り振り,現在割り振られているバイトの数を返します。ヌル文字を含め,元のcharactersが収まるだけの余裕がある場合には,それらは保存されますが,追加の記憶域は初期化されません。

正常に実行された場合はTRUEを返します。

● size_t stripLeading( const char c = ' ' );

charactersから先行文字cを除去し,除去された数を返します。

● size_t stripTrailing( const char c = ' ' );

charactersから文字cを除去し,除去された数を返します。

● ImqString upperCase( ) const ;

charactersの大文字のコピーを返します。

メソッド(protected)

● ImqBoolean assign( const ImqString & string );

同等のoperator=メソッドに等しい非仮想のメソッドです。

正常に実行された場合はTRUEを返します。

その他の関連クラス

ImqItem

ImqMessage

注意
ほとんどのコンパイラはstrOne + "string two"を受け入れますが,Visual C++ではstrOne + (char *)"string two"が必要です。

理由コード

理由コードの詳細については,「付録A 理由コード」,またはマニュアル「TP1/Message Queue プログラム作成リファレンス」を参照してください。