#include namespace erebos { static void findPropertyObjects(vector> & candidates, const Stored & obj, const string & prop) { if (auto rec = obj->asRecord()) { if (rec->item(prop)) { candidates.push_back(obj); } else { for (const auto & r : obj.ref().previous()) findPropertyObjects(candidates, Stored::load(r), prop); } } } vector> findPropertyObjects(const vector> & leaves, const string & prop) { vector> candidates; for (const auto & obj : leaves) findPropertyObjects(candidates, obj, prop); filterAncestors(candidates); return candidates; } }