1/*!
2 * \file   mfront/include/MFront/MaterialPropertyInterfaceProxy.ixx
3 * \brief
4 *
5 * \author Thomas Helfer
6 * \date   09 nov 2006
7 * \copyright Copyright (C) 2006-2018 CEA/DEN, EDF R&D. All rights
8 * reserved.
9 * This project is publicly released under either the GNU GPL Licence
10 * or the CECILL-A licence. A copy of thoses licences are delivered
11 * with the sources of TFEL. CEA or EDF may also distribute this
12 * project under specific licensing conditions.
13 */
14
15#ifndef LIB_MFRONTLAWINTERFACEPROXY_IXX
16#define LIB_MFRONTLAWINTERFACEPROXY_IXX
17
18namespace mfront{
19
20  template<typename Interface>
21  MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy()
22  {
23    typedef MaterialPropertyInterfaceFactory MLIF;
24    auto& mlif = MLIF::getMaterialPropertyInterfaceFactory();
25    mlif.registerInterfaceCreator(Interface::getName(),&createInterface);
26    mlif.registerInterfaceAlias(Interface::getName(),Interface::getName());
27  }
28
29  template<typename Interface>
30  MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy(const std::string& name)
31  {
32    typedef MaterialPropertyInterfaceFactory MLIF;
33    auto& mlif = MLIF::getMaterialPropertyInterfaceFactory();
34    mlif.registerInterfaceCreator(Interface::getName(),&createInterface);
35    mlif.registerInterfaceAlias(Interface::getName(),name);
36  }
37
38  template<typename Interface>
39  template<typename InputIterator>
40  MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy(const std::string& name,
41							      const InputIterator b,
42							      const InputIterator e)
43  {
44    typedef MaterialPropertyInterfaceFactory MLIF;
45    auto& mlif = MLIF::getMaterialPropertyInterfaceFactory();
46    InputIterator p;
47    mlif.registerInterfaceCreator(Interface::getName(),&createInterface);
48    mlif.registerInterfaceAlias(Interface::getName(),name);
49    for(p=b;p!=e;++p){
50      mlif.registerInterfaceDependency(Interface::getName(),*p);
51    }
52  } // end of MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy
53
54
55  template<typename Interface>
56  template<typename InputIterator>
57  MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy(const InputIterator b,
58							      const InputIterator e)
59  {
60    typedef MaterialPropertyInterfaceFactory MLIF;
61    auto& mlif = MLIF::getMaterialPropertyInterfaceFactory();
62    InputIterator p;
63    mlif.registerInterfaceCreator(Interface::getName(),&createInterface);
64    for(p=b;p!=e;++p){
65      mlif.registerInterfaceAlias(Interface::getName(),*p);
66    }
67  } // end of MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy
68
69  template<typename Interface>
70  MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy(const std::string& name,
71							      const std::string& dep)
72  {
73    typedef MaterialPropertyInterfaceFactory MLIF;
74    auto& mlif = MLIF::getMaterialPropertyInterfaceFactory();
75    mlif.registerInterfaceCreator(Interface::getName(),&createInterface);
76    mlif.registerInterfaceAlias(Interface::getName(),name);
77    mlif.registerInterfaceDependency(Interface::getName(),dep);
78  } // end of MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy
79
80  template<typename Interface>
81  template<typename InputIterator>
82  MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy(const InputIterator b,
83							      const InputIterator e,
84							      const std::string& dep)
85  {
86    typedef MaterialPropertyInterfaceFactory MLIF;
87    auto& mlif = MLIF::getMaterialPropertyInterfaceFactory();
88    InputIterator p;
89    mlif.registerInterfaceCreator(Interface::getName(),&createInterface);
90    for(p=b;p!=e;++p){
91      mlif.registerInterfaceAlias(Interface::getName(),*p);
92    }
93    mlif.registerInterfaceDependency(Interface::getName(),dep);
94  } // end of MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy
95
96  template<typename Interface>
97  template<typename InputIterator,
98	   typename InputIterator2>
99  MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy(const InputIterator b,
100							      const InputIterator e,
101							      const InputIterator2 b2,
102							      const InputIterator2 e2)
103  {
104    typedef MaterialPropertyInterfaceFactory MLIF;
105    auto& mlif = MLIF::getMaterialPropertyInterfaceFactory();
106    InputIterator  p;
107    InputIterator2 p2;
108    mlif.registerInterfaceCreator(Interface::getName(),&createInterface);
109    for(p=b;p!=e;++p){
110      mlif.registerInterfaceAlias(Interface::getName(),*p);
111    }
112    for(p2=b2;p2!=e2;++p2){
113      mlif.registerInterfaceDependency(Interface::getName(),*p2);
114    }
115  } // end of MaterialPropertyInterfaceProxy<Interface>::MaterialPropertyInterfaceProxy
116
117  template<typename Interface>
118  std::shared_ptr<AbstractMaterialPropertyInterface>
119  MaterialPropertyInterfaceProxy<Interface>::createInterface()
120  {
121    return std::make_shared<Interface>();
122  }
123
124} // end of namespace mfront
125
126#endif /* LIB_MFRONTLAWINTERFACEPROXY_IXX */
127