プロパティセットを表現するクラス [詳細]
#include <Properties.h>
Public メソッド | |
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) | |
コピーコンストラクタ | |
Properties & | operator= (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 Properties * | getRoot (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 |
ノードを取得する | |
Properties & | getNode (const std::string &key) |
ノードを取得する | |
bool | createNode (const std::string &key) |
新規ノードを生成する | |
Properties * | removeNode (const char *leaf_name) |
ノードを削除する | |
Properties * | hasKey (const char *key) const |
子ノードにkeyがあるかどうか | |
void | clear (void) |
子ノードを全て削除する | |
Properties & | operator<< (const Properties &prop) |
Propertyをマージする. | |
Static Protected メソッド | |
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 を含むものは扱うことができない。
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 | |||
) | [static, protected] |
プロパティの内容を保存する
プロパティに設定された内容を保存する。 保存時にはプロパティ階層の深さを表す数字が付加される。 値が設定されていないプロパティについては、デフォルト値が出力される。
out | プロパティ内容保存先の出力ストリーム | |
curr | 対象プロパティ | |
index | 現在のプロパティ階層 |
static Properties* coil::Properties::_getNode | ( | std::vector< std::string > & | keys, | |
std::vector< Properties * >::size_type | index, | |||
const Properties * | curr | |||
) | [static, protected] |
プロパティを取得する
キーリストで指定されたプロパティを取得する。 キーリストでは、指定するキーのプロパティでの階層関係をリスト形式で表現 する。 指定したキーリストに該当するプロパティが存在しない場合はNULLを返す。
keys | 取得対象プロパティのキーのリスト表現 | |
index | キーリストの階層数 | |
curr | 検索対象プロパティ |
static void coil::Properties::_propertiyNames | ( | std::vector< std::string > & | names, | |
std::string | curr_name, | |||
const Properties * | curr | |||
) | [static, protected] |
プロパティの名称リストを取得する
プロパティの名称を'.'区切りで表現したリストを取得する。
names | プロパティの名称リスト | |
curr_name | 現在のプロパティ名 | |
curr | 対象プロパティ |
static void coil::Properties::_store | ( | std::ostream & | out, | |
std::string | curr_name, | |||
Properties * | curr | |||
) | [static, protected] |
プロパティの名称リストを保存する
プロパティの名称を'.'区切りで表現したリストを保存する。
out | プロパティの名称リスト保存先の出力ストリーム | |
curr_name | 現在のプロパティ名 | |
curr | 対象プロパティ |
void coil::Properties::clear | ( | void | ) |
子ノードを全て削除する
bool coil::Properties::createNode | ( | const std::string & | key | ) |
新規ノードを生成する
指定したキーを持つ新規ノードを生成する。 既に同一キーを持つノードが登録済みの場合にはエラーを返す。
key | 新規ノードのキー |
Properties* const coil::Properties::findNode | ( | const std::string & | key | ) | const |
ノードを取得する
指定したキーを持つノードを取得する。 存在しないキー、および空文字の場合 0 を返す。
key | 取得対象ノードのキー |
const std::string& coil::Properties::getDefault | ( | const std::string & | key | ) | const |
指定されたキーに対してデフォルト値を取得する
指定されたキーを持つプロパティのデフォルト値を返す。 指定されたキーを持つプロパティが存在しない場合には空文字を返す。
key | プロパティキー |
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 | 取得対象ノードのキー |
const std::string& coil::Properties::getProperty | ( | const std::string & | key, | |
const std::string & | def | |||
) | const |
指定されたキーを持つプロパティを、プロパティリストから探す
指定されたキーを持つプロパティを、プロパティリストから探す。 そのキーがプロパティリストにない場合は、デフォルト値の引数が返される。
key | プロパティキー | |
def | デフォルト値 |
const std::string& coil::Properties::getProperty | ( | const std::string & | key | ) | const |
指定されたキーを持つプロパティを、プロパティリストから探す
指定されたキーを持つプロパティを、プロパティリストから探す。 そのキーがプロパティリストにないと、デフォルトのプロパティリスト、 さらにそのデフォルト値が繰り返し調べられる。 そのプロパティが見つからない場合は、null が返される。
key | プロパティキー |
参照元 RTC::ModuleManager::DllPred::operator()(), RTC::Manager::ModuleFactories::operator()(), と RTC::ConnectorDataListenerT< DataType >::operator()().
const Properties* coil::Properties::getRoot | ( | void | ) | const [inline] |
ルート要素の取得
プロパティのルート要素を取得する。
const char* coil::Properties::getValue | ( | void | ) | const [inline] |
値の取得
プロパティの値を取得する。
Properties* coil::Properties::hasKey | ( | const char * | key | ) | const |
子ノードにkeyがあるかどうか
指定したキーを持つ子ノードが存在するかどうか確認する。 存在する場合、子ノードを返す。
key | 確認対象のキー |
static std::string coil::Properties::indent | ( | int | index | ) | [static, protected] |
インデントを生成する
指定された数字に従って生成したインデントを返す。 返されるインデントは、指定数字×2つの空白。
index | インデント数の指定 |
void coil::Properties::list | ( | std::ostream & | out | ) |
指定された出力ストリームに、プロパティリストを出力する
指定された出力ストリームに、プロパティリストを出力する。 このメソッドは主にデバッグに用いられる。
out | 出力ストリーム |
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 | 入力ストリーム |
Properties& coil::Properties::operator<< | ( | const Properties & | prop | ) |
Propertyをマージする.
現在のプロパティに設定したプロパティをマージする。
prop | マージするプロパティ |
Properties& coil::Properties::operator= | ( | const Properties & | prop | ) |
代入演算子
左辺値の Properties のキー、値およびデフォルト値は全て削除され、 右辺値の Properties のキー、値およびデフォルト値が全てそのまま コピーされる。
std::string& coil::Properties::operator[] | ( | const std::string & | key | ) |
指定されたキーを持つプロパティを、プロパティリストから探す
指定されたキーを持つプロパティを返す。 そのキーの値がプロパティリストになければデフォルト値を返す。 さらに見つからなければ、空文字を返す。 左辺値になる場合に、同じ値を持つ要素がないときは与えられたキー に対応するプロパティに右辺値を挿入。
key | プロパティキー |
const std::string& coil::Properties::operator[] | ( | const std::string & | key | ) | const |
指定されたキーを持つプロパティを、プロパティリストから探す
指定されたキーを持つプロパティを返す。 そのキーがプロパティリストになければデフォルト値を返す。 さらに見つからなければ、空文字を返す。
key | プロパティキー |
std::vector<std::string> coil::Properties::propertyNames | ( | void | ) | const |
プロパティのキーのリストを vector で返す
メインプロパティリストに同じ名前のキーが見つからない場合は、デフォルトの プロパティリストにある個別のキーを含む、このプロパティリストにあるすべて のキーのリストを返す。
Properties* coil::Properties::removeNode | ( | const char * | leaf_name | ) |
ノードを削除する
指定した名称を持つプロパティを削除する。 削除したプロパティを返す。
leaf_name | 削除対象プロパティ名称 |
void coil::Properties::save | ( | std::ostream & | out, | |
const std::string & | header | |||
) |
プロパティリストを指定されたストリームに保存する
推奨されていません。プロパティリストの保存方法としては、 store(ostream out, string header) メソッドの使用が推奨される。 このメソッドは Java Properties との互換性のために定義されている。
out | 出力ストリーム | |
header | プロパティリストの記述 |
std::string coil::Properties::setDefault | ( | const std::string & | key, | |
const std::string & | value | |||
) |
デフォルト値を登録する
key で指定される要素にデフォルト値を登録する。
key | デフォルト値を登録するプロパティのキー | |
value | 登録されるデフォルト値 |
void coil::Properties::setDefaults | ( | const char * | defaults[], | |
long | num = LONG_MAX | |||
) |
Properties にデフォルト値をまとめて登録する.
配列で指定された要素にデフォルト値をまとめて登録する。 デフォルト値は char* の配列により与えられ、key と value の対になって おり、リストの終端は配列の数を表す引数 num か、空文字の key で与えらられ なければならない。
defaults | デフォルト値を指定する配列 | |
num | デフォルト値を設定する要素数(デフォルト値:LONG_MAX) |
std::string coil::Properties::setProperty | ( | const std::string & | key, | |
const std::string & | value | |||
) |
Properties に value を key について登録する.
Properties に value を key について登録する。 すでに key に対する値を持っている場合、戻り値に古い値を返す。
key | プロパティリストに配置されるキー | |
value | key に対応する値 |
int coil::Properties::size | ( | void | ) | const |
プロパティの数を取得する
設定済みのプロパティ数を取得する。
static bool coil::Properties::split | ( | const std::string & | str, | |
const char | delim, | |||
std::vector< std::string > & | value | |||
) | [static, protected] |
文字列を分割する
与えられた文字列を、与えられたデリミタで分割する。 与えられた文字列が空の場合は、エラーを返す。 与えられたデリミタがエスケープされている(直前に'\'が設定されている)場合 には、デリミタとして使用しない。
str | 分割対象文字列 | |
delim | デリミタ | |
value | 分割結果値リスト |
static void coil::Properties::splitKeyValue | ( | const std::string & | str, | |
std::string & | key, | |||
std::string & | value | |||
) | [static, protected] |
文字列をキーと値のペアに分割する
与えられた文字列を、設定されたデリミタでキーと値のペアに分割する。 まず最初に与えられた文字列に':'もしくは'='が含まれるかを検索し、 どちらかの文字が含まれている場合にはそれをデリミタとして使用する。 両方とも含まれていない場合には、' '(スペース)を用いて分割を試みる。 全てのデリミタ候補が含まれていない場合には、与えられた文字列をキーとして 設定し、値に空の文字列を設定する。 どのデリミタ候補についてもエスケープされている(直前に'\'が設定されている) 場合には、デリミタとして使用しない。
str | 分割対象文字列 | |
key | 分割結果キー | |
value | 分割結果値 |
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 | プロパティリストの記述 |
std::ostream& operator<< | ( | std::ostream & | lhs, | |
const Properties & | rhs | |||
) | [friend] |
Propertyをストリームに出力する.
Propertyをストリームに出力する。
lhs | 出力ストリーム | |
rhs | プロパティ |