lsdb-status.hpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
22 #ifndef NLSR_TLV_LSDB_STATUS_HPP
23 #define NLSR_TLV_LSDB_STATUS_HPP
24 
25 #include "adjacency-lsa.hpp"
26 #include "coordinate-lsa.hpp"
27 #include "name-lsa.hpp"
28 
29 #include <ndn-cxx/util/time.hpp>
30 #include <ndn-cxx/encoding/block.hpp>
31 #include <ndn-cxx/encoding/encoding-buffer.hpp>
32 #include <ndn-cxx/encoding/tlv.hpp>
33 #include <ndn-cxx/name.hpp>
34 
35 #include <list>
36 
37 namespace nlsr {
38 namespace tlv {
39 
51 {
52 public:
53  class Error : public ndn::tlv::Error
54  {
55  public:
56  explicit
57  Error(const std::string& what)
58  : ndn::tlv::Error(what)
59  {
60  }
61  };
62 
63  typedef std::list<AdjacencyLsa> AdjacencyLsaList;
64  typedef std::list<CoordinateLsa> CoordinateLsaList;
65  typedef std::list<NameLsa> NameLsaList;
66 
67  LsdbStatus();
68 
69  explicit
70  LsdbStatus(const ndn::Block& block);
71 
72  const std::list<AdjacencyLsa>&
74  {
75  return m_adjacencyLsas;
76  }
77 
78  LsdbStatus&
79  addAdjacencyLsa(const AdjacencyLsa& adjacencyLsa)
80  {
81  m_adjacencyLsas.push_back(adjacencyLsa);
82  m_wire.reset();
83  m_hasAdjacencyLsas = true;
84  return *this;
85  }
86 
87  LsdbStatus&
89  {
90  m_adjacencyLsas.clear();
91  m_hasAdjacencyLsas = false;
92  return *this;
93  }
94 
95  bool
97  {
98  return m_hasAdjacencyLsas;
99  }
100 
101  const std::list<CoordinateLsa>&
103  {
104  return m_coordinateLsas;
105  }
106 
107  LsdbStatus&
108  addCoordinateLsa(const CoordinateLsa& coordinateLsa)
109  {
110  m_coordinateLsas.push_back(coordinateLsa);
111  m_wire.reset();
112  m_hasCoordinateLsas = true;
113  return *this;
114  }
115 
116  LsdbStatus&
118  {
119  m_coordinateLsas.clear();
120  m_hasCoordinateLsas = false;
121  return *this;
122  }
123 
124  bool
126  {
127  return m_hasCoordinateLsas;
128  }
129 
130  const std::list<NameLsa>&
131  getNameLsas() const
132  {
133  return m_nameLsas;
134  }
135 
136  LsdbStatus&
137  addNameLsa(const NameLsa& nameLsa)
138  {
139  m_nameLsas.push_back(nameLsa);
140  m_wire.reset();
141  m_hasNameLsas = true;
142  return *this;
143  }
144 
145  LsdbStatus&
147  {
148  m_nameLsas.clear();
149  m_hasNameLsas = false;
150  return *this;
151  }
152 
153  bool
155  {
156  return m_hasNameLsas;
157  }
158 
169  template<ndn::encoding::Tag TAG>
170  size_t
171  wireEncode(ndn::EncodingImpl<TAG>& block) const;
172 
181  const ndn::Block&
182  wireEncode() const;
183 
187  void
188  wireDecode(const ndn::Block& wire);
189 
190 private:
191  AdjacencyLsaList m_adjacencyLsas;
192  CoordinateLsaList m_coordinateLsas;
193  NameLsaList m_nameLsas;
194 
195  bool m_hasAdjacencyLsas;
196  bool m_hasCoordinateLsas;
197  bool m_hasNameLsas;
198 
199  mutable ndn::Block m_wire;
200 };
201 
202 std::ostream&
203 operator<<(std::ostream& os, const LsdbStatus& lsdbStatus);
204 
205 } // namespace tlv
206 } // namespace nlsr
207 
208 #endif // NLSR_TLV_LSDB_STATUS_HPP
LsdbStatus & clearCoordinateLsas()
std::list< AdjacencyLsa > AdjacencyLsaList
Definition: lsdb-status.hpp:63
Copyright (c) 2014-2017, The University of Memphis, Regents of the University of California, Arizona Board of Regents.
Definition: tlv-nlsr.hpp:27
LsdbStatus & addNameLsa(const NameLsa &nameLsa)
void wireDecode(const ndn::Block &wire)
Populate this object by decoding the one contained in the given block.
const std::list< CoordinateLsa > & getCoordinateLsas() const
Data abstraction for CoordinateLsa.
const ndn::Block & wireEncode() const
Create a TLV encoding of this object.
Definition: lsdb-status.cpp:82
LsdbStatus & clearNameLsas()
LsdbStatus & clearAdjacencyLsas()
Definition: lsdb-status.hpp:88
std::list< NameLsa > NameLsaList
Definition: lsdb-status.hpp:65
LsdbStatus & addAdjacencyLsa(const AdjacencyLsa &adjacencyLsa)
Definition: lsdb-status.hpp:79
Data abstraction for NameLsa.
Definition: name-lsa.hpp:47
std::list< CoordinateLsa > CoordinateLsaList
Definition: lsdb-status.hpp:64
const std::list< AdjacencyLsa > & getAdjacencyLsas() const
Definition: lsdb-status.hpp:73
Copyright (c) 2014-2017, The University of Memphis, Regents of the University of California, Arizona Board of Regents.
LsdbStatus & addCoordinateLsa(const CoordinateLsa &coordinateLsa)
Data abstraction for AdjacencyLsa.
Data abstraction for LsdbStatus.
Definition: lsdb-status.hpp:50
std::ostream & operator<<(std::ostream &os, const AdjacencyLsa &adjacencyLsa)
const std::list< NameLsa > & getNameLsas() const
Error(const std::string &what)
Definition: lsdb-status.hpp:57