クラス Onikiri::ParamXMLPath

#include <ParamXMLPath.h>

Onikiri::ParamXMLPathのコラボレーション図

Collaboration graph
[凡例]
すべてのメンバ一覧

Public 型

typedef Path::const_iterator const_iterator
typedef Path::iterator iterator
typedef boost::shared_ptr<
Node
NodePtr
enum  NodeType {
  NT_NORMAL = 0, NT_ATTRIBUTE, NT_ARRAY, NT_COUNT_FUNCTION,
  NT_TEXT
}
 NT_ARRAY
 NT_ATTRIBUTE
 NT_COUNT_FUNCTION
 NT_NORMAL = 0
 NT_TEXT
typedef std::list< NodePtrPath

Public メソッド

void Add (const String &path)
void AddArray (const String &path, int index)
void AddAttribute (const String &path)
const NodePtrback () const
NodePtrback ()
const NodePtr Back () const
NodePtrBack ()
const_iterator begin () const
iterator begin ()
const_iterator end () const
iterator end ()
ParamXMLPath operator+ (const char *rhs) const
ParamXMLPath operator+ (const String &rhs) const
ParamXMLPath operator+ (const ParamXMLPath &rhs) const
ParamXMLPathoperator+= (const char *rhs)
ParamXMLPathoperator+= (const String &rhs)
ParamXMLPathoperator+= (const ParamXMLPath &rhs)
ParamXMLPathoperator= (const char *rhs)
ParamXMLPathoperator= (const String &rhs)
 ParamXMLPath (const char *source)
 ParamXMLPath (const std::string &source)
 ParamXMLPath (const String &source)
 ParamXMLPath (const ParamXMLPath &org)
 ParamXMLPath ()
void Parse (Path &path, const String &str)
void pop_back ()
void RemoveLast ()
void SetArray (const ParamXMLPath &basePath, const String &relativePath, int index)
String ToString () const
virtual ~ParamXMLPath ()

Protected 型

typedef std::vector< StringTokenList

Protected メソッド

TokenList::const_iterator NextToken (const TokenList &tokens, TokenList::const_iterator cur, const String &source)

Protected 変数

Path m_path

構成

struct  Node

説明

ParamXMLPath.h42 行で定義されています。


型定義

typedef Path::const_iterator Onikiri::ParamXMLPath::const_iterator

ParamXMLPath.h97 行で定義されています。

typedef Path::iterator Onikiri::ParamXMLPath::iterator

ParamXMLPath.h96 行で定義されています。

typedef boost::shared_ptr<Node> Onikiri::ParamXMLPath::NodePtr

ParamXMLPath.h64 行で定義されています。

typedef std::list<NodePtr> Onikiri::ParamXMLPath::Path

ParamXMLPath.h65 行で定義されています。

typedef std::vector<String> Onikiri::ParamXMLPath::TokenList [protected]

ParamXMLPath.h108 行で定義されています。


列挙型

enum Onikiri::ParamXMLPath::NodeType

列挙型の値:
NT_NORMAL 
NT_ATTRIBUTE 
NT_ARRAY 
NT_COUNT_FUNCTION 
NT_TEXT 

ParamXMLPath.h46 行で定義されています。

00047         {
00048             NT_NORMAL = 0,
00049             NT_ATTRIBUTE,
00050             NT_ARRAY,
00051             NT_COUNT_FUNCTION,
00052             NT_TEXT,
00053         };


コンストラクタとデストラクタ

ParamXMLPath::ParamXMLPath (  ) 

ParamXMLPath.cpp45 行で定義されています。

00046 {
00047 }

ParamXMLPath::ParamXMLPath ( const ParamXMLPath org  ) 

ParamXMLPath.cpp49 行で定義されています。

参照先 m_path.

00050 {
00051     m_path = org.m_path;
00052 }

ParamXMLPath::ParamXMLPath ( const String source  ) 

ParamXMLPath.cpp54 行で定義されています。

参照先 m_pathParse().

00055 {
00056     Parse( m_path, source );
00057 }

関数の呼び出しグラフ:

ParamXMLPath::ParamXMLPath ( const std::string &  source  ) 

ParamXMLPath.cpp59 行で定義されています。

参照先 m_pathParse().

00060 {
00061     Parse( m_path, source );
00062 }

関数の呼び出しグラフ:

ParamXMLPath::ParamXMLPath ( const char *  source  ) 

ParamXMLPath.cpp64 行で定義されています。

参照先 m_pathParse().

00065 {
00066     Parse( m_path, source );
00067 }

関数の呼び出しグラフ:

ParamXMLPath::~ParamXMLPath (  )  [virtual]

ParamXMLPath.cpp69 行で定義されています。

00070 {
00071 }


関数

void ParamXMLPath::Add ( const String path  ) 

ParamXMLPath.cpp284 行で定義されています。

参照先 m_pathParse().

00285 {
00286     Parse( m_path, path );
00287 }

関数の呼び出しグラフ:

void ParamXMLPath::AddArray ( const String path,
int  index 
)

ParamXMLPath.cpp297 行で定義されています。

参照先 m_pathNT_ARRAYParse().

参照元 Onikiri::EmulatorUtility::ProcessCreateParam::GetTargetBasePath()Onikiri::ResourceBuilder::LoadParameterSection()Onikiri::ParamDB::LoadXMLFile()SetArray().

00298 {
00299     Parse( m_path, path );
00300     m_path.back()->type = NT_ARRAY;
00301     m_path.back()->arrayIndex = index;
00302 }

関数の呼び出しグラフ:

Here is the caller graph for this function:

void ParamXMLPath::AddAttribute ( const String path  ) 

ParamXMLPath.cpp289 行で定義されています。

参照先 m_pathNT_ATTRIBUTE.

参照元 Onikiri::EmulatorUtility::ProcessCreateParam::GetTargetBasePath().

00290 {
00291     NodePtr node( new Node );
00292     node->type = NT_ATTRIBUTE;
00293     node->str = path;
00294     m_path.push_back( node );
00295 }

Here is the caller graph for this function:

const ParamXMLPath::NodePtr & ParamXMLPath::back (  )  const

ParamXMLPath.cpp327 行で定義されています。

参照先 m_path.

00328 {
00329     return m_path.back();
00330 }

ParamXMLPath::NodePtr & ParamXMLPath::back (  ) 

ParamXMLPath.cpp321 行で定義されています。

参照先 m_path.

参照元 Back()Onikiri::ParamXMLTree::GetNodeArray().

00322 {
00323     return m_path.back();
00324 }

Here is the caller graph for this function:

const ParamXMLPath::NodePtr ParamXMLPath::Back (  )  const

ParamXMLPath.cpp274 行で定義されています。

参照先 back().

00275 {
00276     return back();
00277 }

関数の呼び出しグラフ:

ParamXMLPath::NodePtr & ParamXMLPath::Back (  ) 

ParamXMLPath.cpp269 行で定義されています。

参照先 back().

00270 {
00271     return back();
00272 }

関数の呼び出しグラフ:

ParamXMLPath::const_iterator ParamXMLPath::begin (  )  const

ParamXMLPath.cpp342 行で定義されています。

参照先 m_path.

00343 {
00344     return m_path.begin();
00345 }

ParamXMLPath::iterator ParamXMLPath::begin (  ) 

ParamXMLPath.cpp332 行で定義されています。

参照先 m_path.

参照元 Onikiri::ParamXMLTree::Get()Onikiri::ParamXMLTree::GetNode()operator+=()Onikiri::ParamXMLTree::Set()ToString().

00333 {
00334     return m_path.begin();
00335 }

Here is the caller graph for this function:

ParamXMLPath::const_iterator ParamXMLPath::end (  )  const

ParamXMLPath.cpp347 行で定義されています。

参照先 m_path.

00348 {
00349     return m_path.end();
00350 }

ParamXMLPath::iterator ParamXMLPath::end (  ) 

ParamXMLPath.cpp337 行で定義されています。

参照先 m_path.

参照元 Onikiri::ParamXMLTree::Get()Onikiri::ParamXMLTree::GetNode()operator+=()Onikiri::ParamXMLTree::Set()ToString().

00338 {
00339     return m_path.end();
00340 }

Here is the caller graph for this function:

ParamXMLPath::TokenList::const_iterator ParamXMLPath::NextToken ( const TokenList tokens,
TokenList::const_iterator  cur,
const String source 
) [protected]

ParamXMLPath.cpp75 行で定義されています。

参照先 THROW_RUNTIME_ERROR.

参照元 Parse().

00079  {
00080     ++cur;
00081     if( cur == tokens.end() ){
00082         THROW_RUNTIME_ERROR( "'%s' is an invalid path format.", source.c_str() );
00083     }
00084     return cur;
00085 }

Here is the caller graph for this function:

ParamXMLPath ParamXMLPath::operator+ ( const char *  rhs  )  const

ParamXMLPath.cpp248 行で定義されています。

00249 {
00250     ParamXMLPath tmp = *this;
00251     tmp += rhs;
00252     return tmp;
00253 }

ParamXMLPath ParamXMLPath::operator+ ( const String rhs  )  const

ParamXMLPath.cpp241 行で定義されています。

00242 {
00243     ParamXMLPath tmp = *this;
00244     tmp += rhs;
00245     return tmp;
00246 }

ParamXMLPath ParamXMLPath::operator+ ( const ParamXMLPath rhs  )  const

ParamXMLPath.cpp234 行で定義されています。

00235 {
00236     ParamXMLPath tmp = *this;
00237     tmp += rhs;
00238     return tmp;
00239 }

ParamXMLPath & ParamXMLPath::operator+= ( const char *  rhs  ) 

ParamXMLPath.cpp228 行で定義されています。

参照先 m_pathParse().

00229 {
00230     Parse( m_path, rhs );
00231     return *this;
00232 }

関数の呼び出しグラフ:

ParamXMLPath & ParamXMLPath::operator+= ( const String rhs  ) 

ParamXMLPath.cpp222 行で定義されています。

参照先 m_pathParse().

00223 {
00224     Parse( m_path, rhs );
00225     return *this;
00226 }

関数の呼び出しグラフ:

ParamXMLPath & ParamXMLPath::operator+= ( const ParamXMLPath rhs  ) 

ParamXMLPath.cpp214 行で定義されています。

参照先 begin()end()m_path.

00215 {
00216     for( const_iterator i = rhs.begin(); i != rhs.end(); ++i ){
00217         m_path.push_back( *i );
00218     }
00219     return *this;
00220 }

関数の呼び出しグラフ:

ParamXMLPath & ParamXMLPath::operator= ( const char *  rhs  ) 

ParamXMLPath.cpp262 行で定義されています。

参照先 m_pathParse().

00263 {
00264     m_path.clear();
00265     Parse( m_path, rhs );
00266     return *this;
00267 }

関数の呼び出しグラフ:

ParamXMLPath & ParamXMLPath::operator= ( const String rhs  ) 

ParamXMLPath.cpp255 行で定義されています。

参照先 m_pathParse().

00256 {
00257     m_path.clear();
00258     Parse( m_path, rhs );
00259     return *this;
00260 }

関数の呼び出しグラフ:

void ParamXMLPath::Parse ( Path path,
const String str 
)

ParamXMLPath.cpp89 行で定義されています。

参照先 NextToken()NT_ARRAYNT_ATTRIBUTENT_COUNT_FUNCTIONNT_TEXTOnikiri::String::split()THROW_RUNTIME_ERROR.

参照元 Add()AddArray()operator+=()operator=()ParamXMLPath().

00090 {
00091     const vector<String>& tokens = source.split( "/", "[]@#()" );
00092     for( vector<String>::const_iterator i = tokens.begin();
00093          i != tokens.end();
00094          ++i
00095     ){
00096         NodePtr node( new Node );
00097         const String& token = *i;
00098 
00099         if( token == "@" ){
00100 
00101             // Attribute
00102             i = NextToken( tokens, i, source );
00103             node->type = NT_ATTRIBUTE;
00104             node->str = *i;
00105 
00106         }
00107         else if( token == "#" ){
00108             
00109             // Count function (abbreviation version)
00110             i = NextToken( tokens, i, source );
00111             node->type = NT_COUNT_FUNCTION;
00112             node->str = *i;
00113 
00114         }
00115         else{
00116 
00117             node->str = token;
00118             if( i+1 != tokens.end() ){
00119 
00120                 const String& next = *NextToken( tokens, i, source );
00121 
00122                 if( next == "[" ){
00123                     // Array
00124                     node->type = NT_ARRAY;
00125 
00126                     i = NextToken( tokens, i, source ); // i: '['
00127                     i = NextToken( tokens, i, source ); // i: '<number>'
00128                     node->arrayIndex = lexical_cast<int>(*i);
00129 
00130                     i = NextToken( tokens, i, source ); // i: ']'
00131                     if( *i != "]" ){
00132                         THROW_RUNTIME_ERROR( "'%s' has an invalid array format.", source.c_str() );
00133                     }
00134                 }
00135                 else if( next == "(" ){
00136 
00137                     // XPath functions or text()
00138                     const String& function = node->str;
00139 
00140                     if( function == "text" ){
00141 
00142                         // text() node.
00143                         node->type = NT_TEXT;
00144                         i = NextToken( tokens, i, source ); // i: '('
00145                         i = NextToken( tokens, i, source ); // i: ')'
00146                         if( *i != ")" ){
00147                             THROW_RUNTIME_ERROR( "'%s' has an invalid text format.", source.c_str() );
00148                         }
00149 
00150                     }
00151                     else if( function == "count" ){
00152                         
00153                         // Count function
00154                         node->type = NT_COUNT_FUNCTION;
00155 
00156                         i = NextToken( tokens, i, source ); // '('
00157                         i = NextToken( tokens, i, source ); // '<body>'
00158                         node->str = *i;
00159                         i = NextToken( tokens, i, source ); // ')'
00160                         if( *i != ")" ){
00161                             THROW_RUNTIME_ERROR( "'%s' has an invalid function format.", source.c_str() );
00162                         }
00163 
00164                     }
00165                     else{
00166                         THROW_RUNTIME_ERROR( "'%s' has an invalid path format.", source.c_str() );
00167                     }
00168 
00169                 }
00170                 else{
00171                     // Normal path
00172                 }
00173             }   //  if( i+1 != tokens.end() ){
00174             else{
00175                 // Normal path
00176             }
00177                 
00178         }   // if( *i == "@" ){
00179 
00180         // Add a parsed node.
00181         path.push_back( node );
00182 
00183     }   // for( vector<String>::const_iterator i = tokens.begin();
00184 }

関数の呼び出しグラフ:

Here is the caller graph for this function:

void ParamXMLPath::pop_back (  ) 

ParamXMLPath.cpp314 行で定義されています。

参照先 m_path.

参照元 Onikiri::ParamXMLTree::GetNodeArray()RemoveLast().

00315 {
00316     if( m_path.size() > 0 )
00317         m_path.pop_back();
00318 }

Here is the caller graph for this function:

void ParamXMLPath::RemoveLast (  ) 

ParamXMLPath.cpp279 行で定義されています。

参照先 pop_back().

00280 {
00281     pop_back();
00282 }

関数の呼び出しグラフ:

void ParamXMLPath::SetArray ( const ParamXMLPath basePath,
const String relativePath,
int  index 
)

ParamXMLPath.cpp304 行で定義されています。

参照先 AddArray().

参照元 Onikiri::ResourceBuilder::ConstructResources().

00305 {
00306     *this = basePath;
00307     AddArray( relativePath, index );
00308 }

関数の呼び出しグラフ:

Here is the caller graph for this function:

String ParamXMLPath::ToString (  )  const

ParamXMLPath.cpp186 行で定義されています。

参照先 begin()end()Onikiri::String::format()NT_ARRAYNT_ATTRIBUTENT_COUNT_FUNCTIONNT_TEXT.

参照元 Onikiri::ParamDB::AddParameter()Onikiri::ResourceBuilder::ConstructResources()Onikiri::ParamXMLTree::Get()Onikiri::ParamDB::Get()Onikiri::ResourceBuilder::GetConfigurationPath()Onikiri::ParamXMLTree::GetNode()Onikiri::EmulatorUtility::ProcessCreateParam::GetTargetBasePath()Onikiri::ResourceBuilder::LoadParameterSection()Onikiri::ResourceBuilder::LoadStructureSection()Onikiri::ParamXMLTree::Set()Onikiri::PhysicalResourceNode::SetInfo()Onikiri::ParamDB::ToParam()Onikiri::ParamDB::ToParamRaw().

00187 {
00188     String ret;
00189     for( const_iterator i = begin(); i != end(); ++i ){
00190         ret += "/";
00191 
00192         const NodePtr& node = *i;
00193         switch( node->type ){
00194         case NT_ARRAY:
00195             ret += String().format( "%s[%d]", node->str.c_str(), node->arrayIndex );
00196             break;
00197         case NT_COUNT_FUNCTION:
00198             ret += String().format( "#%s", node->str.c_str() );
00199             break;
00200         case NT_ATTRIBUTE:
00201             ret += String().format( "@%s", node->str.c_str() );
00202             break;
00203         case NT_TEXT:
00204             ret += "text()";
00205             break;
00206         default:
00207             ret += node->str;
00208             break;
00209         }
00210     }
00211     return ret;
00212 }

関数の呼び出しグラフ:

Here is the caller graph for this function:


変数

Path Onikiri::ParamXMLPath::m_path [protected]

ParamXMLPath.h107 行で定義されています。

参照元 Add()AddArray()AddAttribute()back()begin()end()operator+=()operator=()ParamXMLPath()pop_back().


このクラスの説明は次のファイルから生成されました:
Onikiri2に対してTue Jun 18 15:11:56 2013に生成されました。  doxygen 1.4.7