adj-lsa.hpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2014-2024, The University of Memphis,
4  * Regents of the University of California,
5  * Arizona Board of Regents.
6  *
7  * This file is part of NLSR (Named-data Link State Routing).
8  * See AUTHORS.md for complete list of NLSR authors and contributors.
9  *
10  * NLSR is free software: you can redistribute it and/or modify it under the terms
11  * of the GNU General Public License as published by the Free Software Foundation,
12  * either version 3 of the License, or (at your option) any later version.
13  *
14  * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
15  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16  * PURPOSE. See the GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along with
19  * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef NLSR_LSA_ADJ_LSA_HPP
23 #define NLSR_LSA_ADJ_LSA_HPP
24 
25 #include "lsa.hpp"
26 #include "adjacent.hpp"
27 #include "adjacency-list.hpp"
28 
29 #include <boost/operators.hpp>
30 
31 namespace nlsr {
32 
43 class AdjLsa : public Lsa, private boost::equality_comparable<AdjLsa>
44 {
45 public:
47 
48  AdjLsa() = default;
49 
50  AdjLsa(const ndn::Name& originR, uint64_t seqNo,
51  const ndn::time::system_clock::time_point& timepoint, AdjacencyList& adl);
52 
53  explicit
54  AdjLsa(const ndn::Block& block);
55 
56  Lsa::Type
57  getType() const override
58  {
59  return type();
60  }
61 
62  static constexpr Lsa::Type
63  type()
64  {
65  return Lsa::Type::ADJACENCY;
66  }
67 
68  const AdjacencyList&
69  getAdl() const
70  {
71  return m_adl;
72  }
73 
74  void
76  {
77  m_wire.reset();
78  m_adl.reset();
79  }
80 
81  void
82  addAdjacent(const Adjacent& adj)
83  {
84  m_wire.reset();
85  m_adl.insert(adj);
86  }
87 
89  begin() const
90  {
91  return m_adl.begin();
92  }
93 
95  end() const
96  {
97  return m_adl.end();
98  }
99 
100  template<ndn::encoding::Tag TAG>
101  size_t
102  wireEncode(ndn::EncodingImpl<TAG>& block) const;
103 
104  const ndn::Block&
105  wireEncode() const override;
106 
107  void
108  wireDecode(const ndn::Block& wire);
109 
110  std::tuple<bool, std::list<ndn::Name>, std::list<ndn::Name>>
111  update(const std::shared_ptr<Lsa>& lsa) override;
112 
113 private:
114  void
115  print(std::ostream& os) const override;
116 
117 private: // non-member operators
118  // NOTE: the following "hidden friend" operators are available via
119  // argument-dependent lookup only and must be defined inline.
120  // boost::equality_comparable provides != operator.
121 
122  friend bool
123  operator==(const AdjLsa& lhs, const AdjLsa& rhs)
124  {
125  return lhs.m_adl == rhs.m_adl;
126  }
127 
129  AdjacencyList m_adl;
130 };
131 
133 
134 } // namespace nlsr
135 
136 #endif // NLSR_LSA_ADJ_LSA_HPP
Represents an LSA of adjacencies of the origin router in link-state mode.
Definition: adj-lsa.hpp:44
const_iterator begin() const
Definition: adj-lsa.hpp:89
std::tuple< bool, std::list< ndn::Name >, std::list< ndn::Name > > update(const std::shared_ptr< Lsa > &lsa) override
Definition: adj-lsa.cpp:130
AdjLsa()=default
const ndn::Block & wireEncode() const override
Definition: adj-lsa.cpp:65
friend bool operator==(const AdjLsa &lhs, const AdjLsa &rhs)
Definition: adj-lsa.hpp:123
void wireDecode(const ndn::Block &wire)
Definition: adj-lsa.cpp:83
const_iterator end() const
Definition: adj-lsa.hpp:95
AdjacencyList::const_iterator const_iterator
Definition: adj-lsa.hpp:46
Lsa::Type getType() const override
Definition: adj-lsa.hpp:57
static constexpr Lsa::Type type()
Definition: adj-lsa.hpp:63
void resetAdl()
Definition: adj-lsa.hpp:75
const AdjacencyList & getAdl() const
Definition: adj-lsa.hpp:69
void addAdjacent(const Adjacent &adj)
Definition: adj-lsa.hpp:82
std::list< Adjacent >::const_iterator const_iterator
const_iterator begin() const
bool insert(const Adjacent &adjacent)
const_iterator end() const
A neighbor reachable over a Face.
Definition: adjacent.hpp:47
Represents a Link State Announcement (LSA).
Definition: lsa.hpp:46
ndn::Block m_wire
Definition: lsa.hpp:142
Copyright (c) 2014-2020, The University of Memphis, Regents of the University of California.
NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(Adjacent)
#define PUBLIC_WITH_TESTS_ELSE_PRIVATE