refine Val "footprint" to equate long strings with multiple objects

This commit is contained in:
Vern Paxson 2024-04-29 12:39:36 -07:00
parent d7e30d9ee2
commit 1f9fa4304d
6 changed files with 20 additions and 1 deletions

View file

@ -855,6 +855,10 @@ StringValPtr StringVal::Replace(RE_Matcher* re, const String& repl, bool do_all)
return make_intrusive<StringVal>(new String(true, result, r - result));
}
unsigned int StringVal::ComputeFootprint(std::unordered_set<const Val*>* analyzed_vals) const {
return 1 /* this object */ + static_cast<unsigned int>(Len()) / sizeof(Val);
}
static std::variant<ValPtr, std::string> BuildVal(const rapidjson::Value& j, const TypePtr& t,
const FuncPtr& key_func) {
auto mismatch_err = [t, &j]() {