[cache_dump/restore] add discards to the xml format
This commit is contained in:
parent
5dbaf8371c
commit
6b6f2290a7
@ -37,6 +37,12 @@ namespace caching {
|
|||||||
|
|
||||||
virtual void hint(pd::block_address cblock,
|
virtual void hint(pd::block_address cblock,
|
||||||
std::vector<unsigned char> const &data) = 0;
|
std::vector<unsigned char> const &data) = 0;
|
||||||
|
|
||||||
|
virtual void begin_discards() = 0;
|
||||||
|
virtual void end_discards() = 0;
|
||||||
|
|
||||||
|
virtual void discard(pd::block_address dblock_begin,
|
||||||
|
pd::block_address dblock_end) = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +78,22 @@ namespace {
|
|||||||
|
|
||||||
virtual void hint(pd::block_address cblock,
|
virtual void hint(pd::block_address cblock,
|
||||||
vector<unsigned char> const &data) {
|
vector<unsigned char> const &data) {
|
||||||
|
md_->hints_->set_hint(cblock, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void begin_discards() {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void end_discards() {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void discard(block_address dblock, block_address dblock_e) {
|
||||||
|
while (dblock != dblock_e) {
|
||||||
|
md_->discard_bits_->set(dblock, true);
|
||||||
|
dblock++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -88,6 +88,24 @@ namespace {
|
|||||||
<< "/>" << endl;
|
<< "/>" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void begin_discards() {
|
||||||
|
indent();
|
||||||
|
out_ << "<discards>" << endl;
|
||||||
|
inc();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void end_discards() {
|
||||||
|
dec();
|
||||||
|
indent();
|
||||||
|
out_ << "</discards>" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void discard(block_address dblock_b, block_address dblock_e) {
|
||||||
|
indent();
|
||||||
|
out_ << "<discard dbegin=\"" << dblock_b << "\""
|
||||||
|
<< " dend=\"" << dblock_e << "\"/>" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
string as_truth(bool v) const {
|
string as_truth(bool v) const {
|
||||||
return v ? "true" : "false";
|
return v ? "true" : "false";
|
||||||
@ -196,6 +214,12 @@ namespace {
|
|||||||
e->hint(cblock, get<vector<unsigned char> >(doe));
|
e->hint(cblock, get<vector<unsigned char> >(doe));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: why passing e by ptr?
|
||||||
|
void parse_discard(emitter *e, attributes const &attr) {
|
||||||
|
e->discard(get_attr<uint64_t>(attr, "dbegin"),
|
||||||
|
get_attr<uint64_t>(attr, "dend"));
|
||||||
|
}
|
||||||
|
|
||||||
void start_tag(void *data, char const *el, char const **attr) {
|
void start_tag(void *data, char const *el, char const **attr) {
|
||||||
emitter *e = static_cast<emitter *>(data);
|
emitter *e = static_cast<emitter *>(data);
|
||||||
attributes a;
|
attributes a;
|
||||||
@ -217,6 +241,12 @@ namespace {
|
|||||||
else if (!strcmp(el, "hint"))
|
else if (!strcmp(el, "hint"))
|
||||||
parse_hint(e, a);
|
parse_hint(e, a);
|
||||||
|
|
||||||
|
else if (!strcmp(el, "discards"))
|
||||||
|
e->begin_discards();
|
||||||
|
|
||||||
|
else if (!strcmp(el, "discard"))
|
||||||
|
parse_discard(e, a);
|
||||||
|
|
||||||
else
|
else
|
||||||
throw runtime_error("unknown tag type");
|
throw runtime_error("unknown tag type");
|
||||||
}
|
}
|
||||||
@ -241,6 +271,13 @@ namespace {
|
|||||||
// do nothing
|
// do nothing
|
||||||
;
|
;
|
||||||
|
|
||||||
|
else if (!strcmp(el, "discards"))
|
||||||
|
e->end_discards();
|
||||||
|
|
||||||
|
else if (!strcmp(el, "discard"))
|
||||||
|
// do nothing
|
||||||
|
;
|
||||||
|
|
||||||
else
|
else
|
||||||
throw runtime_error("unknown tag close");
|
throw runtime_error("unknown tag close");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user