25 #include <boost/units/quantity.hpp>
26 #include <boost/units/cmath.hpp>
32 namespace astrotypes {
37 :
BaseT(header_label, h)
43 :
BaseT(header_label, h)
50 :
BaseT(header_label, h)
86 stream << std::setprecision(16) << *_var;
104 return *
this ==
reinterpret_cast<HeaderField const&
>(f);
110 return *f.
_var == *_var;
118 :
BaseT(start_label, header)
119 , _item_label_handler(_var)
120 , _end_label(end_label)
121 , _item_label(item_label)
134 :
BaseT(start_label, header)
136 , _item_label_handler(_var)
137 , _end_label(end_label)
138 , _item_label(item_label)
154 return !_var.empty();
169 _vec.emplace_back(v);
177 for(
auto const& var : _var) {
178 stream << _item_label;
179 size += _item_label.size();
183 stream << _end_label;
184 size += _end_label.size();
192 return _item_label.string();
201 if(_var.size() < 4) {
202 for(
auto const& var : _var )
204 stream << sep << var;
209 stream << _var[0] <<
", " << _var[1] <<
", ..., " << _var.back();
211 stream <<
") " << _var.size() <<
" elements";
223 if(h._var.size() != _var.size())
return false;
234 template<
typename T,
typename ToleranceType>
236 :
BaseT(header_label, header)
241 template<
typename T,
typename ToleranceType>
243 :
BaseT(header_label, header, copy)
248 template<
typename T,
typename ToleranceType>
251 static_cast<BaseT&
>(*this) = h;
255 template<
typename T,
typename ToleranceType>
262 template<
typename T2>
263 struct compare_tolerance
265 template<
typename T1>
267 bool exec(T1
const& t1, T2
const& t2) {
272 template<
typename T2>
273 struct compare_tolerance<HeaderField<T2>>
275 template<
typename T1>
277 bool exec(T1
const& t1, HeaderField<T2>
const& t2) {
279 return t1 < static_cast<T2 const&>(t2);
286 template<
typename T,
typename ToleranceType>
291 return compare_tolerance<typename std::decay<ToleranceType>::type>::exec(abs(*this->_var - *h.
_var) , _tolerance);
296 h.
add(header_name, *
this);
301 header.
add_read(header_label, field);
static unsigned write(std::ostream &, T const &var)
write the provided variable to the stream
static unsigned read(std::istream &, T &var)
read form the stream into the variable provided