mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 20:51:16 +00:00
Added tags to Node
This commit is contained in:
@@ -26,7 +26,7 @@ namespace YAML
|
|||||||
static bool decode(const Node& node, std::string& rhs) {
|
static bool decode(const Node& node, std::string& rhs) {
|
||||||
if(node.Type() != NodeType::Scalar)
|
if(node.Type() != NodeType::Scalar)
|
||||||
return false;
|
return false;
|
||||||
rhs = node.scalar();
|
rhs = node.Scalar();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -54,7 +54,7 @@ namespace YAML
|
|||||||
static bool decode(const Node& node, type& rhs) {\
|
static bool decode(const Node& node, type& rhs) {\
|
||||||
if(node.Type() != NodeType::Scalar)\
|
if(node.Type() != NodeType::Scalar)\
|
||||||
return false;\
|
return false;\
|
||||||
std::stringstream stream(node.scalar());\
|
std::stringstream stream(node.Scalar());\
|
||||||
stream >> rhs;\
|
stream >> rhs;\
|
||||||
return !!stream;\
|
return !!stream;\
|
||||||
}\
|
}\
|
||||||
|
@@ -29,6 +29,7 @@ namespace YAML
|
|||||||
NodeType::value type() const { return m_pRef->type(); }
|
NodeType::value type() const { return m_pRef->type(); }
|
||||||
|
|
||||||
const std::string& scalar() const { return m_pRef->scalar(); }
|
const std::string& scalar() const { return m_pRef->scalar(); }
|
||||||
|
const std::string& tag() const { return m_pRef->tag(); }
|
||||||
|
|
||||||
void mark_defined() {
|
void mark_defined() {
|
||||||
if(is_defined())
|
if(is_defined())
|
||||||
@@ -71,6 +72,10 @@ namespace YAML
|
|||||||
mark_defined();
|
mark_defined();
|
||||||
m_pRef->set_scalar(scalar);
|
m_pRef->set_scalar(scalar);
|
||||||
}
|
}
|
||||||
|
void set_tag(const std::string& tag) {
|
||||||
|
mark_defined();
|
||||||
|
m_pRef->set_tag(tag);
|
||||||
|
}
|
||||||
|
|
||||||
// size/iterator
|
// size/iterator
|
||||||
std::size_t size() const { return m_pRef->size(); }
|
std::size_t size() const { return m_pRef->size(); }
|
||||||
|
@@ -26,12 +26,14 @@ namespace YAML
|
|||||||
|
|
||||||
void mark_defined();
|
void mark_defined();
|
||||||
void set_type(NodeType::value type);
|
void set_type(NodeType::value type);
|
||||||
|
void set_tag(const std::string& tag);
|
||||||
void set_null();
|
void set_null();
|
||||||
void set_scalar(const std::string& scalar);
|
void set_scalar(const std::string& scalar);
|
||||||
|
|
||||||
bool is_defined() const { return m_isDefined; }
|
bool is_defined() const { return m_isDefined; }
|
||||||
NodeType::value type() const { return m_isDefined ? m_type : NodeType::Undefined; }
|
NodeType::value type() const { return m_isDefined ? m_type : NodeType::Undefined; }
|
||||||
const std::string& scalar() const { return m_scalar; }
|
const std::string& scalar() const { return m_scalar; }
|
||||||
|
const std::string& tag() const { return m_tag; }
|
||||||
|
|
||||||
// size/iterator
|
// size/iterator
|
||||||
std::size_t size() const;
|
std::size_t size() const;
|
||||||
@@ -78,6 +80,7 @@ namespace YAML
|
|||||||
private:
|
private:
|
||||||
bool m_isDefined;
|
bool m_isDefined;
|
||||||
NodeType::value m_type;
|
NodeType::value m_type;
|
||||||
|
std::string m_tag;
|
||||||
|
|
||||||
// scalar
|
// scalar
|
||||||
std::string m_scalar;
|
std::string m_scalar;
|
||||||
|
@@ -24,11 +24,13 @@ namespace YAML
|
|||||||
bool is_defined() const { return m_pData->is_defined(); }
|
bool is_defined() const { return m_pData->is_defined(); }
|
||||||
NodeType::value type() const { return m_pData->type(); }
|
NodeType::value type() const { return m_pData->type(); }
|
||||||
const std::string& scalar() const { return m_pData->scalar(); }
|
const std::string& scalar() const { return m_pData->scalar(); }
|
||||||
|
const std::string& tag() const { return m_pData->tag(); }
|
||||||
|
|
||||||
void mark_defined() { m_pData->mark_defined(); }
|
void mark_defined() { m_pData->mark_defined(); }
|
||||||
void set_data(const node_ref& rhs) { m_pData = rhs.m_pData; }
|
void set_data(const node_ref& rhs) { m_pData = rhs.m_pData; }
|
||||||
|
|
||||||
void set_type(NodeType::value type) { m_pData->set_type(type); }
|
void set_type(NodeType::value type) { m_pData->set_type(type); }
|
||||||
|
void set_tag(const std::string& tag) { m_pData->set_tag(tag); }
|
||||||
void set_null() { m_pData->set_null(); }
|
void set_null() { m_pData->set_null(); }
|
||||||
void set_scalar(const std::string& scalar) { m_pData->set_scalar(scalar); }
|
void set_scalar(const std::string& scalar) { m_pData->set_scalar(scalar); }
|
||||||
|
|
||||||
|
@@ -73,14 +73,25 @@ namespace YAML
|
|||||||
{
|
{
|
||||||
if(Type() != NodeType::Scalar)
|
if(Type() != NodeType::Scalar)
|
||||||
throw std::runtime_error("Unable to convert to string, not a scalar");
|
throw std::runtime_error("Unable to convert to string, not a scalar");
|
||||||
return scalar();
|
return Scalar();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const std::string& Node::scalar() const
|
inline const std::string& Node::Scalar() const
|
||||||
{
|
{
|
||||||
return m_pNode ? m_pNode->scalar() : detail::node_data::empty_scalar;
|
return m_pNode ? m_pNode->scalar() : detail::node_data::empty_scalar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline const std::string& Node::Tag() const
|
||||||
|
{
|
||||||
|
return m_pNode ? m_pNode->tag() : detail::node_data::empty_scalar;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Node::SetTag(const std::string& tag)
|
||||||
|
{
|
||||||
|
EnsureNodeExists();
|
||||||
|
m_pNode->set_tag(tag);
|
||||||
|
}
|
||||||
|
|
||||||
// assignment
|
// assignment
|
||||||
inline bool Node::is(const Node& rhs) const
|
inline bool Node::is(const Node& rhs) const
|
||||||
{
|
{
|
||||||
|
@@ -32,13 +32,15 @@ namespace YAML
|
|||||||
|
|
||||||
// access
|
// access
|
||||||
template<typename T> const T as() const;
|
template<typename T> const T as() const;
|
||||||
const std::string& scalar() const;
|
const std::string& Scalar() const;
|
||||||
|
const std::string& Tag() const;
|
||||||
|
void SetTag(const std::string& tag);
|
||||||
|
|
||||||
// assignment
|
// assignment
|
||||||
bool is(const Node& rhs) const;
|
bool is(const Node& rhs) const;
|
||||||
template<typename T> Node& operator=(const T& rhs);
|
template<typename T> Node& operator=(const T& rhs);
|
||||||
Node& operator=(const Node& rhs);
|
Node& operator=(const Node& rhs);
|
||||||
|
|
||||||
// size/iterator
|
// size/iterator
|
||||||
std::size_t size() const;
|
std::size_t size() const;
|
||||||
|
|
||||||
|
@@ -54,6 +54,11 @@ namespace YAML
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void node_data::set_tag(const std::string& tag)
|
||||||
|
{
|
||||||
|
m_tag = tag;
|
||||||
|
}
|
||||||
|
|
||||||
void node_data::set_null()
|
void node_data::set_null()
|
||||||
{
|
{
|
||||||
m_isDefined = true;
|
m_isDefined = true;
|
||||||
|
Reference in New Issue
Block a user