coordinate-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-2018, 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_TLV_COORDINATE_LSA_HPP
23 #define NLSR_TLV_COORDINATE_LSA_HPP
24 
25 #include "lsa-info.hpp"
26 
27 #include <ndn-cxx/util/time.hpp>
28 #include <ndn-cxx/encoding/block.hpp>
29 #include <ndn-cxx/encoding/encoding-buffer.hpp>
30 #include <ndn-cxx/encoding/tlv.hpp>
31 #include <ndn-cxx/name.hpp>
32 
33 namespace nlsr {
34 namespace tlv {
35 
47 {
48 public:
49  class Error : public ndn::tlv::Error
50  {
51  public:
52  explicit
53  Error(const std::string& what)
54  : ndn::tlv::Error(what)
55  {
56  }
57  };
58 
59  CoordinateLsa();
60 
61  explicit
62  CoordinateLsa(const ndn::Block& block);
63 
64  const LsaInfo&
65  getLsaInfo() const
66  {
67  return m_lsaInfo;
68  }
69 
71  setLsaInfo(const LsaInfo& lsaInfo)
72  {
73  m_lsaInfo = lsaInfo;
74  m_wire.reset();
75  return *this;
76  }
77 
78  double
80  {
81  return m_hyperbolicRadius;
82  }
83 
85  setHyperbolicRadius(double hyperbolicRadius)
86  {
87  m_hyperbolicRadius = hyperbolicRadius;
88  m_wire.reset();
89  return *this;
90  }
91 
92  const std::vector<double>
94  {
95  return m_hyperbolicAngle;
96  }
97 
99  setHyperbolicAngle(const std::vector<double>& hyperbolicAngle)
100  {
101  m_hyperbolicAngle = hyperbolicAngle;
102  m_wire.reset();
103  return *this;
104  }
105 
115  template<ndn::encoding::Tag TAG>
116  size_t
117  wireEncode(ndn::EncodingImpl<TAG>& block) const;
118 
127  const ndn::Block&
128  wireEncode() const;
129 
133  void
134  wireDecode(const ndn::Block& wire);
135 
136 private:
137  LsaInfo m_lsaInfo;
138  double m_hyperbolicRadius;
139  std::vector<double> m_hyperbolicAngle;
140 
141  mutable ndn::Block m_wire;
142 };
143 
145 
146 std::ostream&
147 operator<<(std::ostream& os, const CoordinateLsa& coordinateLsa);
148 
149 } // namespace tlv
150 } // namespace nlsr
151 
152 #endif // NLSR_TLV_COORDINATE_LSA_HPP
Copyright (c) 2014-2018, The University of Memphis, Regents of the University of California, Arizona Board of Regents.
Definition: tlv-nlsr.hpp:28
CoordinateLsa & setHyperbolicAngle(const std::vector< double > &hyperbolicAngle)
const LsaInfo & getLsaInfo() const
Data abstraction for CoordinateLsa.
CoordinateLsa & setHyperbolicRadius(double hyperbolicRadius)
const ndn::Block & wireEncode() const
Create a TLV encoding of this object.
Error(const std::string &what)
const std::vector< double > getHyperbolicAngle() const
Data abstraction for LsaInfo.
Definition: lsa-info.hpp:47
Copyright (c) 2014-2018, The University of Memphis, Regents of the University of California, Arizona Board of Regents.
double getHyperbolicRadius() const
std::ostream & operator<<(std::ostream &os, const AdjacencyLsa &adjacencyLsa)
void wireDecode(const ndn::Block &wire)
Populate this object by decoding the one contained in the given block.
CoordinateLsa & setLsaInfo(const LsaInfo &lsaInfo)
NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(AdjacencyLsa)