[caching] damage visitor and checker for hint array
This commit is contained in:
@@ -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_;
|
||||
|
||||
Reference in New Issue
Block a user