XIOS  1.0
Xml I/O Server
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Amis Macros
group_factory_impl.hpp
Aller à la documentation de ce fichier.
1 #ifndef __XIOS_CGroupFactory_impl__
2 #define __XIOS_CGroupFactory_impl__
3 
4 #include "group_factory.hpp"
5 
6 namespace xios
7 {
9 
10  template <typename U>
11  void CGroupFactory::AddGroup(std::shared_ptr<U> pgroup,
12  std::shared_ptr<U> cgroup)
13  {
14  if (cgroup.get() == NULL || pgroup.get() == NULL )
15  ERROR("CGroupFactory::AddGroup(std::shared_ptr<U> pgroup, std::shared_ptr<U> cgroup)",
16  << " pgroup or cgroup NULL !");
17  if (!cgroup->hasId())
18  pgroup->groupList.insert(pgroup->groupList.end(), cgroup.get());
19  else
20  {
21  pgroup->groupList.insert(pgroup->groupList.end(), cgroup.get());
22  pgroup->groupMap.insert(std::make_pair(cgroup->getId(), cgroup.get()));
23  }
24  }
25 
26  template <typename U>
27  void CGroupFactory::AddChild(std::shared_ptr<U> group,
28  std::shared_ptr<typename U::RelChild> child)
29  {
30  if (group.get() == NULL || child.get() == NULL )
31  ERROR("CGroupFactory::AddGroup(std::shared_ptr<U> pgroup, std::shared_ptr<U> cgroup)",
32  << " pgroup or cgroup NULL !");
33  if (!child->hasId())
34  group->childList.insert(group->childList.end(), child.get());
35  else
36  {
37  group->childList.insert(group->childList.end(), child.get());
38  group->childMap.insert(std::make_pair(child->getId(), child.get()));
39  }
40  }
41 
42  template <typename U>
43  std::shared_ptr<U>
44  CGroupFactory::CreateGroup(std::shared_ptr<U> group, const StdString & id)
45  {
48  if (id.size() == 0)
49  {
50  std::shared_ptr<U> value = CObjectFactory::CreateObject<U>(CObjectFactory::GenUId<U>());
51  group->groupList.insert(group->groupList.end(), value.get());
52  group->groupMap.insert(std::make_pair(value->getId(), value.get()));
53  return (value);
54  }
55  else if (CGroupFactory::HasGroup(group, id))
56  return (CGroupFactory::GetGroup(group, id));
57  else
58  {
59  std::shared_ptr<U> value = CObjectFactory::CreateObject<U>(id);
60  group->groupList.insert(group->groupList.end(), value.get());
61  group->groupMap.insert(std::make_pair(id, value.get()));
62  return (value);
63  }
64  }
65 
66  template <typename U>
67  std::shared_ptr<typename U::RelChild>
68  CGroupFactory::CreateChild(std::shared_ptr<U> group, const StdString & id)
69  {
72  if (id.size() == 0)
73  {
74  std::shared_ptr<typename U::RelChild> value =
75  CObjectFactory::CreateObject<typename U::RelChild>();
76  group->childList.insert(group->childList.end(), value.get());
77  group->childMap.insert(std::make_pair(value->getId(), value.get()));
78  return (value);
79  }
80  else if (CGroupFactory::HasChild(group, id))
81  return (CGroupFactory::GetChild(group, id));
82  else
83  {
84  std::shared_ptr<typename U::RelChild> value =
85  CObjectFactory::CreateObject<typename U::RelChild>(id);
86  group->childList.insert(group->childList.end(), value.get());
87  group->childMap.insert(std::make_pair(id, value.get()));
88  return (value);
89  }
90  }
91 
92  template <typename U>
93  bool CGroupFactory::HasGroup(std::shared_ptr<U> group, const StdString & id)
94  { return (group->groupMap.find(id) != group->groupMap.end()); }
95 
96  template <typename U>
97  bool CGroupFactory::HasChild(std::shared_ptr<U> group, const StdString & id)
98  { return (group->childMap.find(id) != group->childMap.end()); }
99 
100  template <typename U>
101  int CGroupFactory::GetGroupNum(std::shared_ptr<U> group)
102  { return (group->groupList.size()); }
103 
104  template <typename U>
105  int CGroupFactory::GetGroupIdNum(std::shared_ptr<U> group)
106  { return (group->groupMap.size()); }
107 
108  template <typename U>
109  int CGroupFactory::GetChildNum(std::shared_ptr<U> group)
110  { return (group->childList.size()); }
111 
112  template <typename U>
113  int CGroupFactory::GetChildIdNum(std::shared_ptr<U> group)
114  { return (group->childMap.size()); }
115 
116  template <typename U>
117  std::shared_ptr<U>
118  CGroupFactory::GetGroup(std::shared_ptr<U> group, const StdString & id)
119  {
120  if (!CGroupFactory::HasGroup<U>(group, id))
121  ERROR("CGroupFactory::GetGroup(std::shared_ptr<U> group, const StdString & id)",
122  << "[ id = " << id << ", U = " << U::GetName() << " ] "
123  << " group is not referenced !");
124  return (group->groupMap[id]->getShared());
125  }
126 
127  template <typename U>
128  std::shared_ptr<typename U::RelChild>
129  CGroupFactory::GetChild(std::shared_ptr<U> group, const StdString & id)
130  {
131  if (!CGroupFactory::HasChild<U>(group, id))
132  ERROR("CGroupFactory::GetChild(std::shared_ptr<U> group, const StdString & id)",
133  << "[ id = " << id << ", U = " << U::GetName() << " ] "
134  << " child is not referenced !");
135  return (group->childMap[id]->getShared());
136  }
137 
138 } // namespace xios
139 
140 #endif // __XIOS_CGroupFactory_impl__
static void SetCurrentContextId(const StdString &context)
Mutateurs ///.
static std::shared_ptr< U > GetGroup(std::shared_ptr< U > group, const StdString &id)
static std::shared_ptr< typename U::RelChild > CreateChild(std::shared_ptr< U > group, const StdString &id=StdString(""))
static bool HasGroup(std::shared_ptr< U > group, const StdString &id)
Tests ///.
static std::shared_ptr< typename U::RelChild > GetChild(std::shared_ptr< U > group, const StdString &id)
static std::shared_ptr< U > CreateGroup(std::shared_ptr< U > group, const StdString &id=StdString(""))
Instanciateur ///.
static int GetChildNum(std::shared_ptr< U > group)
std::string StdString
Definition: xios_spl.hpp:48
#define xios(arg)
static int GetGroupIdNum(std::shared_ptr< U > group)
static void AddChild(std::shared_ptr< U > group, std::shared_ptr< typename U::RelChild > child)
static void AddGroup(std::shared_ptr< U > pgroup, std::shared_ptr< U > cgroup)
////////////////////// Définitions ////////////////////// ///
CATCH CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar *scalarDestination, CScalar *scalarSource, CReduceScalarToScalar *algo ERROR)("CScalarAlgorithmReduceScalar::CScalarAlgorithmReduceScalar(CScalar* scalarDestination, CScalar* scalarSource, CReduceScalarToScalar* algo)",<< "Operation must be defined."<< "Scalar source "<< scalarSource->getId()<< std::endl<< "Scalar destination "<< scalarDestination->getId())
static int GetChildIdNum(std::shared_ptr< U > group)
static bool HasChild(std::shared_ptr< U > group, const StdString &id)
static int GetGroupNum(std::shared_ptr< U > group)
static StdString & GetCurrentContextId(void)
Accesseurs ///.