[caching] damage visitor and checker for hint array

This commit is contained in:
Joe Thornber
2013-10-08 10:43:20 +01:00
parent 7da033d5c1
commit ddf5765f9c
2 changed files with 116 additions and 13 deletions

View File

@@ -8,9 +8,43 @@
//----------------------------------------------------------------
namespace caching {
namespace hint_array_detail {
namespace hint_array_damage {
class damage_visitor;
// FIXME: data visitor stuff
class damage {
public:
damage(std::string const &desc)
: desc_(desc) {
}
virtual ~damage() {}
virtual void visit(damage_visitor &v) const = 0;
std::string get_desc() const {
return desc_;
}
private:
std::string desc_;
};
struct missing_hints : public damage {
missing_hints(std::string const desc, run<uint32_t> const &keys);
virtual void visit(damage_visitor &v) const;
run<uint32_t> keys_;
};
class damage_visitor {
public:
virtual ~damage_visitor() {}
virtual void visit(damage const &d) {
d.visit(*this);
}
virtual void visit(missing_hints const &d) = 0;
};
}
class hint_array {
@@ -23,6 +57,7 @@ namespace caching {
unsigned get_nr_entries() const;
void grow(unsigned new_nr_entries, void const *v);
block_address get_root() const;
@@ -30,6 +65,7 @@ namespace caching {
void set_hint(unsigned index, vector<unsigned char> const &data);
void grow(unsigned new_nr_entries, vector<unsigned char> const &value);
void check_hint_array(hint_array_damage::damage_visitor &visitor);
private:
unsigned width_;