#include "dbg-lib/block_dumper.h" #include "dbg-lib/output_formatter.h" #include "persistent-data/data-structures/array_block.h" //---------------------------------------------------------------- namespace dbg { using persistent_data::block_manager; using persistent_data::array_block; template class array_block_dumper : public block_dumper { public: array_block_dumper(typename ShowTraits::value_trait::ref_counter rc) : rc_(rc) { } virtual void show(block_manager::read_ref &rr, std::ostream &out) { rblock b(rr, rc_); show_array_entries(b, out); } private: typedef array_block rblock; void show_array_entries(rblock const& b, std::ostream &out) { formatter::ptr f = create_xml_formatter(); uint32_t nr_entries = b.nr_entries(); field(*f, "max_entries", b.max_entries()); field(*f, "nr_entries", nr_entries); field(*f, "value_size", b.value_size()); for (unsigned i = 0; i < nr_entries; i++) { formatter::ptr f2 = create_xml_formatter(); ShowTraits::show(f2, "value", b.get(i)); f->child(boost::lexical_cast(i), f2); } f->output(out, 0); } typename ShowTraits::value_trait::ref_counter rc_; }; template block_dumper::ptr create_array_block_dumper(typename ShowTraits::value_trait::ref_counter rc) { return block_dumper::ptr(new array_block_dumper(rc)); } } //----------------------------------------------------------------