6#ifndef __qdp_map_obj_memory_h__
7#define __qdp_map_obj_memory_h__
11#include <unordered_map>
19 template<
typename K,
typename V>
21 std::unordered_map<std::string, std::pair<K,V> > >
25 typedef std::unordered_map<std::string, std::pair<K,V> >
MapType_t;
51 const std::pair<K,V>&
operator*()
const {
return src_iter->second;}
54 const std::pair<K,V>*
operator->()
const {
return &(src_iter->second);}
58 typename MapType_t::const_iterator src_iter;
65 template<
typename K,
typename V>
76 typedef std::unordered_map<std::string, value_type>
MapType_t;
99 int insert(
const K& key,
const V& val)
101 return this->
insert(std::make_pair(key,val));
105 template<
typename InputIterator>
106 int insert(InputIterator first, InputIterator last)
109 for(InputIterator iter = first; iter != last; ++iter)
119 write(bin, vv.first);
121 const std::string bin_key(bin.
str());
122 typename MapType_t::iterator iter =
src_map.find(bin_key);
129 src_map.insert(std::make_pair(bin_key,vv));
135 int get(
const K& key, V& val)
const
141 typename MapType_t::const_iterator iter =
src_map.find(bin.
str());
146 val = iter->second.second;
157 typename MapType_t::const_iterator iter =
src_map.find(bin.
str());
180 unsigned int size()
const {
return static_cast<unsigned long>(
src_map.size());}
183 void keys(std::vector<K>& _keys)
const
186 for(
typename MapType_t::const_iterator iter =
src_map.begin(); iter !=
src_map.end(); ++iter)
188 _keys.push_back(iter->second.first);
193 virtual void keysAndValues(std::vector<K>& _keys, std::vector<V>& _vals)
const
197 for(
typename MapType_t::const_iterator iter =
src_map.begin(); iter !=
src_map.end(); ++iter)
199 _keys.push_back(iter->second.first);
200 _vals.push_back(iter->second.second);
211 typename MapType_t::const_iterator iter =
src_map.find(bin.
str());
214 std::cerr <<
"MapObject: key not found" << std::endl;
218 return iter->second.second;
227 typename MapType_t::iterator iter =
src_map.find(bin.
str());
230 std::cerr <<
"MapObject: key not found" << std::endl;
234 return iter->second.second;
256 template<
typename K,
typename V>
262 std::ostringstream error_message;
263 std::string elemName =
"elem";
267 array_size = arraytop.
count(elemName);
269 catch(
const std::string& e) {
270 error_message <<
"Exception occurred while counting " << elemName
271 <<
" during array read " << s << std::endl;
273 throw error_message.str();
277 for(
int i=0; i < array_size; i++)
279 std::ostringstream element_xpath;
282 element_xpath << elemName <<
"[" << (i+1) <<
"]";
286 XMLReader xml_elem(arraytop, element_xpath.str());
291 read(xml_elem, std::string(
"Key"), key);
292 read(xml_elem, std::string(
"Val"), val);
296 catch (
const std::string& e)
298 error_message <<
"Failed to match element " << i
299 <<
" of array " << s <<
" with query " << element_xpath.str()
301 <<
"Query returned error: " << e;
303 throw error_message.str();
314 template<
typename K,
typename V>
323 write(xml,
"Key", iter->first);
324 write(xml,
"Val", iter->second);
Binary buffer output class.
std::string str() const
Return entire buffer as a string.
Iterator for a MapObject.
MapObjectMemoryIterator operator++(int)
Postfix increment.
const std::pair< K, V > & operator*() const
bool operator==(const MapObjectMemoryIterator &rhs) const
Equality.
const std::pair< K, V > * operator->() const
std::unordered_map< std::string, std::pair< K, V > > MapType_t
Map type convenience.
MapObjectMemoryIterator(const MapObjectMemoryIterator &p)
Copy constructor.
MapObjectMemoryIterator & operator++()
Prefix increment.
bool operator!=(const MapObjectMemoryIterator &rhs) const
Rather obvious.
MapObjectMemoryIterator(const typename MapType_t::const_iterator &iter_)
Take an input iterator coming from MapObject.
K key_type
Re-export these.
MapObjectMemory()
Default constructor.
int getUserdata(std::string &user_data_) const
Get user user data from the metadata database.
bool exist(const K &key) const
Exists?
const V & operator[](const K &key) const
Getter.
unsigned int size() const
The number of elements.
void clear()
Clear the object.
V & operator[](const K &key)
Setter.
void flush()
Flush out state of object.
MapType_t src_map
Map of objects.
int insert(InputIterator first, InputIterator last)
Insert from iterators.
int insert(const value_type &vv)
Insert.
void keys(std::vector< K > &_keys) const
Dump keys.
std::unordered_map< std::string, value_type > MapType_t
Map type convenience.
virtual const_iterator begin() const
Begin loop over keys.
void erase(const K &key)
Erase a key-value.
int insertUserdata(const std::string &user_data_)
Insert user data into the metadata database.
~MapObjectMemory()
Destructor.
std::pair< K, V > value_type
virtual const_iterator end() const
End loop over keys.
int insert(const K &key, const V &val)
Insert.
std::string user_data
Metadata.
virtual void keysAndValues(std::vector< K > &_keys, std::vector< V > &_vals) const
Dump keys and values.
int get(const K &key, V &val) const
Getter.
MapObjectMemoryIterator< K, V > const_iterator
int count(const std::string &xpath)
Count the number of occurances from the Xpath query.
void close()
Closes the last file opened.
void write(BinaryWriter &bin, const std::string &output)
void read(BinaryReader &bin, std::string &input, size_t maxBytes)
Yet another random number generator.
void push(XMLWriter &xml, const std::string &s)
Push a group name.
void pop(XMLWriter &xml)
Pop a group name.