aboutsummaryrefslogtreecommitdiff
path: root/xml/parser.ixx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2014-05-09 15:09:38 -0700
committerBoris Kolpackov <boris@codesynthesis.com>2014-05-09 15:09:38 -0700
commit19fbbfa8ffa594690d55dce80963d2016b4ec781 (patch)
tree67a1aeb4cccc3238b12dbc80f23506c1ad50f03f /xml/parser.ixx
parentfec681be83c91268ee4db97f34ce4e47179316dd (diff)
Code clean up
Diffstat (limited to 'xml/parser.ixx')
-rw-r--r--xml/parser.ixx35
1 files changed, 35 insertions, 0 deletions
diff --git a/xml/parser.ixx b/xml/parser.ixx
index c0fe256..49d9c89 100644
--- a/xml/parser.ixx
+++ b/xml/parser.ixx
@@ -29,6 +29,19 @@ namespace xml
init ();
}
+ inline parser::event_type parser::
+ peek ()
+ {
+ if (state_ == state_peek)
+ return event_;
+ else
+ {
+ event_type e (next_ (true));
+ state_ = state_peek; // Set it after the call to next_().
+ return e;
+ }
+ }
+
template <typename T>
inline T parser::
value () const
@@ -173,6 +186,28 @@ namespace xml
return element<T> (qname_type (n), dv);
}
+ inline void parser::
+ content (content_type c)
+ {
+ assert (state_ == state_next);
+
+ if (!element_state_.empty () && element_state_.back ().depth == depth_)
+ element_state_.back ().content = c;
+ else
+ element_state_.push_back (element_entry (depth_, c));
+ }
+
+ inline parser::content_type parser::
+ content () const
+ {
+ assert (state_ == state_next);
+
+ return
+ !element_state_.empty () && element_state_.back ().depth == depth_
+ ? element_state_.back ().content
+ : mixed;
+ }
+
inline const parser::element_entry* parser::
get_element () const
{