OpenRTM-aist  1.2.1
公開メンバ関数 | 静的限定公開メンバ関数 | フレンド | 全メンバ一覧
coil::Properties クラス

プロパティセットを表現するクラス [詳解]

#include <Properties.h>

公開メンバ関数

 Properties (const char *key="", const char *value="")
 コンストラクタ(rootノードのみ作成) [詳解]
 
 Properties (std::map< std::string, std::string > &defaults)
 コンストラクタ(mapでデフォルト値を与える) [詳解]
 
 Properties (const char *defaults[], long num=LONG_MAX)
 コンストラクタ(char*[] でデフォルト値を与える) [詳解]
 
 Properties (const Properties &prop)
 コピーコンストラクタ [詳解]
 
Propertiesoperator= (const Properties &prop)
 代入演算子 [詳解]
 
virtual ~Properties (void)
 デストラクタ [詳解]
 
const char * getName (void) const
 Name の取得 [詳解]
 
const char * getValue (void) const
 値の取得 [詳解]
 
const char * getDefaultValue (void) const
 デフォルト値の取得 [詳解]
 
const std::vector< Properties * > & getLeaf (void) const
 子要素の取得 [詳解]
 
const PropertiesgetRoot (void) const
 ルート要素の取得 [詳解]
 
const std::string & getProperty (const std::string &key) const
 指定されたキーを持つプロパティを、プロパティリストから探す [詳解]
 
const std::string & getProperty (const std::string &key, const std::string &def) const
 指定されたキーを持つプロパティを、プロパティリストから探す [詳解]
 
const std::string & operator[] (const std::string &key) const
 指定されたキーを持つプロパティを、プロパティリストから探す [詳解]
 
std::string & operator[] (const std::string &key)
 指定されたキーを持つプロパティを、プロパティリストから探す [詳解]
 
const std::string & getDefault (const std::string &key) const
 指定されたキーに対してデフォルト値を取得する [詳解]
 
std::string setProperty (const std::string &key, const std::string &value)
 Properties に value を key について登録する [詳解]
 
std::string setDefault (const std::string &key, const std::string &value)
 デフォルト値を登録する [詳解]
 
void setDefaults (const char *defaults[], long num=LONG_MAX)
 Properties にデフォルト値をまとめて登録する [詳解]
 
void list (std::ostream &out)
 指定された出力ストリームに、プロパティリストを出力する [詳解]
 
void load (std::istream &inStream)
 入力ストリームからキーと要素が対になったプロパティリストを読み込む [詳解]
 
void save (std::ostream &out, const std::string &header)
 プロパティリストを指定されたストリームに保存する [詳解]
 
void store (std::ostream &out, const std::string &header)
 プロパティリストを出力ストリームへ保存する [詳解]
 
std::vector< std::string > propertyNames (void) const
 プロパティのキーのリストを vector で返す [詳解]
 
int size (void) const
 プロパティの数を取得する [詳解]
 
Properties *const findNode (const std::string &key) const
 ノードを取得する [詳解]
 
PropertiesgetNode (const std::string &key)
 ノードを取得する [詳解]
 
bool createNode (const std::string &key)
 新規ノードを生成する [詳解]
 
PropertiesremoveNode (const char *leaf_name)
 ノードを削除する [詳解]
 
PropertieshasKey (const char *key) const
 子ノードにkeyがあるかどうか [詳解]
 
void clear (void)
 子ノードを全て削除する [詳解]
 
Propertiesoperator<< (const Properties &prop)
 Propertyをマージする [詳解]
 

静的限定公開メンバ関数

static void splitKeyValue (const std::string &str, std::string &key, std::string &value)
 文字列をキーと値のペアに分割する [詳解]
 
static bool split (const std::string &str, const char delim, std::vector< std::string > &value)
 文字列を分割する [詳解]
 
static Properties_getNode (std::vector< std::string > &keys, std::vector< Properties * >::size_type index, const Properties *curr)
 プロパティを取得する [詳解]
 
static void _propertiyNames (std::vector< std::string > &names, std::string curr_name, const Properties *curr)
 プロパティの名称リストを取得する [詳解]
 
static void _store (std::ostream &out, std::string curr_name, Properties *curr)
 プロパティの名称リストを保存する [詳解]
 
static std::ostream & _dump (std::ostream &out, const Properties &curr, int index)
 プロパティの内容を保存する [詳解]
 
static std::string indent (int index)
 インデントを生成する [詳解]
 

フレンド

std::ostream & operator<< (std::ostream &lhs, const Properties &rhs)
 Propertyをストリームに出力する [詳解]
 

詳解

プロパティセットを表現するクラス

Properties クラスは、不変のプロパティセットを表す。 Properties をストリーム に保管したり、ストリームからロードしたりすることができる。 プロパティリストの各キー、およびそれに対応する値は文字列となっている。

プロパティリストには、その「デフォルト値」として別のプロパティリストを持つ ことができる。元のプロパティリストでプロパティキーが見つからないと、この 2番目のプロパティリストが検索される。

プロパティの取得には getProperty() 、プロパティのセットには setProperty() と いったメソッドを使用することが推奨される。

プロパティをストリームに保存するとき、またはストリームからロードするとき に、ISO 8859-1 文字エンコーディングが使用される。このエンコーディングに 直接表示できない文字は、扱うことができない。

このクラスは、Java の Properties クラス (java.util.Properties) とほぼ同様の メソッドを持つ。また、入出力されるファイルは Java の Properties クラスが 出力するものと互換性があるが、Unicode を含むものは扱うことができない。

から
0.4.0

構築子と解体子

coil::Properties::Properties ( const char *  key = "",
const char *  value = "" 
)

コンストラクタ(rootノードのみ作成)

key と value のみを与えて Property のルートノードを作成する。 値は全てデフォルト値として設定される。

引数
keyプロパティのキー(デフォルト値:"")
valueプロパティの値(デフォルト値:"")
coil::Properties::Properties ( std::map< std::string, std::string > &  defaults)

コンストラクタ(mapでデフォルト値を与える)

std::string の std::map をデフォルト値にもつ Properties を作成する。 値は全てデフォルト値として設定される。

引数
defaultsデフォルト値として指定されるmap
coil::Properties::Properties ( const char *  defaults[],
long  num = LONG_MAX 
)

コンストラクタ(char*[] でデフォルト値を与える)

指定されたデフォルト値を持つ空のプロパティリストを作成する。 値は全てデフォルト値として設定される。 デフォルト値は char* の配列により与えられ、key と value の対になって おり、リストの終端は配列の数を表す引数 num か、空文字の key で与えらられ なければならない。 以下に例を示す。

const char* defaults = {
    "key1", "value1",
    "key2", "value2",
    "key3", "value3",
    "key4", "value4",
    "key5", "value5",
    "" };
Properties p(defaults);
// もしくは
Properties p(defaults, 10);
引数
defaultsデフォルト値を指定する配列
numデフォルト値を設定する要素数(デフォルト値:LONG_MAX)
coil::Properties::Properties ( const Properties prop)

コピーコンストラクタ

引数に与えられた Properties のキー、値およびデフォルト値が 全てそのままコピーされる。

virtual coil::Properties::~Properties ( void  )
virtual

デストラクタ

関数詳解

static std::ostream& coil::Properties::_dump ( std::ostream &  out,
const Properties curr,
int  index 
)
staticprotected

プロパティの内容を保存する

プロパティに設定された内容を保存する。 保存時にはプロパティ階層の深さを表す数字が付加される。 値が設定されていないプロパティについては、デフォルト値が出力される。

引数
outプロパティ内容保存先の出力ストリーム
curr対象プロパティ
index現在のプロパティ階層

参照元 getRoot().

static Properties* coil::Properties::_getNode ( std::vector< std::string > &  keys,
std::vector< Properties * >::size_type  index,
const Properties curr 
)
staticprotected

プロパティを取得する

キーリストで指定されたプロパティを取得する。 キーリストでは、指定するキーのプロパティでの階層関係をリスト形式で表現 する。 指定したキーリストに該当するプロパティが存在しない場合はNULLを返す。

引数
keys取得対象プロパティのキーのリスト表現
indexキーリストの階層数
curr検索対象プロパティ
戻り値
検索対象プロパティ

参照元 getRoot().

static void coil::Properties::_propertiyNames ( std::vector< std::string > &  names,
std::string  curr_name,
const Properties curr 
)
staticprotected

プロパティの名称リストを取得する

プロパティの名称を'.'区切りで表現したリストを取得する。

引数
namesプロパティの名称リスト
curr_name現在のプロパティ名
curr対象プロパティ

参照元 getRoot().

static void coil::Properties::_store ( std::ostream &  out,
std::string  curr_name,
Properties curr 
)
staticprotected

プロパティの名称リストを保存する

プロパティの名称を'.'区切りで表現したリストを保存する。

引数
outプロパティの名称リスト保存先の出力ストリーム
curr_name現在のプロパティ名
curr対象プロパティ

参照元 getRoot().

void coil::Properties::clear ( void  )

子ノードを全て削除する

参照元 getRoot().

bool coil::Properties::createNode ( const std::string &  key)

新規ノードを生成する

指定したキーを持つ新規ノードを生成する。 既に同一キーを持つノードが登録済みの場合にはエラーを返す。

引数
key新規ノードのキー
戻り値
新規ノード生成結果 指定したキーを持つノードが既に存在する場合にはfalse

参照元 getRoot().

Properties* const coil::Properties::findNode ( const std::string &  key) const

ノードを取得する

指定したキーを持つノードを取得する。 存在しないキー、および空文字の場合 0 を返す。

引数
key取得対象ノードのキー
戻り値
対象ノード

参照元 RTC_exp::PeriodicExecutionContext::getProperty(), getRoot().

const std::string& coil::Properties::getDefault ( const std::string &  key) const

指定されたキーに対してデフォルト値を取得する

指定されたキーを持つプロパティのデフォルト値を返す。 指定されたキーを持つプロパティが存在しない場合には空文字を返す。

引数
keyプロパティキー
戻り値
指定されたキー値を持つプロパティのデフォルト値

参照元 getRoot().

const char* coil::Properties::getDefaultValue ( void  ) const
inline

デフォルト値の取得

プロパティのデフォルト値を取得する。

戻り値
プロパティデフォルト値
const std::vector<Properties*>& coil::Properties::getLeaf ( void  ) const
inline

子要素の取得

プロパティの子要素を取得する。

戻り値
子要素
const char* coil::Properties::getName ( void  ) const
inline

Name の取得

プロパティの名称を取得する。

戻り値
プロパティ名
Properties& coil::Properties::getNode ( const std::string &  key)

ノードを取得する

指定したキーを持つノードを取得する。 存在しないキー、および空文字の場合 0 を返す。

引数
key取得対象ノードのキー
戻り値
対象ノード

参照元 getRoot().

const std::string& coil::Properties::getProperty ( const std::string &  key) const

指定されたキーを持つプロパティを、プロパティリストから探す

指定されたキーを持つプロパティを、プロパティリストから探す。 そのキーがプロパティリストにないと、デフォルトのプロパティリスト、 さらにそのデフォルト値が繰り返し調べられる。 そのプロパティが見つからない場合は、null が返される。

引数
keyプロパティキー
戻り値
指定されたキー値を持つこのプロパティリストの値

参照元 getRoot(), RTC::ConnectorDataListenerT< DataType >::operator()(), RTC::ModuleManager::DllPred::operator()(), RTC::Manager::ModuleFactories::operator()().

const std::string& coil::Properties::getProperty ( const std::string &  key,
const std::string &  def 
) const

指定されたキーを持つプロパティを、プロパティリストから探す

指定されたキーを持つプロパティを、プロパティリストから探す。 そのキーがプロパティリストにない場合は、デフォルト値の引数が返される。

引数
keyプロパティキー
defデフォルト値
戻り値
指定されたキー値を持つこのプロパティリストの値
const Properties* coil::Properties::getRoot ( void  ) const
inline

ルート要素の取得

プロパティのルート要素を取得する。

戻り値
ルート要素

参照先 _dump(), _getNode(), _propertiyNames(), _store(), clear(), createNode(), findNode(), getDefault(), getNode(), getProperty(), hasKey(), indent(), list(), load(), operator<<(), operator[](), propertyNames(), removeNode(), save(), setDefault(), setDefaults(), setProperty(), size(), split(), splitKeyValue(), store() (計26項目).

const char* coil::Properties::getValue ( void  ) const
inline

値の取得

プロパティの値を取得する。

戻り値
プロパティ値
Properties* coil::Properties::hasKey ( const char *  key) const

子ノードにkeyがあるかどうか

指定したキーを持つ子ノードが存在するかどうか確認する。 存在する場合、子ノードを返す。

引数
key確認対象のキー
戻り値
子ノード

参照元 getRoot().

static std::string coil::Properties::indent ( int  index)
staticprotected

インデントを生成する

指定された数字に従って生成したインデントを返す。 返されるインデントは、指定数字×2つの空白。

引数
indexインデント数の指定
戻り値
生成されたインデント

参照元 getRoot().

void coil::Properties::list ( std::ostream &  out)

指定された出力ストリームに、プロパティリストを出力する

指定された出力ストリームに、プロパティリストを出力する。 このメソッドは主にデバッグに用いられる。

引数
out出力ストリーム

参照元 getRoot().

void coil::Properties::load ( std::istream &  inStream)

入力ストリームからキーと要素が対になったプロパティリストを読み込む

入力ストリームからキーと要素が対になったプロパティリストを読み込む。 ストリームは、ISO 8859-1 文字エンコーディングを使用しているとみなされる。 各プロパティは、入力ストリームに行単位で登録されているものとみなされ、 各行は行区切り文字 (\n、\r、または \r\n) で終わる。 入力ストリームから読み込んだ行は、入力ストリームでファイルの終わりに 達するまで処理される。

空白文字だけの行、または最初の非空白文字が ASCII 文字 # または ! である 行は無視される。つまり、# または ! はコメント行を示す。

空白行またはコメント行以外のすべての行は、テーブルに追加されるプロパティ を記述する。ただし、行の終わりが \ の場合は、次の行があれば継続行として 扱われる (下記を参照)。 キーは、最初の非空白文字から、最初の ASCII 文字 =、:、または空白文字の直前までの、行内のすべての文字から構成される。

キーの終わりを示す文字は、前に \ を付けることによりキーに含めることも できる。キーの後ろの空白はすべてスキップされる。 キーの後ろの最初の非空白文字が = または : である場合は、これらのキーは 無視され、そのあとの空白文字もすべてスキップされる。 行内のそれ以外の文字はすべて、関連した要素文字列の一部となる。 要素文字列内では、ASCII エスケープシーケンス \t、\n、\r、\\、\"、 \'、\ (円記号とスペース)、および \uxxxx は認識され、単独の文字に変換 される。 また、行の最後の文字が \ である場合は、次の行は現在の行の継続として 扱われる。その場合、\ と行区切り文字が破棄され、継続行の先頭に空白が あればそれもすべて破棄され、要素文字列の一部にはならない。

たとえば、次の 3 行はそれぞれキー Truth と関連した要素値 Beauty を表す。

Truth = Beauty
Truth:Beauty
Truth\t\t\t:Beauty

また、次の 3 行は 1 つのプロパティを表す。

fruits\t\t\t\tapple, banana, pear, \
cantaloupe, watermelon, \
kiwi, mango
キーは fruits で、次の要素に関連付けれられる。 "apple, banana, pear, cantaloupe, watermelon, kiwi, mango" 最終的な結果でコンマのあとに必ずスペースが表示されるように、 各 \ の前にスペースがある。行の終わりを示す \ と、継続行の先頭にある 空白は破棄され、他の文字に置換されない。 また、次の 3 番目の例では、キーが cheeses で、関連した要素が空の文字列 であることを表す。

cheeses
キーは、cheeses で、関連要素は空の文字列であることを指定している。

引数
inStream入力ストリーム

参照元 getRoot().

Properties& coil::Properties::operator<< ( const Properties prop)

Propertyをマージする

現在のプロパティに設定したプロパティをマージする。

引数
propマージするプロパティ
戻り値
プロパティマージ結果

参照元 getRoot().

Properties& coil::Properties::operator= ( const Properties prop)

代入演算子

左辺値の Properties のキー、値およびデフォルト値は全て削除され、 右辺値の Properties のキー、値およびデフォルト値が全てそのまま コピーされる。

const std::string& coil::Properties::operator[] ( const std::string &  key) const

指定されたキーを持つプロパティを、プロパティリストから探す

指定されたキーを持つプロパティを返す。 そのキーがプロパティリストになければデフォルト値を返す。 さらに見つからなければ、空文字を返す。

引数
keyプロパティキー
戻り値
指定されたキー値を持つこのプロパティリストの値

参照元 getRoot().

std::string& coil::Properties::operator[] ( const std::string &  key)

指定されたキーを持つプロパティを、プロパティリストから探す

指定されたキーを持つプロパティを返す。 そのキーの値がプロパティリストになければデフォルト値を返す。 さらに見つからなければ、空文字を返す。 左辺値になる場合に、同じ値を持つ要素がないときは与えられたキー に対応するプロパティに右辺値を挿入。

引数
keyプロパティキー
戻り値
指定されたキー値を持つこのプロパティリストの値
std::vector<std::string> coil::Properties::propertyNames ( void  ) const

プロパティのキーのリストを vector で返す

メインプロパティリストに同じ名前のキーが見つからない場合は、デフォルトの プロパティリストにある個別のキーを含む、このプロパティリストにあるすべて のキーのリストを返す。

戻り値
プロパティリストにあるすべてのキーのリスト。 デフォルトのプロパティリストにあるキーを含む

参照元 getRoot().

Properties* coil::Properties::removeNode ( const char *  leaf_name)

ノードを削除する

指定した名称を持つプロパティを削除する。 削除したプロパティを返す。

引数
leaf_name削除対象プロパティ名称
戻り値
削除したプロパティ

参照元 getRoot().

void coil::Properties::save ( std::ostream &  out,
const std::string &  header 
)

プロパティリストを指定されたストリームに保存する

推奨されていません。プロパティリストの保存方法としては、 store(ostream out, string header) メソッドの使用が推奨される。 このメソッドは Java Properties との互換性のために定義されている。

引数
out出力ストリーム
headerプロパティリストの記述

参照元 getRoot().

std::string coil::Properties::setDefault ( const std::string &  key,
const std::string &  value 
)

デフォルト値を登録する

key で指定される要素にデフォルト値を登録する。

引数
keyデフォルト値を登録するプロパティのキー
value登録されるデフォルト値
戻り値
指定されたデフォルト値

参照元 getRoot().

void coil::Properties::setDefaults ( const char *  defaults[],
long  num = LONG_MAX 
)

Properties にデフォルト値をまとめて登録する

配列で指定された要素にデフォルト値をまとめて登録する。 デフォルト値は char* の配列により与えられ、key と value の対になって おり、リストの終端は配列の数を表す引数 num か、空文字の key で与えらられ なければならない。

引数
defaultsデフォルト値を指定する配列
numデフォルト値を設定する要素数(デフォルト値:LONG_MAX)

参照元 getRoot().

std::string coil::Properties::setProperty ( const std::string &  key,
const std::string &  value 
)

Properties に value を key について登録する

Properties に value を key について登録する。 すでに key に対する値を持っている場合、戻り値に古い値を返す。

引数
keyプロパティリストに配置されるキー
valuekey に対応する値
戻り値
プロパティリストの指定されたキーの前の値。それがない場合は null

参照元 getRoot().

int coil::Properties::size ( void  ) const

プロパティの数を取得する

設定済みのプロパティ数を取得する。

戻り値
プロパティ数

参照元 getRoot().

static bool coil::Properties::split ( const std::string &  str,
const char  delim,
std::vector< std::string > &  value 
)
staticprotected

文字列を分割する

与えられた文字列を、与えられたデリミタで分割する。 与えられた文字列が空の場合は、エラーを返す。 与えられたデリミタがエスケープされている(直前に'\'が設定されている)場合 には、デリミタとして使用しない。

引数
str分割対象文字列
delimデリミタ
value分割結果値リスト
戻り値
分割処理結果

参照元 getRoot().

static void coil::Properties::splitKeyValue ( const std::string &  str,
std::string &  key,
std::string &  value 
)
staticprotected

文字列をキーと値のペアに分割する

与えられた文字列を、設定されたデリミタでキーと値のペアに分割する。 まず最初に与えられた文字列に':'もしくは'='が含まれるかを検索し、 どちらかの文字が含まれている場合にはそれをデリミタとして使用する。 両方とも含まれていない場合には、' '(スペース)を用いて分割を試みる。 全てのデリミタ候補が含まれていない場合には、与えられた文字列をキーとして 設定し、値に空の文字列を設定する。 どのデリミタ候補についてもエスケープされている(直前に'\'が設定されている) 場合には、デリミタとして使用しない。

引数
str分割対象文字列
key分割結果キー
value分割結果値

参照元 getRoot().

void coil::Properties::store ( std::ostream &  out,
const std::string &  header 
)

プロパティリストを出力ストリームへ保存する

Properties テーブル内のプロパティリスト (キーと要素のペア) を、load メソッドを使って Properties テーブルにロードするのに適切なフォーマットで 出力ストリームに書き込む。

Properties テーブル内のプロパティリスト (キーと要素のペア) を、load メソッドを使って Properties テーブルにロードするのに適切なフォーマットで 出力ストリームに書き込む。ストリームは、ISO 8859-1 文字 エンコーディングを使用して書き込まれる。 Properties テーブル (存在する場合) のデフォルトテーブルからの プロパティは、このメソッドによっては書き込まれない。

header 引数が null でない場合は、ASCII 文字の #、header の文字列、 および行区切り文字が最初に出力ストリームに書き込まれます。このため、 header は識別コメントとして使うことができる。

次に、ASCII 文字の #、現在の日時 (Date の toString メソッドによって 現在時刻が生成されるのと同様)、および Writer によって生成される行区切り からなるコメント行が書き込まれる。

続いて、 Properties テーブル内のすべてのエントリが 1 行ずつ書き出される。 各エントリのキー文字列、ASCII 文字の=、関連した要素文字列が書き込まれる。 要素文字列の各文字は、エスケープシーケンスとして描画する必要があるか どうか確認される。ASCII 文字の \、タブ、改行、および復帰はそれぞれ \\、 \t、\n、および \r として書き込まれる。\u0020 より小さい文字および \u007E より大きい文字は、対応する 16 進値 xxxx を使って \uxxxx として 書き込まれる。埋め込み空白文字でも後書き空白文字でもない先行空白文字は、 前に \ を付けて書き込まれる。キーと値の文字 #、!、=、および : は、 必ず正しくロードされるように、前にスラッシュを付けて書き込まれる。

エントリが書き込まれたあとで、出力ストリームがフラッシュされる。 出力ストリームはこのメソッドから復帰したあとも開いたままとなる。

引数
out出力ストリーム
headerプロパティリストの記述

参照元 getRoot().

フレンドと関連関数の詳解

std::ostream& operator<< ( std::ostream &  lhs,
const Properties rhs 
)
friend

Propertyをストリームに出力する

Propertyをストリームに出力する。

引数
lhs出力ストリーム
rhsプロパティ
戻り値
出力ストリーム

このクラス詳解は次のファイルから抽出されました: