b2api
B2000++ API Reference Manual, VERSION 4.6
 
Loading...
Searching...
No Matches
b2rtable.H
1//------------------------------------------------------------------------
2// b2rtable.H --
3//
4// written by Mathias Doreille, Thomas Ludwig, Silvio Merazzi
5//
6// Copyright (c) 2015,2016,2017,2018
7// SMR Engineering & Development SA
8// 2502 Bienne, Switzerland
9//
10// All Rights Reserved. Proprietary source code. The contents of
11// this file may not be disclosed to third parties, copied or
12// duplicated in any form, in whole or in part, without the prior
13// written permission of SMR.
14//------------------------------------------------------------------------
15
16#ifndef _B2RTABLE_H_
17#define _B2RTABLE_H_
18
19#include <cassert>
20#include <complex>
21#include <iomanip>
22#include <iostream>
23#include <map>
24#include <string>
25
26#include "b2csda.H"
27#include "b2exception.H"
28
29namespace b2000 {
30
39class RData {
40public:
42 enum { NONE = 0, BOOL = 1, INT = 2, DOUBLE = 3, COMPLEX_DOUBLE = 4, STRING = 5 };
43
46 static const char* type_to_string[6];
47
49 RData() : type_(NONE) {}
50
52 RData(const bool v) : type_(BOOL), b_data(v) {}
53
55 RData(const int v) : type_(INT) { i_data.push_back(v); }
56
58 RData(const double v) : type_(DOUBLE) { d_data.push_back(v); }
59
61 RData(const std::complex<double> v) : type_(COMPLEX_DOUBLE) { cd_data.push_back(v); }
62
63 RData(const std::string& v) : type_(STRING), s_data(v) {}
64
65 RData(const char* v) : type_(STRING), s_data(v) {}
66
68 template <typename InputIterator>
69 RData(InputIterator first, InputIterator last) {
70 set_impl<InputIterator, typename std::iterator_traits<InputIterator>::value_type>::f(
71 *this, first, last);
72 }
73
75 template <typename T>
76 RData(const std::vector<T>& v) {
77 set(v.begin(), v.end());
78 }
79
81 void set() {
82 clear();
83 type_ = NONE;
84 }
85
87 void set(const bool v) {
88 clear();
89 type_ = BOOL;
90 b_data = v;
91 }
92
94 void set(const int v) {
95 clear();
96 type_ = INT;
97 i_data.push_back(v);
98 }
99
101 void set(const double v) {
102 clear();
103 type_ = DOUBLE;
104 d_data.push_back(v);
105 }
106
108 void set(const std::complex<double> v) {
109 clear();
110 type_ = COMPLEX_DOUBLE;
111 cd_data.push_back(v);
112 }
113
115 void set(const std::string& data) {
116 clear();
117 type_ = STRING;
118 s_data = data;
119 }
120
122 void set(const char* data) {
123 clear();
124 type_ = STRING;
125 s_data = std::string(data);
126 }
127
129 template <typename T>
130 void set(const std::vector<T>& v) {
131 set(v.begin(), v.end());
132 }
133
135 template <typename InputIterator>
136 void set(InputIterator first, InputIterator last) {
137 set_impl<InputIterator, typename std::iterator_traits<InputIterator>::value_type>::f(
138 *this, first, last);
139 }
140
142 bool get_bool() const { return b_data; }
143
145 const std::vector<int>& get_int() const { return i_data; }
146
148 const std::vector<double>& get_double() const { return d_data; }
149
152 const std::vector<std::complex<double> >& get_complex_double() const { return cd_data; }
153
156 template <typename T>
157 inline const std::vector<T>& get() const {
159 return std::vector<T>();
160 }
161
163 const std::string& get_string() const { return s_data; }
164
166 int type() const { return type_; }
167
169 const std::type_info& type_info() const {
170 switch (type_) {
171 case BOOL:
172 return typeid(bool);
173 case INT:
174 return typeid(int);
175 case DOUBLE:
176 return typeid(double);
177 case COMPLEX_DOUBLE:
178 return typeid(std::complex<double>);
179 case STRING:
180 return typeid(std::string);
181 default:
182 assert(0);
183 }
184 return typeid(void);
185 }
186
188 size_t size() const {
189 switch (type_) {
190 case NONE:
191 return 0;
192 case BOOL:
193 return 1;
194 case INT:
195 return i_data.size();
196 case DOUBLE:
197 return d_data.size();
198 case COMPLEX_DOUBLE:
199 return cd_data.size();
200 case STRING:
201 return s_data.size();
202 default:
203 return 0;
204 }
205 }
206
208 bool empty() const { return size() == 0; }
209
215 static size_t get_data_size(const int type, const size_t num_elements) {
216 // Special handling for BOOL.
217 const size_t rdata_mul[6] = {0, sizeof(bool), 4, 8, 16, 1};
218 const size_t rdata_add[6] = {0, 0, 0, 0, 0, 0};
219
220 return rdata_mul[type] * num_elements + rdata_add[type];
221 }
222
225 size_t get_data_size() const { return get_data_size(type(), size()); }
226
229 const void* get_data() const {
230 switch (type()) {
231 case RData::BOOL:
232 return (const void*)&b_data;
233 case RData::INT:
234 return (const void*)&get_int()[0];
235 case RData::DOUBLE:
236 return (const void*)&get_double()[0];
237 case RData::COMPLEX_DOUBLE:
238 return (const void*)&get_complex_double()[0];
239 case RData::STRING:
240 return (const void*)&get_string()[0];
241 default:
242 assert(false);
243 return nullptr;
244 }
245 }
246
248 bool operator==(const bool o) const { return (type_ == RData::BOOL && b_data == o); }
249
251 bool operator==(const int& o) const {
252 return (type_ == RData::INT && i_data.size() == 1 && i_data.front() == o);
253 }
254
256 bool operator==(const std::vector<int>& o) const {
257 return (type_ == RData::INT && i_data == o);
258 }
259
261 bool operator==(const double& o) const {
262 return (type_ == RData::DOUBLE && d_data.size() == 1 && d_data.front() == o);
263 }
264
266 bool operator==(const std::vector<double>& o) const {
267 return (type_ == RData::DOUBLE && d_data == o);
268 }
269
272 bool operator==(const std::complex<double>& o) const {
273 return (type_ == RData::COMPLEX_DOUBLE && cd_data.size() == 1 && cd_data.front() == o);
274 }
275
278 bool operator==(const std::vector<std::complex<double> >& o) const {
279 return (type_ == RData::COMPLEX_DOUBLE && cd_data == o);
280 }
281
284 bool operator==(const std::string& o) const { return (type_ == RData::STRING && s_data == o); }
285
288 bool operator==(const char* o) const { return (type_ == RData::STRING && s_data == o); }
289
290private:
291 friend std::ostream& operator<<(std::ostream& o, const RData& v);
292
293 void print(std::ostream& o = std::cout) const {
294 switch (type_) {
295 case NONE:
296 o << "None";
297 break;
298 case BOOL:
299 o << (b_data ? "TRUE" : "FALSE");
300 case INT:
301 o << "[";
302 for (size_t i = 0; i != i_data.size(); ++i) {
303 o << (i > 0 ? ", " : "") << i_data[i];
304 }
305 o << "]";
306 break;
307 case DOUBLE:
308 o << std::setprecision(15) << "[";
309 for (size_t i = 0; i != d_data.size(); ++i) {
310 o << (i > 0 ? ", " : "") << d_data[i];
311 }
312 o << "]";
313 break;
314 case COMPLEX_DOUBLE:
315 o << std::setprecision(15) << "[";
316 for (size_t i = 0; i != cd_data.size(); ++i) {
317 o << (i > 0 ? ", " : "") << cd_data[i];
318 }
319 o << "]";
320 break;
321 case STRING:
322 o << '"' << s_data << '"';
323 break;
324 default:
325 assert(0);
326 }
327 }
328
329 template <typename T, typename V>
330 struct set_impl {
331 static void f(RData& r, T first, T last) { r.clear(); }
332 };
333
334 template <typename T>
335 struct set_impl<T, int> {
336 static void f(RData& r, T first, T last) {
337 r.clear();
338 r.type_ = RData::INT;
339 r.i_data.insert(r.i_data.end(), first, last);
340 }
341 };
342
343 template <typename T>
344 struct set_impl<T, double> {
345 static void f(RData& r, T first, T last) {
346 r.clear();
347 r.type_ = RData::DOUBLE;
348 r.d_data.insert(r.d_data.end(), first, last);
349 }
350 };
351
352 template <typename T>
353 struct set_impl<T, std::complex<double> > {
354 static void f(RData& r, T first, T last) {
355 r.clear();
356 r.type_ = RData::COMPLEX_DOUBLE;
357 r.cd_data.insert(r.cd_data.end(), first, last);
358 }
359 };
360
361 template <typename T>
362 struct set_impl<T, b2000::csda<double> > {
363 static void f(RData& r, T first, T last) {
364 r.clear();
365 r.type_ = RData::COMPLEX_DOUBLE;
366 r.cd_data.insert(r.cd_data.end(), first, last);
367 }
368 };
369
370 template <typename T>
371 struct set_impl<T, char> {
372 static void f(RData& r, T first, T last) {
373 r.clear();
374 r.type_ = RData::STRING;
375 r.s_data.insert(r.s_data.end(), first, last);
376 }
377 };
378
379 void clear() {
380 type_ = RData::NONE;
381 b_data = false;
382 i_data.clear();
383 d_data.clear();
384 cd_data.clear();
385 s_data.clear();
386 }
387
388 unsigned int type_;
389 bool b_data;
390 std::vector<int> i_data;
391 std::vector<double> d_data;
392 std::vector<std::complex<double> > cd_data;
393 std::string s_data;
394};
395
396inline std::ostream& operator<<(std::ostream& o, const RData& v) {
397 v.print(o);
398 return o;
399}
400
401template <>
402inline const std::vector<int>& RData::get<int>() const {
403 return get_int();
404}
405
406template <>
407inline const std::vector<double>& RData::get<double>() const {
408 return get_double();
409}
410
411template <>
412inline const std::vector<std::complex<double> >& RData::get<std::complex<double> >() const {
413 return get_complex_double();
414}
415
416template <>
417inline const std::vector<b2000::csda<double> >& RData::get<b2000::csda<double> >() const {
418 return reinterpret_cast<const std::vector<b2000::csda<double> >&>(get_complex_double());
419}
420
427class RTable : public std::map<std::string, RData> {
428public:
430 std::string errmsg_context;
431
433 bool has_key(const std::string& key) const { return find(key) != end(); }
434
436 void remove_key(const std::string& key) {
437 iterator i = find(key);
438 if (i == end()) { return; }
439 erase(i);
440 }
441
443 const RData& operator()(const std::string& key) const {
444 const_iterator i = find(key);
445 if (i == end()) { key_error(key); }
446 return (*i).second;
447 }
448
450 RData& operator()(const std::string& key) {
451 iterator i = find(key);
452 if (i == end()) { key_error(key); }
453 return (*i).second;
454 }
455
457 void update(const RTable& o) {
458 for (auto const& i : o) { (*this)[i.first] = i.second; }
459 }
460
462 template <typename T>
463 void set(const std::string& key, const T& v, const bool new_key = false) {
464 iterator i = find(key);
465 if (i == end()) {
466 i = insert(std::pair<std::string, RData>(key, RData(v))).first;
467 } else {
468 if (new_key) { exists_error(key); }
469 (*i).second.set(v);
470 }
471 }
472
473 void set(const std::string& key, const bool v, const bool new_key = false) {
474 iterator i = find(key);
475 if (i == end()) {
476 i = insert(std::pair<std::string, RData>(key, RData(v))).first;
477 } else {
478 if (new_key) { exists_error(key); }
479 (*i).second.set(v);
480 }
481 }
482
484 template <typename T>
485 void set(const std::string& key, const std::vector<T>& v, const bool new_key = false) {
486 iterator i = find(key);
487 if (i == end()) {
488 i = insert(std::pair<std::string, RData>(key, RData(v))).first;
489 } else {
490 if (new_key) { exists_error(key); }
491 (*i).second.set(v);
492 }
493 }
494
496 template <typename InputIterator>
497 void set(
498 const std::string& key, InputIterator first, InputIterator last,
499 const bool new_key = false) {
500 iterator i = find(key);
501 if (i == end()) {
502 i = insert(std::pair<std::string, RData>(key, RData(first, last))).first;
503 } else {
504 if (new_key) { exists_error(key); }
505 (*i).second.set(first, last);
506 }
507 }
508
510 void set(const std::string& key, const std::string& s, const bool new_key = false) {
511 iterator i = find(key);
512 if (i == end()) {
513 i = insert(std::pair<std::string, RData>(key, RData(s))).first;
514 } else {
515 if (new_key) { exists_error(key); }
516 (*i).second.set(s);
517 }
518 }
519
522 bool get_bool(const std::string& key) const {
523 const_iterator i = find(key);
524 if (i != end()) {
525 if (i->second.type() == RData::BOOL) { return i->second.get_bool(); }
526 type_error(key, i->second.type(), RData::BOOL);
527 }
528 empty_error(key);
529 return 0;
530 }
531
535 bool get_bool(const std::string& key, const bool default_) const {
536 const_iterator i = find(key);
537 if (i != end()) {
538 if (i->second.type() == RData::BOOL) { return i->second.get_bool(); }
539 type_error(key, i->second.type(), RData::BOOL);
540 }
541 return default_;
542 }
543
546 int get_int(const std::string& key) const {
547 const std::vector<int>& vv = get_int_(key);
548 if (vv.empty()) { empty_error(key); }
549 return vv.front();
550 }
551
555 int get_int(const std::string& key, const int default_) const {
556 const_iterator i = find(key);
557 if (i == end()) { return default_; }
558 const std::vector<int>& vv = (*i).second.get_int();
559 if (vv.empty()) { empty_error(key); }
560 return vv.front();
561 }
562
565 double get_double(const std::string& key) const {
566 const_iterator i = find(key);
567 if (i == end()) { key_error(key); }
568 const RData& r = (*i).second;
569 if (r.empty()) { empty_error(key); }
570 if (r.type() == RData::COMPLEX_DOUBLE) { return r.get_complex_double().front().real(); }
571 return r.get_double().front();
572 }
573
578 double get_double(const std::string& key, const double default_) const {
579 const_iterator i = find(key);
580 if (i == end()) { return default_; }
581 const RData& r = (*i).second;
582 if (r.empty()) { empty_error(key); }
583 if (r.type() == RData::COMPLEX_DOUBLE) { return r.get_complex_double().front().real(); }
584 return r.get_double().front();
585 }
586
590 std::complex<double> get_complex_double(const std::string& key) const {
591 const_iterator i = find(key);
592 if (i == end()) { key_error(key); }
593 const RData& r = (*i).second;
594 if (r.empty()) { empty_error(key); }
595 if (r.type() == RData::DOUBLE) { return std::complex<double>(r.get_double().front()); }
596 if (r.type() != RData::COMPLEX_DOUBLE) { type_error(key, r.type(), RData::COMPLEX_DOUBLE); }
597 return r.get_complex_double().front();
598 }
599
603 b2000::csda<double> get_csda_double(const std::string& key) const {
604 return get_complex_double(key);
605 }
606
611 std::complex<double> get_complex_double(
612 const std::string& key, const std::complex<double>& default_) const {
613 const_iterator i = find(key);
614 if (i == end()) { return default_; }
615 const RData& r = (*i).second;
616 if (r.empty()) { empty_error(key); }
617 if (r.type() == RData::DOUBLE) { return std::complex<double>(r.get_double().front()); }
618 if (r.type() != RData::COMPLEX_DOUBLE) { type_error(key, r.type(), RData::COMPLEX_DOUBLE); }
619 return r.get_complex_double().front();
620 }
621
626 b2000::csda<double> get_csda_double(
627 const std::string& key, const b2000::csda<double>& default_) const {
628 return get_complex_double(key, default_);
629 }
630
633 std::string get_string(const std::string& key) const { return get_string_(key); }
634
638 std::string get_string(const std::string& key, const std::string& default_) const {
639 const_iterator i = find(key);
640 if (i == end()) { return default_; }
641 return (*i).second.get_string();
642 }
643
646 template <typename T>
647 inline T get(const std::string& key) const {
649 return T();
650 }
651
655 template <typename T>
656 inline T get(const std::string& key, const T& default_) const {
658 return T();
659 }
660
663 void get(const std::string& key, std::vector<int>& v) const {
664 const std::vector<int>& vv = get_int_(key);
665 v = vv;
666 }
667
670 void get(const std::string& key, std::vector<double>& v) const {
671 const_iterator i = find(key);
672 if (i == end()) { key_error(key); }
673 const RData& r = (*i).second;
674 if (r.type() == RData::COMPLEX_DOUBLE) {
675 const std::vector<std::complex<double> >& vc = r.get_complex_double();
676 v.clear();
677 v.reserve(vc.size());
678 for (auto j : vc) { v.push_back(j.real()); }
679 } else if (r.type() == RData::DOUBLE) {
680 v = r.get_double();
681 } else {
682 type_error(key, r.type(), RData::DOUBLE);
683 }
684 }
685
689 void get(const std::string& key, std::vector<std::complex<double> >& v) const {
690 const_iterator i = find(key);
691 if (i == end()) { key_error(key); }
692 const RData& r = (*i).second;
693 if (r.type() == RData::DOUBLE) {
694 const std::vector<double>& vd = r.get_double();
695 v.clear();
696 v.reserve(vd.size());
697 for (auto j : vd) { v.push_back(std::complex<double>(j)); }
698 } else if (r.type() == RData::COMPLEX_DOUBLE) {
699 v = r.get_complex_double();
700 } else {
701 type_error(key, r.type(), RData::COMPLEX_DOUBLE);
702 }
703 }
704
708 void get(const std::string& key, std::vector<b2000::csda<double> >& v) const {
709 const_iterator i = find(key);
710 if (i == end()) { key_error(key); }
711 const RData& r = (*i).second;
712 if (r.type() == RData::DOUBLE) {
713 const std::vector<double>& vd = r.get_double();
714 v.clear();
715 v.reserve(vd.size());
716 for (auto j : vd) { v.push_back(std::complex<double>(j)); }
717 } else if (r.type() == RData::COMPLEX_DOUBLE) {
718 const std::vector<std::complex<double> >& vc = r.get_complex_double();
719 v.clear();
720 v.reserve(vc.size());
721 for (auto j : vc) { v.push_back(std::complex<double>(j)); }
722 } else {
723 type_error(key, r.type(), RData::COMPLEX_DOUBLE);
724 }
725 }
726
730 void get(const std::string& key, const size_t size_, int* v) const {
731 const std::vector<int>& vv = get_int_(key);
732 if (vv.size() < size_) { size_error(key, vv.size(), size_); }
733 std::copy(&vv[0], &vv[0] + size_, v);
734 }
735
739 void get(const std::string& key, const size_t size_, double* v) const {
740 const std::vector<double>& vv = get_double_(key);
741 if (vv.size() < size_) { size_error(key, vv.size(), size_); }
742 std::copy(&vv[0], &vv[0] + size_, v);
743 }
744
749 void get(const std::string& key, const size_t size_, std::complex<double>* v) const {
750 const_iterator i = find(key);
751 if (i == end()) { key_error(key); }
752 const RData& r = (*i).second;
753 if (r.type() == RData::DOUBLE) {
754 const std::vector<double>& vd = r.get_double();
755 if (vd.size() < size_) { size_error(key, vd.size(), size_); }
756 for (size_t j = 0; j != vd.size(); ++j) { v[j] = std::complex<double>(vd[j]); }
757 } else if (r.type() == RData::COMPLEX_DOUBLE) {
758 const std::vector<std::complex<double> >& vc = r.get_complex_double();
759 if (vc.size() < size_) { size_error(key, vc.size(), size_); }
760 std::copy(&vc[0], &vc[0] + size_, v);
761 } else {
762 type_error(key, r.type(), RData::COMPLEX_DOUBLE);
763 }
764 }
765
772 void append_to_array(std::vector<char>& a) const;
773
784 const char* update_from_array(const char* abegin, const char* aend);
785
786private:
787 friend std::ostream& operator<<(std::ostream& o, const RTable& r);
788
789 void print(std::ostream& o) const {
790 o << "{";
791 for (const_iterator i = begin(); i != end(); ++i) {
792 o << (i != begin() ? ", " : "") << '"' << (*i).first << "\":" << (*i).second;
793 }
794 o << "}";
795 }
796
797 const std::vector<int>& get_int_(const std::string& key) const {
798 const_iterator i = find(key);
799 if (i == end()) { key_error(key); }
800 const RData& r = (*i).second;
801 if (r.type() != RData::INT) { type_error(key, r.type(), RData::INT); }
802 return r.get_int();
803 }
804
805 const std::vector<double>& get_double_(const std::string& key) const {
806 const_iterator i = find(key);
807 if (i == end()) { key_error(key); }
808 const RData& r = (*i).second;
809 if (r.type() != RData::DOUBLE) { type_error(key, r.type(), RData::DOUBLE); }
810 return r.get_double();
811 }
812
813 std::complex<double> get_complex_double_first_(const std::string& key) const {
814 const_iterator i = find(key);
815 if (i == end()) { key_error(key); }
816 const RData& r = (*i).second;
817 if (r.empty()) { empty_error(key); }
818 if (r.type() == RData::DOUBLE) { return std::complex<double>(r.get_double().front()); }
819 if (r.type() != RData::COMPLEX_DOUBLE) { type_error(key, r.type(), RData::COMPLEX_DOUBLE); }
820 return r.get_complex_double().front();
821 }
822
823 const std::string& get_string_(const std::string& key) const {
824 const_iterator i = find(key);
825 if (i == end()) { key_error(key); }
826 const RData& r = (*i).second;
827 if (r.type() != RData::STRING) { type_error(key, r.type(), RData::STRING); }
828 return r.get_string();
829 }
830
831 void key_error(const std::string& key) const;
832
833 void exists_error(const std::string& key) const;
834
835 void type_error(const std::string& key, const int has, const int need) const;
836
837 void empty_error(const std::string& key) const;
838
839 void size_error(const std::string& key, const size_t has, const size_t need) const;
840};
841
842inline std::ostream& operator<<(std::ostream& o, const RTable& r) {
843 r.print(o);
844 return o;
845}
846
847template <>
848inline std::string RTable::get<std::string>(const std::string& key) const {
849 return get_string(key);
850}
851
852template <>
853inline bool RTable::get<bool>(const std::string& key) const {
854 return get_bool(key);
855}
856
857template <>
858inline int RTable::get<int>(const std::string& key) const {
859 return get_int(key);
860}
861
862template <>
863inline double RTable::get<double>(const std::string& key) const {
864 return get_double(key);
865}
866
867template <>
868inline std::complex<double> RTable::get<std::complex<double> >(const std::string& key) const {
869 return get_complex_double(key);
870}
871
872template <>
873inline b2000::csda<double> RTable::get<b2000::csda<double> >(const std::string& key) const {
874 return get_complex_double(key);
875}
876
877template <>
878inline std::string RTable::get<std::string>(
879 const std::string& key, const std::string& default_) const {
880 return get_string(key, default_);
881}
882
883template <>
884inline bool RTable::get<bool>(const std::string& key, const bool& default_) const {
885 return get_bool(key, default_);
886}
887
888template <>
889inline int RTable::get<int>(const std::string& key, const int& default_) const {
890 return get_int(key, default_);
891}
892
893template <>
894inline double RTable::get<double>(const std::string& key, const double& default_) const {
895 return get_double(key, default_);
896}
897
898template <>
899inline std::complex<double> RTable::get<std::complex<double> >(
900 const std::string& key, const std::complex<double>& default_) const {
901 return get_complex_double(key, default_);
902}
903
904template <>
905inline b2000::csda<double> RTable::get<b2000::csda<double> >(
906 const std::string& key, const b2000::csda<double>& default_) const {
907 return get_complex_double(key, default_);
908}
909
910} // namespace b2000
911
912#endif /* _B2RTABLE_H_ */
#define THROW
Definition b2exception.H:198
Definition b2rtable.H:39
bool operator==(const bool o) const
Comparison with a bool. The data type must be of type BOOL.
Definition b2rtable.H:248
bool operator==(const char *o) const
Definition b2rtable.H:288
const std::type_info & type_info() const
Return the typeid() of the data type.
Definition b2rtable.H:169
const std::vector< std::complex< double > > & get_complex_double() const
Definition b2rtable.H:152
void set(InputIterator first, InputIterator last)
Copy a range.
Definition b2rtable.H:136
static size_t get_data_size(const int type, const size_t num_elements)
Definition b2rtable.H:215
void set(const std::vector< T > &v)
Copy a vector.
Definition b2rtable.H:130
bool operator==(const std::vector< double > &o) const
Comparison with a vector of double. The data type must be of type DOUBLE.
Definition b2rtable.H:266
void set(const bool v)
Assign a single bool value.
Definition b2rtable.H:87
int type() const
Definition b2rtable.H:166
RData()
Create an RData instance of type NONE.
Definition b2rtable.H:49
void set(const std::string &data)
Assign a string.
Definition b2rtable.H:115
RData(const double v)
Create an RData instance by assigning a single element.
Definition b2rtable.H:58
const std::vector< double > & get_double() const
Definition b2rtable.H:148
const std::vector< T > & get() const
Definition b2rtable.H:157
const std::string & get_string() const
Definition b2rtable.H:163
bool operator==(const std::vector< int > &o) const
Comparison with a vector of int. The data type must be of type INT.
Definition b2rtable.H:256
bool operator==(const int &o) const
Comparison with an int. The data type must be of type INT.
Definition b2rtable.H:251
bool operator==(const std::complex< double > &o) const
Definition b2rtable.H:272
bool empty() const
true if the number of elements is 0.
Definition b2rtable.H:208
void set(const std::complex< double > v)
Assign a single complex-double value.
Definition b2rtable.H:108
RData(const bool v)
Create an RData instance by assigning a single element.
Definition b2rtable.H:52
RData(InputIterator first, InputIterator last)
Create an RData instance by copying a range.
Definition b2rtable.H:69
void set(const double v)
Assign a single double value.
Definition b2rtable.H:101
bool get_bool() const
Definition b2rtable.H:142
RData(const std::vector< T > &v)
Create an RData instance by copying a vector.
Definition b2rtable.H:76
bool operator==(const std::string &o) const
Definition b2rtable.H:284
size_t get_data_size() const
Definition b2rtable.H:225
bool operator==(const std::vector< std::complex< double > > &o) const
Definition b2rtable.H:278
RData(const int v)
Create an RData instance by assigning a single element.
Definition b2rtable.H:55
const std::vector< int > & get_int() const
Definition b2rtable.H:145
RData(const std::complex< double > v)
Create an RData instance by assigning a single element.
Definition b2rtable.H:61
void set(const char *data)
Assign a 0-terminated array of characters.
Definition b2rtable.H:122
void set(const int v)
Assign a single integer value.
Definition b2rtable.H:94
size_t size() const
Definition b2rtable.H:188
static const char * type_to_string[6]
Definition b2rtable.H:46
bool operator==(const double &o) const
Comparison with a double. The data type must be of type DOUBLE.
Definition b2rtable.H:261
void set()
Assign NONE.
Definition b2rtable.H:81
const void * get_data() const
Definition b2rtable.H:229
Definition b2rtable.H:427
void set(const std::string &key, const std::vector< T > &v, const bool new_key=false)
Copy a vector. If new_key is true, the key must not exist.
Definition b2rtable.H:485
bool has_key(const std::string &key) const
Definition b2rtable.H:433
std::complex< double > get_complex_double(const std::string &key) const
Definition b2rtable.H:590
void get(const std::string &key, const size_t size_, std::complex< double > *v) const
Definition b2rtable.H:749
void update(const RTable &o)
Update with all (key,value) pairs from another RTable.
Definition b2rtable.H:457
void get(const std::string &key, std::vector< std::complex< double > > &v) const
Definition b2rtable.H:689
int get_int(const std::string &key, const int default_) const
Definition b2rtable.H:555
void get(const std::string &key, std::vector< double > &v) const
Definition b2rtable.H:670
void get(const std::string &key, const size_t size_, int *v) const
Definition b2rtable.H:730
bool get_bool(const std::string &key, const bool default_) const
Definition b2rtable.H:535
const RData & operator()(const std::string &key) const
Definition b2rtable.H:443
void get(const std::string &key, std::vector< int > &v) const
Definition b2rtable.H:663
void set(const std::string &key, InputIterator first, InputIterator last, const bool new_key=false)
Copy a range. If new_key is true, the key must not exist.
Definition b2rtable.H:497
T get(const std::string &key) const
Definition b2rtable.H:647
void get(const std::string &key, std::vector< b2000::csda< double > > &v) const
Definition b2rtable.H:708
std::string get_string(const std::string &key) const
Definition b2rtable.H:633
void remove_key(const std::string &key)
Remove entry "key".
Definition b2rtable.H:436
const char * update_from_array(const char *abegin, const char *aend)
Definition b2rtable.C:123
T get(const std::string &key, const T &default_) const
Definition b2rtable.H:656
b2000::csda< double > get_csda_double(const std::string &key) const
Definition b2rtable.H:603
b2000::csda< double > get_csda_double(const std::string &key, const b2000::csda< double > &default_) const
Definition b2rtable.H:626
bool get_bool(const std::string &key) const
Definition b2rtable.H:522
void append_to_array(std::vector< char > &a) const
Definition b2rtable.C:49
std::complex< double > get_complex_double(const std::string &key, const std::complex< double > &default_) const
Definition b2rtable.H:611
void set(const std::string &key, const T &v, const bool new_key=false)
Assign a single value. If new_key is true, the key must not exist.
Definition b2rtable.H:463
std::string get_string(const std::string &key, const std::string &default_) const
Definition b2rtable.H:638
std::string errmsg_context
Will be pre-pended to error messages.
Definition b2rtable.H:430
double get_double(const std::string &key, const double default_) const
Definition b2rtable.H:578
int get_int(const std::string &key) const
Definition b2rtable.H:546
RData & operator()(const std::string &key)
Definition b2rtable.H:450
void get(const std::string &key, const size_t size_, double *v) const
Definition b2rtable.H:739
double get_double(const std::string &key) const
Definition b2rtable.H:565
void set(const std::string &key, const std::string &s, const bool new_key=false)
Copy a string. If new_key is true, the key must not exist.
Definition b2rtable.H:510
Contains the base classes for implementing Finite Elements.
Definition b2boundary_condition.H:32
GenericException< UnimplementedError_name > UnimplementedError
Definition b2exception.H:314