roadrunner  2.6.0
Fast simulator for SBML models
ModelDataSymbolResolver.h
1 /*
2  * ModelDataSymbolResolver.h
3  *
4  * Created on: Jul 25, 2013
5  * Author: andy
6  */
7 
8 #ifndef ModelDataSymbolResolver_H_
9 #define ModelDataSymbolResolver_H_
10 
11 #include "LoadSymbolResolverBase.h"
12 #include "LLVMIncludes.h"
13 #include "LLVMModelDataSymbols.h"
14 #include "LLVMModelSymbols.h"
15 
16 namespace libsbml
17 {
18 class Model;
19 class Reaction;
20 }
21 
22 namespace rrllvm
23 {
26  class ModelDataLoadSymbolResolver : public LoadSymbolResolverBase
27  {
28  public:
29  ModelDataLoadSymbolResolver(llvm::Value* modelData, const ModelGeneratorContext& ctx);
30 
31  ~ModelDataLoadSymbolResolver() override {};
32 
36  virtual llvm::Value* loadSymbolValue(const std::string& symbol, const llvm::ArrayRef<llvm::Value*>& args = llvm::ArrayRef<llvm::Value*>()) override;
37 
38  private:
39  llvm::Value* modelData;
40  };
41 
42  class ModelDataStoreSymbolResolver : public StoreSymbolResolver
43  {
44  public:
45  ModelDataStoreSymbolResolver(llvm::Value* modelData,
46  const libsbml::Model* model, const LLVMModelSymbols& modelSymbols,
47  const LLVMModelDataSymbols& modelDataSymbols,
48  llvm::IRBuilder<>& builder,
49  LoadSymbolResolver& resolver);
50 
51  virtual ~ModelDataStoreSymbolResolver() {};
52 
53  virtual llvm::Value* storeSymbolValue(const std::string& symbol,
54  llvm::Value* value);
55  private:
56 
57  llvm::Value* modelData;
58  const libsbml::Model* model;
59  const LLVMModelSymbols& modelSymbols;
60  const LLVMModelDataSymbols& modelDataSymbols;
61  llvm::IRBuilder<>& builder;
62  LoadSymbolResolver& resolver;
63 
64  };
67 } /* namespace rr */
68 #endif /* rrLLVMModelDataSymbolResolver_H_ */