1 #ifndef __DALI_SCRIPT_TREE_NODE_H__
2 #define __DALI_SCRIPT_TREE_NODE_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
21 #include <utility> // pair
26 #include <dali/public-api/common/dali-common.h>
34 namespace Internal DALI_INTERNAL
37 class TreeNodeManipulator;
39 } // namespace Internal
43 * TreeNode describes a tree of nodes.
44 * TreeNode does not own its string data which is held by a container eg JsonParser
45 * Modification operations should be done through a container.
47 class DALI_IMPORT_API TreeNode
51 * enum typedef describing the node type
65 * Non virtual destructor; this class should not be inherited from.
69 typedef std::pair<const char*, const TreeNode&> KeyNodePair;
72 * Iterator to iterate through children
77 typedef KeyNodePair value_type;
78 typedef KeyNodePair *pointer;
79 typedef const KeyNodePair *const_pointer;
80 typedef KeyNodePair &reference;
81 typedef const KeyNodePair &const_reference;
82 typedef size_t size_type;
83 typedef std::ptrdiff_t difference_type;
84 typedef std::forward_iterator_tag iterator_category;
89 explicit ConstIterator(TreeNode* v);
94 ConstIterator& operator ++();
99 ConstIterator operator ++(int);
104 bool operator!=( const ConstIterator& rhs ) const;
109 KeyNodePair operator*();
114 KeyNodePair operator->();
120 * Iterate begin() over the nodes children
121 * @return a const interator
123 ConstIterator CBegin() const;
127 * @return a const interator
129 ConstIterator CEnd() const;
132 * Size (number of children)
133 * @return The number of children
138 * Count (the number of children of a sub child node)
139 * @param childName The name of the child to find
140 * @return the number of children in the found child
142 size_t Count(const std::string& childName) const;
146 * @return The nodes name
148 const char* GetName() const;
151 * Gets the nodes type
152 * @return The nodes type
154 NodeType GetType() const;
157 * Gets the nodes string value
158 * Only valid if the type == TreeNode::STRING
159 * @return The string value
161 const char* GetString() const;
164 * Gets the nodes float value
165 * Only valid if the type == TreeNode::FLOAT
166 * @return The float value
168 float GetFloat() const;
171 * Gets the nodes integer value
172 * Only valid if the type == TreeNode::INTEGER
173 * @return The integer value
175 int GetInteger() const;
178 * Gets the nodes boolean value
179 * Only valid if the type == TreeNode::BOOLEAN
180 * @return The boolean value
182 bool GetBoolean() const;
185 * Gets the substituion flag
186 * Only valid if the type == TreeNode::STRING
187 * @return The substitution flag
189 bool HasSubstitution() const;
192 * Gets a child of the node
193 * @param name The name of the child
194 * @return The child if found, else NULL
196 const TreeNode* GetChild(const std::string& name) const;
199 * Recursively search for a child of the node
200 * @param name The name of the child
201 * @return The child if found, else NULL
203 const TreeNode* Find(const std::string& name) const;
206 friend class Internal::TreeNodeManipulator;
211 DALI_INTERNAL TreeNode();
213 // non copyable or assignable
214 DALI_INTERNAL TreeNode(TreeNode &);
215 DALI_INTERNAL TreeNode& operator=(const TreeNode&);
217 const char* mName; ///< The nodes name (if any)
219 TreeNode* mParent; ///< The nodes parent
220 TreeNode* mNextSibling; ///< The nodes next sibling
221 TreeNode* mFirstChild; ///< The nodes first child
222 TreeNode* mLastChild; ///< The nodes last child
226 const char* mStringValue; ///< The node string value
227 int mIntValue; ///< The node integer value
228 float mFloatValue; ///< The node float value
231 NodeType mType; ///< The nodes type
232 bool mSubstituion; ///< String substitution flag
236 } // namespace Toolkit
240 #endif // __DALI_SCRIPT_TREE_NODE_H__