void filterData(const std::string& filterExpr, Reader& reader) { Gto::Reader::Properties& properties = reader.properties(); Gto::Reader::Objects& objects = reader.objects(); for (size_t i=0; i < properties.size(); i++) { Gto::Reader::PropertyInfo& p = properties[i]; const Gto::Reader::ComponentInfo* c = p.component; const Gto::Reader::ObjectInfo* o = c->object; string name; name = reader.stringFromId(o->name); name += "."; name += reader.stringFromId(c->name); name += "."; name += reader.stringFromId(p.name); if (!fnmatch(filterExpr.c_str(), name.c_str(), 0)) { filteredProperties.insert(&p); filteredObjects.insert(o); } } for (size_t i=0; i < objects.size(); i++) { Gto::Reader::ObjectInfo* p = &objects[i]; if (filteredObjects.find(p) != filteredObjects.end()) { reader.accessObject(*p); } } }