std::ostream& operator<<(std::ostream& os, const Name& name) { if (name.empty()) { os << "/"; } else { for (Name::const_iterator i = name.begin(); i != name.end(); i++) { os << "/"; i->toUri(os); } } return os; }
// Interface of different hash functions size_t computeHash(const Name& prefix) { prefix.wireEncode(); // guarantees prefix's wire buffer is not empty size_t hashValue = 0; size_t hashUpdate = 0; for (Name::const_iterator it = prefix.begin(); it != prefix.end(); it++) { const char* wireFormat = reinterpret_cast<const char*>( it->wire() ); hashUpdate = CityHash::compute(wireFormat, it->size()); hashValue ^= hashUpdate; } return hashValue; }
shared_ptr<RegexTopMatcher> RegexTopMatcher::fromName(const Name& name, bool hasAnchor) { std::string regexStr("^"); for (Name::const_iterator it = name.begin(); it != name.end(); it++) { regexStr.append("<"); regexStr.append(convertSpecialChar(it->toUri())); regexStr.append(">"); } if (hasAnchor) regexStr.append("$"); // On OSX 10.9, boost, and C++03 the following doesn't work without ndn:: // because the argument-dependent lookup prefers STL to boost return ndn::make_shared<RegexTopMatcher>(regexStr); }
bool SecRuleRelative::compare(const Name & dataName, const Name & signerName) { if((dataName == signerName) && ("==" == m_op || ">=" == m_op)) return true; Name::const_iterator i = dataName.begin (); Name::const_iterator j = signerName.begin (); for (; i != dataName.end () && j != signerName.end (); i++, j++) { if ((i->compare(*j)) == 0) continue; else return false; } if(i == dataName.end()) return false; else return true; }