28 #ifndef YSL_INC_Core_ValueNode_h_
29 #define YSL_INC_Core_ValueNode_h_ 1
32 #include YFM_YSLib_Core_YObject
67 template<typename _tString, typename... _tParams>
76 template<
typename _tIn>
85 template<
typename _tIn,
typename _tString>
87 ValueNode(
const pair<_tIn, _tIn>& pr, _tString&& str)
102 PDefHOp(const
ValueNode&, +=, const ValueNode& node) const
104 PDefHOp(const ValueNode&, +=, ValueNode&& node) const
105 ImplRet(Add(std::move(node)), *this)
107 PDefHOp(const ValueNode&, -=, const ValueNode& node) const
109 PDefHOp(const ValueNode&, -=, const
string& str) const
118 PDefHOp(const ValueNode&, /=, const ValueNode& node) const
120 PDefHOp(const ValueNode&, /=, ValueNode&& node) const
121 ImplRet(*this %= std::move(node), *this)
130 operator%=(const ValueNode& node)
const
132 const auto& n((*
this)[node.name]);
134 return n.Value = node.Value, n;
139 const auto& n((*
this)[node.name]);
141 return n.Value = std::move(node.Value), n;
145 PDefHOp(
bool, ==,
const ValueNode& node)
const
148 PDefHOp(
bool, <, const
ValueNode& node) const
153 operator[](const
string&) const;
155 template<class _tCon>
157 operator[](const ystdex::path<_tCon>& pth)
const
161 for(
const auto& n : pth)
177 GetSize() const ynothrow;
199 PDefH(
bool, Remove, const
string& str) const
204 at(
const string&)
const;
208 PDefH(iterator, begin, )
209 ImplRet(GetContainer().begin())
211 ImplRet(GetContainer().begin())
215 PDefH(const_iterator, end, ) const
226 template<typename _type>
230 return node.Value.Access<_type>();
237 template<
typename _type>
241 return node.Value.AccessPtr<_type>();
247 template<
typename _type>
251 return p_node ? AccessPtr<_type>(*p_node) :
nullptr;
263 inline const ValueNode&
277 inline const ValueNode*
290 template<
typename _type>
294 return Access<_type>(node.
at(name));
304 template<
typename _type>
310 template<
typename _type>
314 return p_node ? AccessChildPtr<_type>(*p_node,
name) :
nullptr;
323 template<
typename _tString,
typename... _tParams>
335 template<
typename _tString,
typename... _tParams>
347 inline const ValueNode&
355 return std::move(arg);
363 template<
class _tPack>
375 template<
typename... _tParams>
376 inline unique_ptr<ValueNode::Container>
379 auto p(make_unique<ValueNode::Container>());
389 template<
typename _tString,
typename... _tParams>
set< ValueNode > Container
ValueNode(const pair< _tIn, _tIn > &pr, _tString &&str)
构造:使用输入迭代器对、字符串引用和值参数。
const ValueNode & at(const string &) const
static auto first(const _tIterator &i) -> decltype((i->first))
void seq_insert(_tCon &c, _tParams &&...args)
顺序插入值至指定容器。
unique_ptr< ValueNode::Container > CollectNodes(_tParams &&...args)
取指定值类型节点为成员的节点容器。
yconstfn const string _tParams && args
YF_API bool IsPrefixedIndex(const string &, char= '$')
判断字符串是否是一个指定字符和非负整数的组合。
#define DefDeCopyCtor(_t)
ValueNode PackNodes(_tString &&name, _tParams &&...args)
取以指定分量为参数对应初始化得到的值类型节点为子节点的值类型节点。
_type * AccessChildPtr(const ValueNode &node, const string &name)
访问指定名称的子节点的指定类型对象的指针。 空实例或类型检查失败 。
const ValueNode & operator%=(const ValueNode &&node) const
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
ValueNode(const pair< _tIn, _tIn > &pr)
构造:使用输入迭代器对。
#define DefGetter(_q, _t, _n,...)
YF_API const ValueNode & AccessNode(const ValueNode::Container *, const string &)
访问容器中的节点。
ValueNode StringifyToNode(_tString &&name, _tParams &&...args)
取指定名称和转换为字符串的值类型节点。
#define DefDeMoveCtor(_t)
_type * AccessPtr(const ValueNode &node) ynothrow
访问节点的指定类型对象指针。
YF_API const ValueNode * AccessNodePtr(const ValueNode::Container &, const string &)
访问容器中的节点指针。
#define ynothrow
YSLib 无异常抛出保证:若支持 noexcept 关键字, 指定特定的 noexcept 异常规范。
yconstfn const string & name
_type & AccessChild(const ValueNode &node, const string &name)
访问指定名称的子节点的指定类型对象。 空实例或类型检查失败 。
std::string to_string(unsigned char val)
转换为字符串。
#define DefDeMoveAssignment(_t)
#define DefCvt(_q, _t,...)
Container::const_iterator const_iterator
Container::iterator iterator
const ValueNode & UnpackToNode(const ValueNode &arg)
从引用参数取值类型节点:返回自身。
static auto second(const _tIterator &i) -> decltype((i->second))
ValueNode MakeNode(_tString &&name, _tParams &&...args)
取指定名称和退化参数的值类型节点。
#define DefDeCopyAssignment(_t)
decay_t< _type > decay_copy(_type &&arg)
退化复制。