00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef ENV_PARAM_PARAM_XML_PATH_H
00037 #define ENV_PARAM_PARAM_XML_PATH_H
00038
00039 namespace Onikiri
00040 {
00041
00042 class ParamXMLPath
00043 {
00044 public:
00045
00046 enum NodeType
00047 {
00048 NT_NORMAL = 0,
00049 NT_ATTRIBUTE,
00050 NT_ARRAY,
00051 NT_COUNT_FUNCTION,
00052 NT_TEXT,
00053 };
00054
00055 struct Node
00056 {
00057 Node();
00058
00059 String str;
00060 NodeType type;
00061 int arrayIndex;
00062 };
00063
00064 typedef boost::shared_ptr<Node> NodePtr;
00065 typedef std::list<NodePtr> Path;
00066
00067 ParamXMLPath();
00068 ParamXMLPath( const ParamXMLPath& org );
00069 ParamXMLPath( const String& source );
00070 ParamXMLPath( const std::string& source );
00071 ParamXMLPath( const char* source );
00072
00073 virtual ~ParamXMLPath();
00074 void Parse( Path& path, const String& str );
00075 String ToString() const;
00076
00077 ParamXMLPath& operator +=( const ParamXMLPath& rhs );
00078 ParamXMLPath& operator +=( const String& rhs );
00079 ParamXMLPath& operator +=( const char* rhs );
00080 ParamXMLPath operator +( const ParamXMLPath& rhs ) const;
00081 ParamXMLPath operator +( const String& rhs ) const;
00082 ParamXMLPath operator +( const char* rhs ) const;
00083 ParamXMLPath& operator =( const String& rhs );
00084 ParamXMLPath& operator =( const char* rhs );
00085
00086 void Add( const String& path );
00087 void AddAttribute( const String& path );
00088 void AddArray( const String& path, int index );
00089 void SetArray( const ParamXMLPath& basePath, const String& relativePath, int index );
00090
00091 NodePtr& Back();
00092 const NodePtr Back() const;
00093 void RemoveLast();
00094
00095
00096 typedef Path::iterator iterator;
00097 typedef Path::const_iterator const_iterator;
00098 iterator begin();
00099 iterator end();
00100 const_iterator begin() const;
00101 const_iterator end() const;
00102 void pop_back();
00103 NodePtr& back();
00104 const NodePtr& back() const;
00105
00106 protected:
00107 Path m_path;
00108 typedef std::vector<String> TokenList;
00109 TokenList::const_iterator
00110 NextToken(
00111 const TokenList& tokens,
00112 TokenList::const_iterator cur,
00113 const String& source
00114 );
00115 };
00116
00117
00118 }
00119
00120 #endif // #ifdef ENV_PARAM_PARAM_XML_PATH_H
00121
00122