25 #include <boost/lexical_cast.hpp>
30 const ndn::time::system_clock::TimePoint& timepoint,
31 double radius, std::vector<double> angles)
32 :
Lsa(originRouter, seqNo, timepoint)
33 , m_hyperbolicRadius(radius)
34 , m_hyperbolicAngles(angles)
46 if (clsa.
getCorTheta().size() != m_hyperbolicAngles.size()) {
51 for (
unsigned int i = 0; i < clsa.
getCorTheta().size(); i++) {
52 if (std::abs(m_hyperbolicAngles[i] - m_angles2[i]) > std::numeric_limits<double>::epsilon()) {
57 return (std::abs(m_hyperbolicRadius - clsa.
getCorRadius()) <
58 std::numeric_limits<double>::epsilon());
61 template<ndn::encoding::Tag TAG>
65 size_t totalLength = 0;
67 for (
auto it = m_hyperbolicAngles.rbegin(); it != m_hyperbolicAngles.rend(); ++it) {
76 totalLength += block.prependVarNumber(totalLength);
91 ndn::EncodingEstimator estimator;
94 ndn::EncodingBuffer buffer(estimatedSize, 0);
113 auto val =
m_wire.elements_begin();
120 NDN_THROW(
Error(
"Missing required Lsa field"));
124 m_hyperbolicRadius = ndn::encoding::readDouble(*val);
128 NDN_THROW(
Error(
"Missing required HyperbolicRadius field"));
131 std::vector<double> angles;
132 for (; val !=
m_wire.elements_end(); ++val) {
134 angles.push_back(ndn::encoding::readDouble(*val));
137 NDN_THROW(
Error(
"Missing required HyperbolicAngle field"));
140 m_hyperbolicAngles = angles;
146 std::ostringstream os;
148 os <<
" Hyperbolic Radius : " << m_hyperbolicRadius <<
"\n";
150 for (
const auto& value : m_hyperbolicAngles) {
151 os <<
" Hyperbolic Theta " << i++ <<
" : " << value <<
"\n";
Data abstraction for CoordinateLsa CoordinateLsa := COORDINATE-LSA-TYPE TLV-LENGTH Lsa HyperbolicRadi...
const ndn::Block & wireEncode() const override
double getCorRadius() const
void wireDecode(const ndn::Block &wire)
const std::vector< double > getCorTheta() const
bool isEqualContent(const CoordinateLsa &clsa) const
std::string toString() const override
Data abstraction for Lsa Lsa := LSA-TYPE TLV-LENGTH Name SequenceNumber ExpirationTimePoint.
virtual const ndn::Block & wireEncode() const =0
virtual std::string toString() const
void wireDecode(const ndn::Block &wire)
Copyright (c) 2014-2020, The University of Memphis, Regents of the University of California,...
std::ostream & operator<<(std::ostream &os, const Adjacent &adjacent)
NDN_CXX_DEFINE_WIRE_ENCODE_INSTANTIATIONS(Adjacent)