54 #ifndef GAMS_UTILITY_ARGUMENT_PARSER_H_ 55 #define GAMS_UTILITY_ARGUMENT_PARSER_H_ 60 #include "madara/utility/Utility.h" 61 #include "madara/knowledge/KnowledgeBase.h" 78 bool operator()(
const std::string &lhs,
const std::string &rhs)
const 80 size_t lsz = lhs.size(), rsz = rhs.size();
86 return std::less<std::string>()(lhs, rhs);
98 inline madara::knowledge::KnowledgeVector
kmap2kvec(
99 const madara::knowledge::KnowledgeMap &kmap)
101 using namespace madara::knowledge;
102 std::map<std::string, KnowledgeRecord,
103 RadixLess> map(kmap.begin(), kmap.end());
105 for(KnowledgeMap::const_iterator i = map.begin(); i != map.end(); ++i)
107 char c = i->first[0];
108 if(c >=
'0' && c <=
'9')
109 ret.push_back(i->second);
123 template<
class map_iterator>
125 std::input_iterator_tag, typename map_iterator::value_type >
133 : dummy_(0), parent_(&parent), it_k_(parent_->kmap_->begin()),
134 it_v_(it_k_), cache_valid_(0)
141 : dummy_(0), parent_(o.parent_), it_k_(o.it_k_), it_v_(o.it_v_),
159 mutable value_type cache_;
161 mutable char cache_[
sizeof(value_type)];
170 value_type *cache()
const 172 return cache_valid_ ? &cache_ :
nullptr;
177 return cache_valid_ ?
178 reinterpret_cast<value_type*
>(&cache_) :
191 return parent_ ==
nullptr || parent_->
kmap_ ==
nullptr ||
192 it_k_ == parent_->
kmap_->end();
197 bool ae1 = at_end(), ae2 = o.
at_end();
207 return !(*
this == o);
213 return (!is_old_style()) ?
215 it_k_->second.to_string();
218 typename value_type::second_type
value()
const 220 return it_v_->second;
225 return it_k_ != it_v_;
231 char c = it_k_->first[0];
232 if(c >=
'0' && c <=
'9')
241 if(!at_end() && name_is_old_style() && !is_old_style())
243 if(it_v_ == parent_->
kmap_->end())
251 cache()->~value_type();
252 cache_valid_ =
false;
269 value_type *ret =
new((
void*)&cache_) value_type(name(),value());
311 const madara::knowledge::KnowledgeMap *
kmap_;
ArgumentParser(const madara::knowledge::KnowledgeMap &kmap)
Compare object suitable for use with standard library.
const ArgumentParser * parent_
const_iterator begin() const
value_type::second_type value() const
value_type * cache() const
bool operator()(const std::string &lhs, const std::string &rhs) const
my_iterator & operator++()
auto operator*(const BasicVector< Derived, Units > &vec, Scalar scalar) -> typename std::enable_if< std::is_arithmetic< Scalar >::value &&BasicVector< Derived, Units >::free(), typename BasicVector< Derived, Units >::derived_type >::type
bool is_old_style() const
const madara::knowledge::KnowledgeMap * kmap_
static const_iterator end()
my_iterator(const my_iterator &o)
my_iterator(const ArgumentParser &parent)
my_iterator operator++(int)
my_iterator< madara::knowledge::KnowledgeMap::const_iterator > const_iterator
my_iterator::value_type value_type
my_iterator & operator=(const my_iterator &o)
Contains all GAMS-related tools, classes and code.
const value_type & operator*() const
bool operator==(const my_iterator &o) const
bool name_is_old_style() const
const value_type * operator->()
bool operator!=(const my_iterator &o) const
madara::knowledge::KnowledgeVector kmap2kvec(const madara::knowledge::KnowledgeMap &kmap)
Converts a knowledge map into a knowledge vector by adding the values from the map in numerical order...
my_iterator< madara::knowledge::KnowledgeMap::iterator > iterator