diff --git a/caching/hint_array.cc b/caching/hint_array.cc index f0cdddf..0c6c39d 100644 --- a/caching/hint_array.cc +++ b/caching/hint_array.cc @@ -106,6 +106,29 @@ namespace { switch (width) { #define xx(n) case n: return set_hint(base, index, data) all_widths +#undef xx + } + } + + //-------------------------------- + + template + void grow(shared_ptr base, unsigned new_nr_entries, vector const &value) { + typedef hint_traits traits; + typedef array ha; + + shared_ptr a = dynamic_pointer_cast(base); + if (!a) + throw runtime_error("internal error: couldn't cast hint array"); + a->grow(new_nr_entries, value); + } + + void grow_(uint32_t width, shared_ptr base, + unsigned new_nr_entries, vector const &value) + { + switch (width) { +#define xx(n) case n: return grow(base, new_nr_entries, value) + all_widths #undef xx } } @@ -144,4 +167,10 @@ hint_array::set_hint(unsigned index, vector const &data) set_hint_(width_, impl_, index, data); } +void +hint_array::grow(unsigned new_nr_entries, vector const &value) +{ + grow_(width_, impl_, new_nr_entries, value); +} + //---------------------------------------------------------------- diff --git a/caching/hint_array.h b/caching/hint_array.h index dab0613..dd8d2a5 100644 --- a/caching/hint_array.h +++ b/caching/hint_array.h @@ -47,6 +47,8 @@ namespace caching { void get_hint(unsigned index, vector &data) const; void set_hint(unsigned index, vector const &data); + void grow(unsigned new_nr_entries, vector const &value); + private: unsigned width_; boost::shared_ptr impl_;