Panzer  Version of the Day
Panzer_TypeAssocMap.hpp
Go to the documentation of this file.
1 #ifndef __Panzer_TypeAssocMap_hpp__
2 #define __Panzer_TypeAssocMap_hpp__
3 
4 #include "Sacado_mpl_for_each.hpp"
5 
6 namespace panzer {
7 
11 template <typename TypesVector,typename ValueType>
12 class TypeAssocMap {
13 public:
14  typedef TypesVector types_vector;
15 
17  {
19  mapValues_.resize(sz);
20  }
21 
23  template <typename T>
24  void set(ValueType v)
25  {
27  mapValues_[idx] = v;
28  }
29 
31  template <typename T>
32  ValueType get() const
33  {
35  return mapValues_[idx];
36  }
37 
38  template <typename BuilderOpT>
39  void buildObjects(const BuilderOpT & builder)
40  { Sacado::mpl::for_each<TypesVector>(BuildObjects<BuilderOpT>(mapValues_,builder)); }
41 
42 public:
43 
45  template <typename BuilderOpT>
46  struct BuildObjects {
47  std::vector<ValueType> & mv_;
48  const BuilderOpT & builder_;
49  BuildObjects(std::vector<ValueType> & mv,const BuilderOpT& builder) : mv_(mv), builder_(builder) {}
50 
51  template <typename T> void operator()(T) const {
53  mv_[idx] = builder_.template build<T>();
54  }
55  };
56 
57  std::vector<ValueType> mapValues_;
58 };
59 
60 }
61 
62 #endif
This struct helps will build the values stored in the map.
void buildObjects(const BuilderOpT &builder)
std::vector< ValueType > mapValues_
BuildObjects(std::vector< ValueType > &mv, const BuilderOpT &builder)