Proto  3.2
Proto_MBLevelArgs.H
Go to the documentation of this file.
1 #pragma once
2 #ifndef _PROTO_MB_LEVEL_ARGS_
3 #define _PROTO_MB_LEVEL_ARGS_
4 
5 #include <string>
6 #include <any>
7 #include <unordered_map>
8 
9 #include "Proto.H"
10 
11 namespace Proto
12 {
13  struct DataWrapper {
14  virtual ~DataWrapper() = default;
15  };
16 
17  template <typename T, unsigned int C, MemType MEM, Centering CTR=PR_CELL>
19 
20  std::shared_ptr<MBLevelBoxData<T,C,MEM,CTR>> data;
21 
23  : data(std::move(d)) {}
24  };
25 
26  template<typename MAP, MemType MEM>
27  class MBLevelArgs {
28  private:
29 
30  std::shared_ptr<MBLevelMap<MAP,MEM>> _map;
31  std::unordered_map<std::string, std::shared_ptr<DataWrapper>> _data;
32  std::unordered_map<std::string, std::any> constants;
33  public:
34 
35  MBLevelArgs(std::shared_ptr<MBLevelMap<MAP,MEM>>& map) { _map = map; }
36 
37  MBLevelArgs(const MBLevelArgs& rhs) = default;
38 
39  inline const MBDisjointBoxLayout& layout() { return _map->layout(); }
40  inline const MBLevelMap<MAP,MEM>& map() { return *_map; }
41  template <typename T, unsigned int C, MemType DATAMEM, Centering CTR=PR_CELL>
42  inline void Set(const std::string& label, const std::shared_ptr<MBLevelBoxData<T, C, DATAMEM, CTR>>& inData);
43 
44  template<typename T, unsigned int C, MemType DATAMEM, Centering CTR=PR_CELL>
45  inline MBLevelBoxData<T,C,DATAMEM,CTR>& Get(const std::string& label);
46 
47  template <typename T>
48  inline void Set(const std::string& label, const T& value);
49 
50  template<typename T>
51  inline T Get(const std::string& label) const;
52  };
53 
54  #include "implem/Proto_MBLevelArgsImplem.H"
55 }
56 #endif
Definition: Proto_MBLevelArgs.H:18
const MBLevelMap< MAP, MEM > & map()
Definition: Proto_MBLevelArgs.H:40
Definition: Proto_MBLevelArgs.H:13
std::unordered_map< std::string, std::any > constants
Definition: Proto_MBLevelArgs.H:32
const MBDisjointBoxLayout & layout()
Definition: Proto_MBLevelArgs.H:39
Single Level Mapped Multiblock Map.
Definition: Proto_MBLevelBoxData.H:19
Multiblock Level Box Data.
Definition: Proto_MBLevelBoxData.H:17
MBLevelArgs(std::shared_ptr< MBLevelMap< MAP, MEM >> &map)
Definition: Proto_MBLevelArgs.H:35
virtual ~DataWrapper()=default
std::unordered_map< std::string, std::shared_ptr< DataWrapper > > _data
Definition: Proto_MBLevelArgs.H:31
Definition: Proto_Array.H:17
MBLevelBoxDataWrapper(std::shared_ptr< MBLevelBoxData< T, C, MEM, CTR >> d)
Definition: Proto_MBLevelArgs.H:22
Definition: Proto_MBDisjointBoxLayout.H:14
std::shared_ptr< MBLevelMap< MAP, MEM > > _map
Definition: Proto_MBLevelArgs.H:30
std::shared_ptr< MBLevelBoxData< T, C, MEM, CTR > > data
Definition: Proto_MBLevelArgs.H:20
Definition: Proto_MBLevelArgs.H:27