12 #ifndef ZYPP_PARSER_XML_PARSEDEFCONSUME_H
13 #define ZYPP_PARSER_XML_PARSEDEFCONSUME_H
43 virtual void text (
const Node & _node );
45 virtual void done (
const Node & _node );
71 void setRedirect(
const shared_ptr<ParseDefConsume> & target_r );
80 virtual void text (
const Node & _node );
82 virtual void done (
const Node & _node );
107 virtual void start(
const Node & node_r );
108 virtual void text(
const Node & node_r );
109 virtual void cdata(
const Node & node_r );
110 virtual void done(
const Node & node_r );
126 namespace parse_def_assign
138 virtual void assign(
const char * text_r )
145 template <
class _Type>
152 virtual void assign(
const char * text_r )
153 { *
_value = _Type( text_r ); }
186 template <
class _Type>
188 {
return AssignerRef(
new Assigner<_Type>( value_r ) ); }
190 template <
class _Tp, _Tp _Initial>
191 inline AssignerRef assigner( DefaultIntegral<_Tp,_Initial> & value_r )
192 {
return AssignerRef(
new Assigner<_Tp>( value_r.get() ) ); }
217 {
_text.push_back( assigner_r ); }
221 {
_attr[attr_r].push_back( assigner_r ); }
236 if ( !
_attr.empty() )
243 if ( !
_text.empty() )
254 void assign(
const std::vector<AssignerRef> & vec_r,
const char * value_r )
257 for_( it, vec_r.begin(), vec_r.end() )
258 (*it)->assign( value_r );
262 std::tr1::unordered_map<std::string, std::vector<AssignerRef> >
_attr;
264 function<void ( const Node & )>
_pre;
265 function<void ( const Node & )>
_post;
289 template <
class _Type>
295 template <
class _Type>
296 Builder(
const std::string & attr_r, _Type & value_r )
301 template <
class _Type>
303 {
_ptr->add( assigner( value_r ) );
return *
this; }
306 template <
class _Type>
308 {
_ptr->add( attr_r, assigner( value_r ) );
return *
this; }
311 Builder & operator<<( function<void ( const Node & )> done_r )
312 {
_ptr->prenotify( done_r );
return *
this; }
316 {
_ptr->postnotify( done_r );
return *
this; }
319 operator shared_ptr<ParseDefConsume> ()
const
359 template <
class _Type>
360 inline parse_def_assign::Builder parseDefAssign( _Type & value_r )
361 {
return parse_def_assign::Builder( value_r ); }
363 template <
class _Type>
364 inline parse_def_assign::Builder parseDefAssign(
const std::string & attr_r, _Type & value_r )
365 {
return parse_def_assign::Builder( attr_r, value_r ); }
374 #endif // ZYPP_PARSER_XML_PARSEDEFCONSUME_H