31 std::transform(names.begin(), names.end(), std::back_inserter(m_names),
32 [] (
const auto& name) { return NamePair{name, {
""}}; });
35 std::vector<NamePrefixList::NamePair>::iterator
36 NamePrefixList::get(
const ndn::Name& name)
38 return std::find_if(m_names.begin(), m_names.end(),
39 [&] (
const NamePrefixList::NamePair& pair) {
40 return name == std::get<NamePrefixList::NamePairIndex::NAME>(pair);
44 std::vector<std::string>::iterator
45 NamePrefixList::getSource(
const std::string& source, std::vector<NamePair>::iterator& entry)
47 return std::find_if(std::get<NamePairIndex::SOURCES>(*entry).begin(),
48 std::get<NamePairIndex::SOURCES>(*entry).end(),
49 [&] (
const std::string& containerSource) {
50 return source == containerSource;
55 NamePrefixList::insert(
const ndn::Name& name,
const std::string& source)
57 auto pairItr = get(name);
58 if (pairItr == m_names.end()) {
59 std::vector<std::string> sources{source};
60 m_names.emplace_back(name, sources);
64 auto& sources = std::get<NamePrefixList::NamePairIndex::SOURCES>(*pairItr);
65 auto sourceItr = getSource(source, pairItr);
66 if (sourceItr == sources.end()) {
67 sources.push_back(source);
75 NamePrefixList::remove(
const ndn::Name& name,
const std::string& source)
77 auto pairItr = get(name);
78 if (pairItr != m_names.end()) {
79 auto& sources = std::get<NamePrefixList::NamePairIndex::SOURCES>(*pairItr);
80 auto sourceItr = getSource(source, pairItr);
81 if (sourceItr != sources.end()) {
82 sources.erase(sourceItr);
83 if (sources.empty()) {
84 m_names.erase(pairItr);
95 return m_names == other.m_names;
99 NamePrefixList::sort()
101 std::sort(m_names.begin(), m_names.end());
105 NamePrefixList::getNames()
const
107 std::list<ndn::Name> names;
108 for (
const auto& namePair : m_names) {
109 names.push_back(std::get<NamePrefixList::NamePairIndex::NAME>(namePair));
115 NamePrefixList::countSources(
const ndn::Name& name)
const
117 return getSources(name).size();
120 const std::vector<std::string>
121 NamePrefixList::getSources(
const ndn::Name& name)
const
123 auto it = std::find_if(m_names.begin(), m_names.end(),
125 return name == std::get<NamePrefixList::NamePairIndex::NAME>(pair);
127 if (it != m_names.end()) {
128 return std::get<NamePrefixList::NamePairIndex::SOURCES>(*it);
138 os <<
"Name prefix list: {\n";
139 for (
const auto& name : list.
getNames()) {
142 for (
const auto& source : list.
getSources(name)) {
143 os <<
" " << source <<
"\n";
146 os <<
"}" << std::endl;
std::tuple< ndn::Name, std::vector< std::string > > NamePair
std::list< ndn::Name > getNames() const
const std::vector< std::string > getSources(const ndn::Name &name) const
Copyright (c) 2014-2020, The University of Memphis, Regents of the University of California.
std::ostream & operator<<(std::ostream &os, const NamePrefixList &list)
bool operator==(const NamePrefixTableEntry &lhs, const NamePrefixTableEntry &rhs)