diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2014-04-29 11:04:19 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2014-04-29 11:04:19 +0200 |
commit | 818bedc799073966a4c56fd83ab1df358b9e9c24 (patch) | |
tree | 5d69822c65b645e2ec57506c15b9dee0d188991b | |
parent | 4e5dc8da6c8ef9ead4fcc6acbbade0cd6bfc61ca (diff) |
Add value<T> version, analogous to attribute<T>
-rw-r--r-- | tests/parser/driver.cxx | 11 | ||||
-rw-r--r-- | xml/parser.hxx | 1 | ||||
-rw-r--r-- | xml/parser.ixx | 7 |
3 files changed, 19 insertions, 0 deletions
diff --git a/tests/parser/driver.cxx b/tests/parser/driver.cxx index b882188..c5d18f0 100644 --- a/tests/parser/driver.cxx +++ b/tests/parser/driver.cxx @@ -84,6 +84,17 @@ main () // cerr << e.what () << endl; } + // Test value extraction. + // + { + istringstream is ("<root>123</root>"); + parser p (is, "test"); + p.next_expect (parser::start_element, "root"); + p.next_expect (parser::characters); + assert (p.value<int> () == 123); + p.next_expect (parser::end_element); + } + // Test attribute maps. // { diff --git a/xml/parser.hxx b/xml/parser.hxx index f3a2e34..b9b5d4c 100644 --- a/xml/parser.hxx +++ b/xml/parser.hxx @@ -208,6 +208,7 @@ namespace xml const std::string& prefix () const {return pqname_->prefix ();} const std::string& value () const {return *pvalue_;} + template <typename T> T value () const; unsigned long long line () const {return line_;} unsigned long long column () const {return column_;} diff --git a/xml/parser.ixx b/xml/parser.ixx index adb8751..ac27b46 100644 --- a/xml/parser.ixx +++ b/xml/parser.ixx @@ -6,6 +6,13 @@ namespace xml { + template <typename T> + inline T parser:: + value () const + { + return value_traits<T>::parse (value (), *this); + } + inline const std::string& parser:: attribute (const std::string& n) const { |