EventAnalysis  1.1.0
DataStore.h
Go to the documentation of this file.
1 /*
2  * DataStore.h
3  *
4  * Created on: 03 Jan 2017
5  * Author: Nicola Mori
6  */
7 
10 #ifndef DATASTORE_H_
11 #define DATASTORE_H_
12 
13 #include "core/Info.h"
14 #include "core/ObjectMap.h"
15 #include "core/ObserverPtr.h"
16 #include "core/RetrievalResult.h"
17 #include "data/DataProvider.h"
18 #include "data/EventDataCache.h"
20 #include "data/ObjectCategory.h"
23 
24 #include <vector>
25 
26 namespace EA {
27 
28 class AlgoSequence;
29 
41 class DataStore : public Info, private ObjectMap {
42 public:
43  // Constructors/destructor
44 
50  DataStore(const std::string &name, ObjectCategory category);
51 
52  // ObjectMap interface
53 
64  template <class DataType>
65  void AddObject(const std::string &name, DataType &obj, const observer_ptr<ObjectProducer> &producer = nullptr);
66 
77  template <class DataType>
78  void AddObject(const std::string &name, observer_ptr<DataType> obj,
79  const observer_ptr<ObjectProducer> &producer = nullptr);
80 
91  void AddObject(const std::string &name, const char *obj, const observer_ptr<ObjectProducer> & = nullptr);
92 
103  template <class DataType>
104  void AddObject(const std::string &name, std::shared_ptr<DataType> obj,
105  const observer_ptr<ObjectProducer> &producer = nullptr);
106 
117  template <class DataType>
118  void AddObject(const std::string &name, std::unique_ptr<DataType> obj,
119  const observer_ptr<ObjectProducer> & = nullptr);
120 
128  void SetAlias(const std::string &objName, const std::string &objAlias);
129 
143  template <class DataType> observer_ptr<DataType> GetObject(const std::string &name);
144 
155  bool RemoveObject(const std::string &name, bool removeAliased = false);
156 
162  std::vector<std::string> GetObjects() const { return ObjectMap::GetObjects(); }
163 
170  std::string GetAlias(const std::string &name) const { return ObjectMap::GetAlias(name); }
171 
176  std::vector<std::string> GetAliases() const { return ObjectMap::GetAliases(); }
177 
185  bool Clean();
186 
193 
200  bool IsAlias(const std::string &objName) { return ObjectMap::IsAlias(objName); }
201 
209  const std::string &GetNameOfAliasedObject(const std::string &aliasName) {
210  return ObjectMap::GetNameOfAliasedObject(aliasName);
211  }
212 
225  ObjectWrapper GetObjectWrapper(const std::string &objName);
226 
227  // DataStore interface
238 
243  const std::vector<observer_ptr<DataProvider>> GetAttachedProviders() { return _providers; }
244 
252  void TrackRemovedObjects(bool track = true);
253 
258  bool IsTrackingRemovedObjects() { return (bool)_remObjTracker; }
259 
270  bool FreeRemoved(Memory::Status memStatus);
271 
282  bool SetAlgoProducedObjects(const AlgoSequence &seq);
283 
289  bool IsAlgoProducedObject(const std::string nameOrAlias);
290 
291 protected:
297  template <class DataType> ObjPtr<DataType> GetFromMap(const std::string &name);
298 
307  RetrievalResult GetFromProvider(const std::string &name, ObjectWrapper &wrapper, std::string &actualName,
308  observer_ptr<ObjectProducer> &provider);
309 
324  template <class DataType>
325  ObjPtr<DataType> CastAndWrap(const std::string &name, const std::string &actualName, ObjectWrapper &&wrapper,
327 
328 private:
329  std::vector<observer_ptr<DataProvider>> _providers;
331 
332  std::unique_ptr<RemovedObjectsTracker> _remObjTracker;
333 
334  // The following two containers are kept ordered
335  std::list<std::string> _algoProdObjects;
336  std::list<std::string> _algoProdAliases;
337 };
338 
344 class OwningDataStore : public DataStore {
345 public:
346  OwningDataStore(const std::string &name, ObjectCategory category) : DataStore(name, category) {}
347 
348  template <class DataType> void AddObject(const std::string &name, std::shared_ptr<DataType> obj) {
349  DataStore::AddObject(name, obj);
350  }
351 };
352 
354 public:
355  GlobalDataStore(const std::string &name) : OwningDataStore(name, ObjectCategory::GLOBAL) {}
356 };
357 
358 class PassDataStore : public DataStore {
359 public:
360  PassDataStore(const std::string &name) : DataStore(name, ObjectCategory::PASS) {}
361 };
362 
363 class EventDataStore : public DataStore {
364 public:
365  EventDataStore(const std::string &name) : DataStore(name, ObjectCategory::EVENT) {}
366 
375  bool AddEventCache(observer_ptr<EventDataCache> cache);
376 
389  template <class DataType> observer_ptr<DataType> GetObject(const std::string &name);
390 
391 private:
393 };
394 
395 } // namespace EA
396 
397 #include "data/DataStore.hpp"
398 
399 #endif /* DATASTORE_H_ */
bool AddProvider(observer_ptr< DataProvider > provider)
Adds a data provider in the data store.
Definition: DataStore.cpp:96
std::string GetAlias(const std::string &name) const
Get the alias of an object.
Definition: DataStore.h:170
bool IsAlias(const std::string &objName)
Checks if an object name is actually an alias.
Definition: DataStore.h:200
Objects with values defined on a per-event basis.
Class describing a pointer to an object retrieved from an ObjectMap.
Definition: ObjPtr.h:31
std::unique_ptr< RemovedObjectsTracker > _remObjTracker
Definition: DataStore.h:332
Definition: DataStore.h:358
bool CleanAliases()
Removes all the aliases from the map.
Definition: ObjectMap.cpp:118
bool CleanAliases()
Removes all the aliases from the store.
Definition: DataStore.h:192
bool SetAlgoProducedObjects(const AlgoSequence &seq)
Notify the data store about objects that are produced by the algorithms.
Definition: DataStore.cpp:51
void TrackRemovedObjects(bool track=true)
Enables the tracking of removed objects.
Definition: DataStore.cpp:121
EventDataStore(const std::string &name)
Definition: DataStore.h:365
bool Clean()
Removes all the objects and aliases from the store.
Definition: DataStore.cpp:86
std::list< std::string > _algoProdAliases
Definition: DataStore.h:336
std::vector< std::string > GetAliases() const
Returns the aliases of the objects in the map.
Definition: DataStore.h:176
OwningDataStore(const std::string &name, ObjectCategory category)
Definition: DataStore.h:346
observer_ptr< EventDataCache > _eventCache
Definition: DataStore.h:392
A smart pointer not owning the wrapped object.
Definition: ObserverPtr.h:28
GlobalDataStore(const std::string &name)
Definition: DataStore.h:355
const std::vector< observer_ptr< DataProvider > > GetAttachedProviders()
Gets all the providers attached to the data store.
Definition: DataStore.h:243
const std::string & GetNameOfAliasedObject(const std::string &aliasName)
Gets the name of the object corresponding to an alias.
Definition: ObjectMap.cpp:60
Interface for retrieving informations about an object.
Definition: Info.h:18
bool IsAlgoProducedObject(const std::string nameOrAlias)
Checks if a given object is produced by an algorithm.
Definition: DataStore.cpp:78
RetrievalResult
Definition: RetrievalResult.h:16
bool IsAlias(const std::string &objName)
Checks if an object name is actually an alias.
Definition: ObjectMap.cpp:183
Algorithm made by multiple basic algorithms.
Definition: AlgoSequence.h:37
IncludeFileExc.h IncludeFileExc class declaration.
Definition: Algorithm.h:21
A map between strings and objects of ObjectWrapper kind.
Definition: ObjectMap.h:32
bool RemoveObject(const std::string &name, bool removeAliased=false)
Removes an object or an alias from the map.
Definition: DataStore.cpp:27
void SetAlias(const std::string &objName, const std::string &objAlias)
Set an alias for the given object.
Definition: DataStore.cpp:37
A data store owning all of the contained objects.
Definition: DataStore.h:344
std::string GetAlias(const std::string &name) const
Get the alias of an object.
Definition: ObjectMap.cpp:164
ObjPtr< DataType > GetFromMap(const std::string &name)
Retrieves an object from the internal ObjectMap.
Definition: DataStore.hpp:108
Objects with values defined on a per-pass basis.
RetrievalResult GetFromProvider(const std::string &name, ObjectWrapper &wrapper, std::string &actualName, observer_ptr< ObjectProducer > &provider)
Retrieves an object from the registered providers.
Definition: DataStore.cpp:163
ObjectCategory
Category of objects.
Definition: ObjectCategory.h:17
Generic wrapper class.
Definition: ObjectWrapper.h:28
void AddObject(const std::string &name, DataType &obj, const observer_ptr< ObjectProducer > &producer=nullptr)
Adds an object to the map, storing also the producer.
Definition: DataStore.hpp:15
std::vector< std::string > GetObjects() const
Returns the names of the objects in the map.
Definition: ObjectMap.cpp:104
std::vector< std::string > GetObjects() const
Returns the names of the objects in the store.
Definition: DataStore.h:162
ObjPtr< DataType > CastAndWrap(const std::string &name, const std::string &actualName, ObjectWrapper &&wrapper, observer_ptr< ObjectProducer > provider)
Casts the wrapper to the template type, registers the object in the store and wraps it inside the ret...
Definition: DataStore.hpp:113
Definition: DataStore.h:363
PassDataStore(const std::string &name)
Definition: DataStore.h:360
std::vector< std::string > GetAliases() const
Returns the aliases of the objects in the map.
Definition: ObjectMap.cpp:174
std::list< std::string > _algoProdObjects
Definition: DataStore.h:335
DataStore(const std::string &name, ObjectCategory category)
Definition: DataStore.cpp:17
Status
Aliases for memory occupation levels.
Definition: Memory.h:23
bool IsTrackingRemovedObjects()
Checks whether the data store is tracking removed objects or not.
Definition: DataStore.h:258
std::vector< observer_ptr< DataProvider > > _providers
Definition: DataStore.h:329
Undefined value (for default initialization).
observer_ptr< DataType > GetObject(const std::string &name)
Provides a data object.
Definition: DataStore.hpp:67
void AddObject(const std::string &name, std::shared_ptr< DataType > obj)
Definition: DataStore.h:348
Definition: DataStore.h:353
Data store class.
Definition: DataStore.h:41
ObjectWrapper GetObjectWrapper(const std::string &objName)
Provides a data object wrapper.
Definition: DataStore.cpp:129
bool FreeRemoved(Memory::Status memStatus)
Release the memory allocated for removed objects.
Definition: DataStore.cpp:44
const std::string & GetNameOfAliasedObject(const std::string &aliasName)
Gets the name of the object corresponding to an alias.
Definition: DataStore.h:209
ObjectCategory _category
Definition: DataStore.h:330