summaryrefslogtreecommitdiff
path: root/src/value.h
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2007-05-16 05:38:49 +0000
committerJohn Wiegley <johnw@newartisans.com>2008-04-13 03:38:52 -0400
commit51ef4d79143b6fb0e31aea9053996ec3a09e39a4 (patch)
tree79f528eee34abd61faef6e55a2f423d167f52374 /src/value.h
parent7c7e5c5e367778c6d54a1bb2be2db5c73db0492b (diff)
downloadledger-51ef4d79143b6fb0e31aea9053996ec3a09e39a4.tar.gz
ledger-51ef4d79143b6fb0e31aea9053996ec3a09e39a4.tar.bz2
ledger-51ef4d79143b6fb0e31aea9053996ec3a09e39a4.zip
XPath expressions may now yield values.
Diffstat (limited to 'src/value.h')
-rw-r--r--src/value.h19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/value.h b/src/value.h
index f8674864..148d5bd6 100644
--- a/src/value.h
+++ b/src/value.h
@@ -229,7 +229,12 @@ public:
TRACE_DTOR(value_t);
}
- value_t& operator=(const value_t& val);
+ value_t& operator=(const value_t& val) {
+ if (this == &val || storage == val.storage)
+ return *this;
+ storage = val.storage;
+ return *this;
+ }
/**
* _dup() makes a private copy of the current value so that it can
@@ -427,6 +432,11 @@ public:
assert(is_xml_node());
return *(const xml::node_t **) storage->data;
}
+ template <typename T>
+ T * as_xml_node() const {
+ assert(is_xml_node());
+ return *(T **) storage->data;
+ }
void set_xml_node(xml::node_t * val) {
set_type(XML_NODE);
*(xml::node_t **) storage->data = val;
@@ -592,6 +602,13 @@ public:
friend std::ostream& operator<<(std::ostream& out, const value_t& val);
};
+template <>
+inline const xml::node_t * value_t::as_xml_node() const {
+ assert(is_xml_node());
+ assert(! is_type(CONST_XML_NODE));
+ return *(const xml::node_t **) storage->data;
+}
+
std::ostream& operator<<(std::ostream& out, const value_t& val);
DECLARE_EXCEPTION(value_error);