diff --git a/include/xo/expression2/StringTable.hpp b/include/xo/expression2/StringTable.hpp index b55c48ee..8d0354c8 100644 --- a/include/xo/expression2/StringTable.hpp +++ b/include/xo/expression2/StringTable.hpp @@ -21,7 +21,7 @@ namespace xo { class StringTable { public: using DArena = xo::mm::DArena; - using MemorySizeInfo = xo::mm::MemorySizeInfo; + using MemorySizeVisitor = xo::mm::MemorySizeVisitor; using StringMap = xo::map::DArenaHashMap; using size_type = StringMap::size_type; @@ -46,8 +46,8 @@ namespace xo { **/ bool verify_ok(verify_policy p = verify_policy::throw_only()) const; - std::size_t _n_store() const noexcept; - MemorySizeInfo _store_info(std::size_t i) const noexcept; + /** visit string-table memory pools, call visitor(info) for each **/ + void visit_pools(const MemorySizeVisitor & visitor) const; private: /** allocate string storage in this arena; use DString to represent each string. diff --git a/src/expression2/StringTable.cpp b/src/expression2/StringTable.cpp index 79a17067..174c9e9f 100644 --- a/src/expression2/StringTable.cpp +++ b/src/expression2/StringTable.cpp @@ -160,22 +160,11 @@ namespace xo { return true; } - std::size_t - StringTable::_n_store() const noexcept + void + StringTable::visit_pools(const MemorySizeVisitor & visitor) const { - return 1 + map_._n_store(); - } - - MemorySizeInfo - StringTable::_store_info(std::size_t i) const noexcept - { - if (i == 0) - return strings_._store_info(); - - if (i+1 < map_._n_store()) - return map_._store_info(i-1); - - return MemorySizeInfo::sentinel(); + strings_.visit_pools(visitor); + map_.visit_pools(visitor); } } /*namespace scm*/