19 #ifndef avro_NodeConcepts_hh__
20 #define avro_NodeConcepts_hh__
26 #include "Exception.hh"
50 template <
typename Attribute>
53 static const bool hasAttribute =
false;
59 void add(
const Attribute &attr) {
63 throw Exception(
"This type does not have attribute");
66 const Attribute &
get(
size_t index = 0)
const {
70 throw Exception(
"This type does not have attribute");
72 static const Attribute empty = Attribute();
76 Attribute &
get(
size_t index = 0) {
80 throw Exception(
"This type does not have attribute");
85 template<
typename Attribute>
88 static const bool hasAttribute =
true;
104 size_t size()
const {
108 void add(
const Attribute &attr) {
112 const Attribute &
get(
size_t index = 0)
const {
114 throw Exception(
"SingleAttribute has only 1 value");
119 Attribute &
get(
size_t index = 0) {
121 throw Exception(
"SingleAttribute has only 1 value");
131 template<
typename Attribute>
134 static const bool hasAttribute =
true;
146 attrs_.push_back(rhs.attr_);
156 size_t size()
const {
157 return attrs_.size();
160 void add(
const Attribute &attr) {
161 attrs_.push_back(attr);
164 const Attribute &
get(
size_t index = 0)
const {
165 return attrs_.at(index);
168 Attribute &
get(
size_t index) {
169 return attrs_.at(index);
174 std::vector<Attribute> attrs_;
181 bool lookup(
const std::string &name,
size_t &index)
const {
182 throw Exception(
"Name index does not exist");
186 bool add(const::std::string &name,
size_t index) {
187 throw Exception(
"Name index does not exist");
195 typedef std::map<std::string, size_t> IndexMap;
197 bool lookup(
const std::string &name,
size_t &index)
const {
198 IndexMap::const_iterator iter = map_.find(name);
199 if(iter == map_.end()) {
202 index = iter->second;
206 bool add(const::std::string &name,
size_t index) {
208 IndexMap::iterator lb = map_.lower_bound(name);
209 if(lb == map_.end() || map_.key_comp()(name, lb->first)) {
210 map_.insert(lb, IndexMap::value_type(name, index));
A bunch of templates and specializations for encoding and decoding specific types.
Definition: AvroParse.hh:31
Definition: NodeConcepts.hh:132
Definition: NodeConcepts.hh:86
Definition: NodeConcepts.hh:179
Wrapper for std::runtime_error that provides convenience constructor for boost::format objects...
Definition: Exception.hh:31
Definition: NodeConcepts.hh:51