bool Interest::matchesInterest(const Interest& other) const { return getName() == other.getName() && getCanBePrefix() == other.getCanBePrefix() && getMustBeFresh() == other.getMustBeFresh(); }
shared_ptr<Data> StorageEngineImpl::read(const Interest &interest) { shared_ptr<Data> data; #if HAVE_PERSISTENT_STORAGE bool canBePrefix = interest.getCanBePrefix(); if (canBePrefix) { // extract by prefix match Name prefix = interest.getName(), keyName; auto it = db_->NewIterator(db_namespace::ReadOptions()); std::string key = ""; bool checkMaxSuffixComponents = interest.getMaxSuffixComponents() != -1; bool checkMinSuffixComponents = interest.getMinSuffixComponents() != -1; for (it->Seek(prefix.toUri()); it->Valid() && it->key().starts_with(prefix.toUri()); it->Next()) { if (checkMaxSuffixComponents || checkMinSuffixComponents) { keyName = Name(it->key().ToString()); int nSuffixComponents = keyName.size() - prefix.size(); bool passCheck = false; if (checkMaxSuffixComponents && nSuffixComponents <= interest.getMaxSuffixComponents()) passCheck = true; if (checkMinSuffixComponents && nSuffixComponents >= interest.getMinSuffixComponents()) passCheck = true; if (passCheck) key = it->key().ToString(); } else key = it->key().ToString(); } if (key != "") data = get(Name(key)); delete it; } else data = get(interest.getName()); #endif return data; }