roadrunner  2.6.0
Fast simulator for SBML models
rrRoadRunnerMap.h
1 //
2 // Created by Ciaran on 09/12/2021.
3 //
4 
5 #ifndef ROADRUNNER_RRROADRUNNERMAP_H
6 #define ROADRUNNER_RRROADRUNNERMAP_H
7 
8 #include "rrRoadRunner.h"
9 #include <unordered_map>
10 #include <thread>
11 #include "thread_pool.hpp"
12 #include "phmap.h"
13 
14 namespace rr {
15 
22  static std::mutex rrMapMtx;
23 
24 
30  using ThreadSafeUnorderedMap = phmap::parallel_node_hash_map<std::string, std::unique_ptr<RoadRunner>>;
31 
39  class RoadRunnerMap {
40  public:
45  RoadRunnerMap() = default;
46 
51  explicit RoadRunnerMap(const std::vector<std::string> &sbmlStringsOrFiles, unsigned int numThreads);
52 
57  std::vector<std::string> getKeys() const;
58 
64  std::vector<RoadRunner *> getValues() const;
65 
70  std::vector<std::pair<std::string, RoadRunner *>> getItems() const;
71 
82  void insert(std::unique_ptr<RoadRunner> roadRunner);
83 
91  void insert(const std::string &key, std::unique_ptr<RoadRunner> roadRunner);
92 
101  void insert(const std::string &sbmlOrFile);
102 
112  void insert(const std::string &key, const std::string &sbmlOrFile);
113 
123  void insert(const std::vector<std::string> &sbmlStringsOrFiles);
124 
129  void erase(const std::string &key);
130 
147  ThreadSafeUnorderedMap::iterator begin();
148  ThreadSafeUnorderedMap::const_iterator begin() const;
149 
159  ThreadSafeUnorderedMap::iterator end();
160  ThreadSafeUnorderedMap::const_iterator end() const;
161 
166  ThreadSafeUnorderedMap::iterator find(const std::string &key);
167 
172  ThreadSafeUnorderedMap::const_iterator find(const std::string &key) const;
173 
177  bool empty() const;
178 
182  unsigned int size() const;
183 
187  void clear();
188 
193  RoadRunner *operator[](const std::string &key);
194 
199  RoadRunner *at(const std::string &key);
200 
201  RoadRunner *at(const std::string &key) const;
202 
206  void wait_for_tasks();
207 
213  size_t count(const std::string &key);
214 
225  void setNumThreads(unsigned int n);
226 
230  unsigned int getNumThreads() const;
231 
232  private:
238  unsigned int numThreads_ = 1;
239 
244  void loadParallel(const std::vector<std::string> &sbmlFilesOrStrings);
245 
249  void loadSerial(const std::vector<std::string> &sbmlFilesOrStrings);
250 
254  ThreadSafeUnorderedMap rrMap_{};
255 
259  std::unique_ptr<thread_pool> pool = nullptr;
260  };
261 
262 }
263 
264 #endif //ROADRUNNER_RRROADRUNNERMAP_H
Hash table designed for storing RoadRunner models.
Definition: rrRoadRunnerMap.h:39
void clear()
empty the map so that there are 0 elements left
Definition: rrRoadRunnerMap.cpp:120
std::vector< std::string > getKeys() const
Returns the keys of the map in order of insertion.
Definition: rrRoadRunnerMap.cpp:36
void wait_for_tasks()
wait for all tasks to finish before allowing program execution to continue
Definition: rrRoadRunnerMap.cpp:164
size_t count(const std::string &key)
count the number of keys with value
Definition: rrRoadRunnerMap.cpp:124
ThreadSafeUnorderedMap::iterator find(const std::string &key)
find item with key equal to
Definition: rrRoadRunnerMap.cpp:206
ThreadSafeUnorderedMap::iterator end()
Definition: rrRoadRunnerMap.cpp:198
ThreadSafeUnorderedMap::iterator begin()
map iterator
Definition: rrRoadRunnerMap.cpp:191
void erase(const std::string &key)
remove an element with
Definition: rrRoadRunnerMap.cpp:107
unsigned int getNumThreads() const
get the number of threds in the thread_pool
Definition: rrRoadRunnerMap.cpp:160
std::vector< RoadRunner * > getValues() const
return values of the map as a RoadRunnervector.
Definition: rrRoadRunnerMap.cpp:45
bool empty() const
return true if the map is empty
Definition: rrRoadRunnerMap.cpp:112
RoadRunnerMap()=default
Default construct a RoadRunnerMap.
RoadRunner * at(const std::string &key)
get borrowed reference from map for roadrunner model with key equal to
Definition: rrRoadRunnerMap.cpp:218
void setNumThreads(unsigned int n)
Reset the number of threads in the pool.
Definition: rrRoadRunnerMap.cpp:128
void insert(std::unique_ptr< RoadRunner > roadRunner)
Insert a.
Definition: rrRoadRunnerMap.cpp:63
std::vector< std::pair< std::string, RoadRunner * > > getItems() const
get items of this map as vector of std::pair<std::string, RoadRuner*> types.
Definition: rrRoadRunnerMap.cpp:54
RoadRunner * operator[](const std::string &key)
Getter operator.
Definition: rrRoadRunnerMap.cpp:214
unsigned int size() const
returns the number of elements in the map
Definition: rrRoadRunnerMap.cpp:116
The main RoadRunner class.
Definition: rrRoadRunner.h:59