#include <dumper.hh>
Inheritance diagram for lestes::std::readable_dumper:

Public Types | |
| typedef set< srp< object > > | set_type |
Public Member Functions | |
| virtual void | visit_object (ptr< object > o) |
| virtual void | visit_nodump () |
| virtual void | visit_lint (lint i) |
| virtual void | visit_ulint (ulint i) |
| virtual void | visit_bool (bool i) |
| virtual void | visit_lstring (const lstring &i) |
| virtual void | visit_ucn_string (const ucn_string &i) |
Static Public Member Functions | |
| ::std::ostream & | dump (::std::ostream &output_to, ptr< object > start_at, bool respect_barriers=true) |
| Dumps every instance reachable from start_at to given ostream. Returns given ostream. | |
Protected Member Functions | |
| void | gc_mark () |
| Marks the keystone. | |
| void | follow (ptr< object > o) |
| readable_dumper (::std::ostream &a_stream, bool a_respect_barriers) | |
Private Attributes | |
| srp< set_type > | visited |
| ::std::ostream & | stream |
| ulint | uid |
| uid, set to zero on creation, only set on demand in uid_get | |
| const bool | respect_barriers |
| should the dumper respect barriers (see object::dump_barrier) | |
| bool | after_barrier |
Definition at line 74 of file dumper.hh.
| typedef set< srp<object> > lestes::std::readable_dumper::set_type |
| lestes::std::readable_dumper::readable_dumper | ( | ::std::ostream & | a_stream, | |
| bool | a_respect_barriers | |||
| ) | [protected] |
Definition at line 315 of file dumper.cc.
Referenced by dump().
00316 : dumper_visitor(), stream(a_stream), respect_barriers(a_respect_barriers) 00317 {}
| std::ostream & lestes::std::readable_dumper::dump | ( | ::std::ostream & | output_to, | |
| ptr< object > | start_at, | |||
| bool | respect_barriers = true | |||
| ) | [static] |
Dumps every instance reachable from start_at to given ostream. Returns given ostream.
Definition at line 231 of file dumper.cc.
References lestes::std::set< Key, Compare >::create(), and readable_dumper().
00233 { 00234 ptr<readable_dumper> instance = 00235 new readable_dumper( output_to, respect_barriers ); 00236 instance->visited = set_type::create(); 00237 instance->after_barrier = false; 00238 if (start_at) { 00239 output_to << "<dump>" << endl; 00240 start_at->accept_dumper_visitor(instance); 00241 output_to << "</dump>" << endl; 00242 } else 00243 output_to << "<null />" << endl; 00244 return output_to; 00245 }
Implements lestes::std::dumper_visitor.
Definition at line 319 of file dumper.cc.
References after_barrier, follow(), and stream.
00320 { 00321 if (after_barrier) 00322 stream << "<after-barrier />" << endl; 00323 else 00324 follow(o); 00325 }
| void lestes::std::readable_dumper::visit_nodump | ( | ) | [virtual] |
Implements lestes::std::dumper_visitor.
Definition at line 327 of file dumper.cc.
References stream.
00328 { 00329 stream << "<nondumpable />" << endl; 00330 }
| void lestes::std::readable_dumper::visit_lint | ( | lint | i | ) | [virtual] |
Implements lestes::std::dumper_visitor.
Definition at line 332 of file dumper.cc.
References stream.
00333 { 00334 stream << "<lint>" << i << "</lint>" << endl; 00335 }
| void lestes::std::readable_dumper::visit_ulint | ( | ulint | i | ) | [virtual] |
Implements lestes::std::dumper_visitor.
Definition at line 337 of file dumper.cc.
References stream.
00338 { 00339 stream << "<ulint>" << i << "</ulint>" << endl; 00340 }
| void lestes::std::readable_dumper::visit_bool | ( | bool | i | ) | [virtual] |
Implements lestes::std::dumper_visitor.
Definition at line 342 of file dumper.cc.
References stream.
00343 { 00344 // ostream does not seem to support bool, it would cast to int or something 00345 stream << "<bool>" << (i ? "true" : "false") << "</bool>" << endl; 00346 }
| void lestes::std::readable_dumper::visit_lstring | ( | const lstring & | i | ) | [virtual] |
Implements lestes::std::dumper_visitor.
Definition at line 348 of file dumper.cc.
References stream.
00349 { 00350 lstring tmp(i); 00351 lstring sought("<>&"); 00352 lstring lt("<"); 00353 lstring gt(">"); 00354 lstring amp("&"); 00355 lstring::size_type mark = tmp.find_first_of(sought); 00356 if (mark != lstring::npos) 00357 do { 00358 switch (tmp[mark]) { 00359 case '<': 00360 tmp.replace(mark, 1, lt); 00361 break; 00362 case '>': 00363 tmp.replace(mark, 1, gt); 00364 break; 00365 case '&': 00366 tmp.replace(mark, 1, amp); 00367 break; 00368 } 00369 } while ((mark = tmp.find_first_of(sought, mark+1)) != lstring::npos); 00370 stream << "<lstring>" << tmp << "</lstring>" << endl; 00371 }
| void lestes::std::readable_dumper::visit_ucn_string | ( | const ucn_string & | i | ) | [virtual] |
Implements lestes::std::dumper_visitor.
Definition at line 373 of file dumper.cc.
References stream.
00374 { 00375 ucn_string tmp(i); 00376 ucn_string sought("\x3c\x3e\x26"); 00377 ucn_string lt("\x26\x6c\x74\x3b"); 00378 ucn_string gt("\x26\x67\x74\x3b"); 00379 ucn_string amp("\x26\x61\x6d\x70\x3b"); 00380 ucn_string::size_type mark = tmp.find_first_of(sought); 00381 if (mark != ucn_string::npos) 00382 do { 00383 switch (tmp[mark]) { 00384 case 0x3c: 00385 tmp.replace(mark, 1, lt); 00386 break; 00387 case 0x3e: 00388 tmp.replace(mark, 1, gt); 00389 break; 00390 case 0x26: 00391 tmp.replace(mark, 1, amp); 00392 break; 00393 } 00394 } while ((mark = tmp.find_first_of(sought, mark+1)) != ucn_string::npos); 00395 stream << "<ucn_string>" << tmp << "</ucn_string>" << endl; 00396 }
| void lestes::std::readable_dumper::gc_mark | ( | void | ) | [protected, virtual] |
Marks the keystone.
Marks all directly reachable parts of the class. The method must be overriden for each inherited class. It should contain abc.gc_mark() for each field abc of the inherited class and call to gc_mark() of the direct ancestor of the class. Does nothing for keystone, only stops processing of ancestors.
Reimplemented from lestes::std::mem::keystone.
Definition at line 247 of file dumper.cc.
References lestes::std::mem::keystone::gc_mark(), lestes::std::mem::simple_pointer::gc_mark(), and visited.
00248 { 00249 visited.gc_mark(); 00250 dumper_visitor::gc_mark(); 00251 }
Definition at line 253 of file dumper.cc.
References after_barrier, lassert, respect_barriers, stream, and visited.
Referenced by visit_object().
00254 { 00255 ptr<reflection_list> refls = o->reflection_get(); 00256 lassert( refls ); 00257 00258 bool already_visited = !(visited->insert(o).second); 00259 if (already_visited) { 00260 stream << '<' << refls->back()->name_get() << 00261 " idref=\"i_" << o->uid_get() << "\" />" << endl; 00262 return; 00263 } 00264 stream << '<' << refls->back()->name_get() << " id=\"i_" << o->uid_get() << "\">" << endl; 00265 00266 bool at_barrier = o->dump_barrier_get(); 00267 00268 ptr<field_list_list> fields = o->field_values_get(); 00269 field_list_list::iterator field_it = fields->begin(); 00270 for ( reflection_list::iterator refl_it = refls->begin(); 00271 refl_it != refls->end(); ++refl_it ) { 00272 00273 ptr<class_reflection::field_metadata_list> metadata = 00274 (*refl_it)->field_metadata_get(); 00275 00276 for (class_reflection::field_metadata_list::iterator 00277 meta_it = metadata->begin(); 00278 meta_it != metadata->end(); 00279 ++meta_it, ++field_it ) { 00280 00281 // we must not run out of fields 00282 lassert( field_it != fields->end() ); 00283 00284 ulint item_no = 0; 00285 bool do_append_no = (*field_it)->size() > 1; 00286 for (value_list::iterator val_it = (*field_it)->begin(); 00287 val_it != (*field_it)->end(); ++val_it, ++item_no ) { 00288 stream << '<' << (*meta_it)->first; 00289 if (do_append_no) 00290 stream << item_no; 00291 stream << " type=\"" << (*meta_it)->second << "\"" 00292 " origin=\"" << (*refl_it)->name_get() << "\">" << 00293 endl; 00294 if (*val_it) { 00295 if (respect_barriers && at_barrier) 00296 after_barrier = true; 00297 (*val_it)->accept_dumper_visitor(this); 00298 after_barrier = false; 00299 } else 00300 stream << "<null />" << endl; 00301 stream << "</" << (*meta_it)->first; 00302 if (do_append_no) 00303 stream << item_no; 00304 stream << '>' << endl; 00305 } 00306 } 00307 } 00308 00309 // just an assert: there should not be any value lists left 00310 lassert( field_it == fields->end() ); 00311 00312 stream << "</" << refls->back()->name_get() << '>' << endl; 00313 }
srp<set_type> lestes::std::readable_dumper::visited [private] |
::std::ostream& lestes::std::readable_dumper::stream [private] |
Definition at line 95 of file dumper.hh.
Referenced by follow(), visit_bool(), visit_lint(), visit_lstring(), visit_nodump(), visit_object(), visit_ucn_string(), and visit_ulint().
ulint lestes::std::readable_dumper::uid [private] |
const bool lestes::std::readable_dumper::respect_barriers [private] |
should the dumper respect barriers (see object::dump_barrier)
Definition at line 98 of file dumper.hh.
Referenced by follow().
bool lestes::std::readable_dumper::after_barrier [private] |
1.5.1-20070107