#include "xml_format.h" #include using namespace std; using namespace thin_provisioning; namespace tp = thin_provisioning; //---------------------------------------------------------------- namespace { class xml_emitter : public emitter { public: xml_emitter(ostream &out) : out_(out), indent_(0) { } void begin_superblock(string const &uuid, uint64_t time, uint64_t trans_id, uint32_t data_block_size) { indent(); out_ << "" << endl; inc(); } void end_superblock() { dec(); indent(); out_ << "" << endl; } void begin_device(uint32_t dev_id, uint64_t mapped_blocks, uint64_t trans_id, uint64_t creation_time, uint64_t snap_time) { indent(); out_ << "" << endl; inc(); } void end_device() { dec(); indent(); out_ << "" << endl; } void begin_named_mapping(string const &name) { indent(); out_ << "" << endl; inc(); } void end_named_mapping() { dec(); indent(); out_ << "" << endl; } void identifier(string const &name) { indent(); out_ << "" << endl; } void range_map(uint64_t origin_begin, uint64_t data_begin, uint64_t len) { indent(); out_ << "" << endl; } void single_map(uint64_t origin_block, uint64_t data_block) { indent(); out_ << "" << endl; } private: void indent() { for (unsigned i = 0; i < indent_ * 2; i++) out_ << ' '; } void inc() { indent_++; } void dec() { indent_--; } ostream &out_; unsigned indent_; }; } //---------------------------------------------------------------- tp::emitter::ptr tp::create_xml_emitter(ostream &out) { return emitter::ptr(new xml_emitter(out)); } //----------------------------------------------------------------