GranOO  3.0
A robust and versatile workbench to build 3D dynamic simulations based on the Discrete Element Method
SetOfManager.hpp
Go to the documentation of this file.
1 // This file is part of GranOO, a workbench for DEM simulation.
2 //
3 // Author(s) : - Damien Andre IRCER/UNILIM, Limoges France
4 // <damien.andre@unilim.fr>
5 // - Jean-luc Charles Arts et Metiers ParisTech, CNRS, I2M, Bordeaux France
6 // <jean-luc.charles@ensam.eu>
7 // - Jeremie Girardot Arts et Metiers ParisTech, CNRS, I2M, Bordeaux France
8 // <jeremie.girardot@ensam.eu>
9 // - Cedric Hubert LAMIH/UPHF, Valenciennes France
10 // <cedric.hubert@uphf.fr>
11 // - Ivan Iordanoff Arts et Metiers ParisTech, CNRS, I2M, Bordeaux France
12 // <ivan.iordanoff@ensam.eu>
13 //
14 // Copyright (C) 2008-2019 D. Andre, JL. Charles, J. Girardot, C. Hubert, I. Iordanoff
15 //
16 // This program is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 // This program is distributed in the hope that it will be useful,
22 // but WITHOUT ANY WARRANTY; without even the implied warranty of
23 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 // GNU General Public License for more details.
25 //
26 // You should have received a copy of the GNU General Public License
27 // along with this program. If not, see <http://www.gnu.org/licenses/>.
28 
29 
30 #ifndef _libDEM_SetOfManager_hpp_
31 #define _libDEM_SetOfManager_hpp_
32 
33 #include <map>
34 #include <functional>
35 
36 #include <boost/archive/text_iarchive.hpp>
37 #include <boost/archive/text_oarchive.hpp>
38 #include <boost/serialization/vector.hpp>
39 #include <boost/serialization/string.hpp>
40 #include <boost/serialization/serialization.hpp>
41 #include <boost/archive/text_iarchive.hpp>
42 #include <boost/serialization/export.hpp>
43 
44 
46 
47 
48 
49 
50 namespace GranOO3
51 {
52  namespace Core
53  {
54 
55  class SetOfMapBase;
56  class SetOfGeneric;
57  class Base;
58 
59  template<class T> class SetOfMap;
60  template<class T> class Serialization;
61 
62  template<class T> struct Read
63  {
64  static Base* new_object(const std::string& classID, std::istream& in) {
65  return Read<typename T::base>::new_object(classID, in);
66  }
67 
68  };
69 
70 
71  class SetOfManager : Core::Singleton<SetOfManager>
72  {
73  GRANOO_SINGLETON_CLASS(SetOfManager);
74 
75  public:
76  ~SetOfManager();
77 
78  // SetOfMap management
79  void add(SetOfMapBase&);
80 
81  // SetOf Management
82  void ClearAll();
83  bool IsClearing();
84  void SaveAll(boost::archive::text_oarchive&, const unsigned int);
85  void LoadAll(boost::archive::text_iarchive&, const unsigned int);
86 
87  std::ostream& SaveAllLight(std::ostream& out);
88  std::istream& LoadAllLight(std::istream& in);
89 
90  //Serialization prefix and suffix
91  void set_SerializationPrefix(const std::string&);
93  const std::string& get_SerializationPrefix();
94 
95  void set_SerializationSuffix(const std::string&);
97  const std::string& get_SerializationSuffix();
98 
99  template<class T>
100  bool RegisterGranOOClass();
101 
102 
103 
104  SetOfMapBase& get_setofMapBase(const std::string& id);
105  const SetOfMapBase& get_setofMapBase(const std::string& id) const;
106  std::map<std::string, SetOfMapBase*> get_allMap() const;
107  SetOfGeneric& get_setofgeneric(const std::string& classID, const std::string& setID);
108  bool is_set_exist(const std::string& classID, const std::string& setID) const;
109 
110  std::string info() const;
111 
112  private:
113  SetOfManager();
114  SetOfManager(const SetOfManager&) = delete;
116 
117  std::vector<std::string> get_ActiveSetOfMapID();
118  void PrintListItem(std::string, unsigned int size, unsigned int rank);
119 
120  private:
121  bool clearing_;
122  std::map<std::string, SetOfMapBase*> allSetOfMap_;
123  std::map<std::string, std::function<Base*(const std::string&, std::istream&)> > newFunctionMap_;
124  std::string serializationPrefix_;
125  std::string serializationSuffix_;
126  };
127 
128  template<class T>
129  bool
131  // Force Instanciation of SetOfMap<T>
133 
134  // Register the new fonction
135  std::function<Base*(const std::string&, std::istream&)> f = &Read<T>::new_object;
136  if (newFunctionMap_.count(T::class_ID()) == 0)
137  newFunctionMap_[T::class_ID()] = f;
138 
139  return true;
140  }
141 
142  inline bool
144  return clearing_;
145  }
146 
147  }
148 }
149 
150 
151 
152 #endif
Definition: Base.hpp:61
Definition: SetOfManager.hpp:60
Definition: SetOfGeneric.hpp:46
Definition: SetOfManager.hpp:72
void ResetSerializationPrefix()
Definition: SetOfManager.cpp:69
const std::string & get_SerializationPrefix()
Definition: SetOfManager.cpp:74
~SetOfManager()
Definition: SetOfManager.cpp:52
std::vector< std::string > get_ActiveSetOfMapID()
Definition: SetOfManager.cpp:226
std::string serializationSuffix_
Definition: SetOfManager.hpp:125
void LoadAll(boost::archive::text_iarchive &, const unsigned int)
Definition: SetOfManager.cpp:146
SetOfManager()
Definition: SetOfManager.cpp:44
std::map< std::string, SetOfMapBase * > allSetOfMap_
Definition: SetOfManager.hpp:122
SetOfMapBase & get_setofMapBase(const std::string &id)
Definition: SetOfManager.cpp:246
SetOfManager(const SetOfManager &)=delete
std::string info() const
Definition: SetOfManager.cpp:265
std::istream & LoadAllLight(std::istream &in)
Definition: SetOfManager.cpp:195
const std::string & get_SerializationSuffix()
Definition: SetOfManager.cpp:89
void PrintListItem(std::string, unsigned int size, unsigned int rank)
Definition: SetOfManager.cpp:235
void set_SerializationPrefix(const std::string &)
Definition: SetOfManager.cpp:64
void ResetSerializationSuffix()
Definition: SetOfManager.cpp:84
bool is_set_exist(const std::string &classID, const std::string &setID) const
Definition: SetOfManager.cpp:280
SetOfManager & operator=(const SetOfManager &)=delete
std::string serializationPrefix_
Definition: SetOfManager.hpp:124
void SaveAll(boost::archive::text_oarchive &, const unsigned int)
Definition: SetOfManager.cpp:121
bool RegisterGranOOClass()
Definition: SetOfManager.hpp:130
std::map< std::string, std::function< Base *(const std::string &, std::istream &)> > newFunctionMap_
Definition: SetOfManager.hpp:123
void add(SetOfMapBase &)
Definition: SetOfManager.cpp:56
std::map< std::string, SetOfMapBase * > get_allMap() const
Definition: SetOfManager.cpp:260
void ClearAll()
Definition: SetOfManager.cpp:94
std::ostream & SaveAllLight(std::ostream &out)
Definition: SetOfManager.cpp:171
bool IsClearing()
Definition: SetOfManager.hpp:143
void set_SerializationSuffix(const std::string &)
Definition: SetOfManager.cpp:79
SetOfGeneric & get_setofgeneric(const std::string &classID, const std::string &setID)
Definition: SetOfManager.cpp:274
bool clearing_
Definition: SetOfManager.hpp:121
Definition: SetOfMapBase.hpp:50
Definition: Singleton.hpp:75
static void instanciate()
Definition: Singleton.hpp:136
Definition: Common.hpp:198
const std::size_t size
Definition: Exprtk.hpp:783
Definition: SetOfManager.hpp:63
static Base * new_object(const std::string &classID, std::istream &in)
Definition: SetOfManager.hpp:64