Atoms Crowd  4.1.0
MapMetadata.h
1 #pragma once
2 // ===========================================================================
3 // Copyright (c) 2015 Toolchefs Ltd. All rights reserved.
4 //
5 // Use of this software is subject to the terms of the Toolchefs license
6 // agreement provided at the time of installation or download, or which
7 // otherwise accompanies this software in either electronic or hard copy form.
8 // ===========================================================================
9 
10 #include <AtomsCore/Globals.h>
11 #include <AtomsCore/Metadata/Metadata.h>
12 #include <string>
13 #include <map>
14 #include <vector>
15 
16 namespace AtomsCore
17 {
18 
20 
23  class ATOMSCORE_EXPORT MapMetadata: public Metadata
24  {
25  public:
26 
27  typedef std::string Key;
28 
29  typedef std::map<Key, AtomsPtr<Metadata> > valueType;
30 
32 
35  std::string typeStr() const;
36 
38  static std::string staticTypeStr();
39 
41 
44  unsigned int typeId() const;
45 
47  static unsigned int staticTypeId();
48 
51 
53  MapMetadata(const MapMetadata& rhs);
54 
57 
60 
62 
66  virtual void copy(Metadata *other);
67 
69 
72  virtual AtomsPtr<Metadata> clone() const;
73 
75 
78  virtual size_t memSize() const;
79 
81 
84  unsigned int size() const;
85 
87 
92  bool hasKey(const Key& key) const;
93 
95 
99  std::vector<Key> getKeys() const;
100 
102 
106  AtomsPtr<Metadata> getEntry(const Key& key);
107 
109 
113  AtomsPtr<const Metadata> getEntry(const Key& key) const;
114 
116 
120  template<class T>
121  AtomsPtr<T> getTypedEntry(const Key& key);
122 
124 
128  template<class T>
129  AtomsPtr<const T> getTypedEntry(const Key& key) const;
130 
132  /*
133  \param key Entry key
134  */
135  void eraseEntry(const Key& key);
136 
138 
143  void addEntry(const Key& key, AtomsPtr<Metadata>& data, bool cloneData = true);
144 
146 
151  void addEntry(const Key& key, const AtomsPtr<const Metadata>& data);
152 
154 
159  void addEntry(const Key& key, Metadata* data);
160 
162 
167  void insertEntry(const Key& key, AtomsPtr<Metadata> data);
168 
170  void addEmptyEntry(const Key& key);
171 
173 
176  void clear();
177 
179  inline valueType::iterator begin();
180 
182  inline valueType::iterator end();
183 
185  inline valueType::const_iterator cbegin() const;
186 
188  inline valueType::const_iterator cend() const;
189 
191  virtual void hash(MurmurHash3& hasher) const;
192 
193  inline valueType& data();
194 
195  inline const valueType& data() const;
196 
197  public:
198 
200 
204  static Metadata* creator();
205 
207  bool serialise(Archive& outStream) const;
208 
210  bool deserialise(Archive& inStream);
211 
213  void toString(std::stringstream& ss) const;
214 
216  bool serialiseCompressed(Archive& outStream) const;
217 
219  bool deserialiseCompressed(Archive& outStream);
220 
222  bool deserialiseKeys(Archive& outStream, const std::vector<std::string>& keys, bool append = false);
223 
224  bool deserialiseKeys(const std::string& filePath, const std::vector<std::string>& keys, bool append = false, bool multithread = false);
225 
226  private:
227 
229  valueType m_value;
230  };
231 }
232 namespace AtomsCore
233 {
235  ATOMSCORE_EXPORT AtomsCore::Archive& operator<<(AtomsCore::Archive& os, const AtomsCore::MapMetadata& data);
236 
238  ATOMSCORE_EXPORT AtomsCore::Archive& operator >> (AtomsCore::Archive& is, AtomsCore::MapMetadata& data);
239 }
240 #include "MapMetadata.impl.h"
241 
AtomsCore::MapMetadata::size
unsigned int size() const
Map size.
AtomsCore::MapMetadata::MapMetadata
MapMetadata()
Constructor.
AtomsCore::MapMetadata::clear
void clear()
Clear map.
AtomsCore::MapMetadata::getEntry
AtomsPtr< Metadata > getEntry(const Key &key)
Get an entry.
AtomsCore::MapMetadata::addEmptyEntry
void addEmptyEntry(const Key &key)
Add n empty entry.
AtomsCore::MapMetadata::hasKey
bool hasKey(const Key &key) const
Has key.
AtomsCore::MapMetadata::MapMetadata
MapMetadata(const MapMetadata &rhs)
Copy constructor.
AtomsCore::Metadata
Base Metadata class.
Definition: Metadata.h:24
AtomsCore::MapMetadata::getKeys
std::vector< Key > getKeys() const
Get keys.
AtomsCore::MapMetadata::typeStr
std::string typeStr() const
Type string.
AtomsCore::MapMetadata::deserialise
bool deserialise(Archive &inStream)
Deserialise.
AtomsCore::MapMetadata::deserialiseKeys
bool deserialiseKeys(Archive &outStream, const std::vector< std::string > &keys, bool append=false)
Deserialise only specific keys.
AtomsCore::Archive
Archive class.
Definition: Serialiser.h:29
AtomsCore::MapMetadata::creator
static Metadata * creator()
Creator function.
AtomsCore::MapMetadata::serialise
bool serialise(Archive &outStream) const
Serialise.
AtomsCore::MapMetadata::addEntry
void addEntry(const Key &key, AtomsPtr< Metadata > &data, bool cloneData=true)
Add an entry.
AtomsCore::MapMetadata::serialiseCompressed
bool serialiseCompressed(Archive &outStream) const
Serialise random access compressed archive.
AtomsCore::MapMetadata::deserialiseCompressed
bool deserialiseCompressed(Archive &outStream)
Deserialise random access compressed archive.
AtomsCore::MapMetadata::valueType
std::map< Key, AtomsPtr< Metadata > > valueType
value type
Definition: MapMetadata.h:29
AtomsCore
AtomsCore namespace.
Definition: AtomsMath.h:24
AtomsCore::MapMetadata::addEntry
void addEntry(const Key &key, Metadata *data)
Add an entry.
AtomsCore::MapMetadata
MapMetadata class.
Definition: MapMetadata.h:24
AtomsCore::MapMetadata::hash
virtual void hash(MurmurHash3 &hasher) const
Hash.
AtomsCore::MapMetadata::clone
virtual AtomsPtr< Metadata > clone() const
clone object
AtomsCore::MapMetadata::addEntry
void addEntry(const Key &key, const AtomsPtr< const Metadata > &data)
Add an entry.
AtomsCore::MapMetadata::staticTypeId
static unsigned int staticTypeId()
Class static type string.
AtomsCore::MapMetadata::getEntry
AtomsPtr< const Metadata > getEntry(const Key &key) const
Get an entry.
AtomsCore::MapMetadata::copy
virtual void copy(Metadata *other)
copy value
AtomsCore::MapMetadata::toString
void toString(std::stringstream &ss) const
String conversion.
AtomsCore::MapMetadata::typeId
unsigned int typeId() const
Type id.
AtomsCore::MapMetadata::memSize
virtual size_t memSize() const
Memory size.
AtomsCore::MapMetadata::eraseEntry
void eraseEntry(const Key &key)
Remove an entry.
AtomsCore::MapMetadata::staticTypeStr
static std::string staticTypeStr()
Class static type string.
AtomsCore::MapMetadata::insertEntry
void insertEntry(const Key &key, AtomsPtr< Metadata > data)
Add an entry.
AtomsCore::MapMetadata::~MapMetadata
~MapMetadata()
Destructor.
AtomsCore::MapMetadata::operator=
MapMetadata & operator=(const MapMetadata &other)
Assign operator.
AtomsCore::MurmurHash3
Definition: Hash.h:23