roadrunner  2.6.0
Fast simulator for SBML models
SBMLModelObjectCache.h
1 //
2 // Created by Ciaran on 05/11/2021.
3 //
4 
5 #ifndef ROADRUNNER_SBMLMODELOBJECTCACHE_H
6 #define ROADRUNNER_SBMLMODELOBJECTCACHE_H
7 
8 #define NOMINMAX
9 
10 #include <memory>
11 #ifdef _MSC_VER
12 #pragma warning(disable: 4146)
13 #pragma warning(disable: 4141)
14 #pragma warning(disable: 4267)
15 #pragma warning(disable: 4624)
16 #endif
17 
18 #include "llvm/ADT/StringMap.h"
19 #include "llvm/ExecutionEngine/ObjectCache.h"
20 #include "llvm/ExecutionEngine/Orc/LLJIT.h"
21 
22 #ifdef _MSC_VER
23 #pragma warning(default: 4146)
24 #pragma warning(default: 4141)
25 #pragma warning(default: 4267)
26 #pragma warning(default: 4624)
27 #endif
28 
29 
30 namespace rrllvm {
31 
39  class SBMLModelObjectCache : public llvm::ObjectCache {
40  public:
41 
42  static SBMLModelObjectCache& getObjectCache();
43 
44  SBMLModelObjectCache(const SBMLModelObjectCache& objectCache) = delete;
45 
46  SBMLModelObjectCache& operator=(const SBMLModelObjectCache&) = delete;
47 
48  SBMLModelObjectCache(SBMLModelObjectCache&& objectCache) noexcept = delete;
49 
50  SBMLModelObjectCache& operator=(SBMLModelObjectCache&&) noexcept= delete;
51 
52  void notifyObjectCompiled(const llvm::Module *M, llvm::MemoryBufferRef ObjBuffer) override;
53 
54  std::unique_ptr<llvm::MemoryBuffer> getObject(const llvm::Module *M) override;
55 
56  std::vector<std::string> inspect();
57 
58  void addToCache(const std::string & key, std::unique_ptr<llvm::MemoryBuffer> mb);
59 
60  private:
61  SBMLModelObjectCache()= default;
62 
63  llvm::StringMap<std::unique_ptr<llvm::MemoryBuffer>> cachedObjects;
64 
65  };
66 
78 // static ObjectCache objectCache;
79 
80 }
81 
82 #endif //ROADRUNNER_SBMLMODELOBJECTCACHE_H
Stores SBML model as object files for later use.
Definition: SBMLModelObjectCache.h:39