source: XIOS/dev/dev_ym/XIOS_COUPLING/src/object_template.hpp @ 2241

Last change on this file since 2241 was 2241, checked in by jderouillat, 3 years ago

Clean Context and it members before MPI_Finalize (to avoid some MPI call after MPI_Finalize, such as MPI_Free_mem in ServerBuffer? destructor)

  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
File size: 5.3 KB
Line 
1#ifndef __XIOS_CObjectTemplate__
2#define __XIOS_CObjectTemplate__
3
4/// XIOS headers ///
5#include "xios_spl.hpp"
6#include "attribute_map.hpp"
7#include "node_enum.hpp"
8#include "buffer_in.hpp"
9#include "event_server.hpp"
10#include "attribute.hpp"
11#include "context_client.hpp"
12
13namespace xios
14{
15   /// ////////////////////// Déclarations ////////////////////// ///
16   template <class T>
17      class CObjectTemplate
18         : public CObject
19         , public virtual CAttributeMap
20   {
21
22         /// Friend ///
23         friend class CObjectFactory;
24
25         /// Typedef ///
26         typedef CAttributeMap SuperClassMap;
27         typedef CObject SuperClass;
28         typedef T DerivedType;
29
30         enum EEventId
31         {
32           EVENT_ID_SEND_ATTRIBUTE=100
33         } ;
34
35      public :
36
37         /// Autres ///
38         virtual StdString toString(void) const;
39         virtual void fromString(const StdString & str);
40
41//         virtual void toBinary  (StdOStream & os) const;
42//         virtual void fromBinary(StdIStream & is);
43         virtual string getName(void) const ;
44         virtual void parse(xml::CXMLNode & node);
45
46         /// Accesseurs ///
47         ENodeType getType(void) const;
48
49         /// Test ///
50         virtual bool hasChild(void) const;
51
52         /// Traitements ///
53         virtual void solveDescInheritance(bool apply, const CAttributeMap * const parent = 0);
54 
55         /// Traitement statique ///
56         static void ClearAllAttributes(void);
57         std::map<int, size_t> getMinimumBufferSizeForAttributes(CContextClient* client);
58         void sendAttributToServer(const string& id, CContextClient* client, const string& objectId="");
59         void sendAttributToServer(CAttribute& attr, CContextClient* client, const string& objectId="") ;
60         void sendAllAttributesToServer(CContextClient* client, const string& objectId="");
61         void sendAddItem(const string& id, int itemType, CContextClient* client, const string& objectId="");
62         static void recvAttributFromClient(CEventServer& event) ;
63         static bool dispatchEvent(CEventServer& event) ;
64
65         bool isEqual(const string& id, const vector<StdString>& excludedAttrs);
66         bool isEqual(T* obj, const vector<StdString>& excludedAttrs);
67
68         /// Accesseur statique ///
69         static std::vector<std::shared_ptr<DerivedType> > &
70            GetAllVectobject(const StdString & contextId);
71         static std::vector<std::shared_ptr<DerivedType> > *
72            GetAllVectobjectPtr(const StdString & contextId);
73
74         static xios_map<StdString, xios_map<StdString, std::shared_ptr<DerivedType> > >*
75            GetAllMapobject();
76
77
78         /// Destructeur ///
79         virtual ~CObjectTemplate(void);
80
81         static bool has(const string& id) ;
82         static bool has(const string& contextId, const string& id) ;
83         static T* get(const string& id) ;
84         static T* get(const T* ptr) ;
85         static T* get(const string& contextId, const string& id) ;
86         T* get(void) ;
87         std::shared_ptr<T> getShared(void) ;
88         static std::shared_ptr<T> getShared(const T* ptr) ;
89
90         static T* create(const string& id=string("")) ;
91         static T* createAlias(const string& id, const string& alias) ;
92         void createAlias(const string& alias) ;
93
94         static const vector<T*> getAll() ;
95         static const vector<T*> getAll(const string& contextId) ;
96
97         void generateCInterface(ostream& oss) ;
98         void generateFortran2003Interface(ostream& oss) ;
99         void generateFortranInterface(ostream& oss) ;
100     
101      // manage inherited id which is herited by reference
102        void setInheritedId(T* obj) ;
103        bool hasInheritedId(void) { return hasInheritedId_ ;}
104        string getInheritedId(void) { return  inheritedId_ ;}
105
106      private: 
107         std::string inheritedId_ ;
108         bool hasInheritedId_ = false;
109
110      // manage the template id
111      public:
112         void setTemplateId(T* obj) ; //<! set the id of the object that served as template
113         bool hasTemplateId(void) {return hasTemplateId_;} //<! return  hasTemplateId_
114         string getTemplateId(void)
115         {
116           if (hasTemplateId_) return templateId_  ;
117           else if (hasId() && !hasAutoGeneratedId()) return getId() ;
118           else if (hasInheritedId()) return getInheritedId() ;
119           else return getId() ;
120         }
121      private:
122         std::string templateId_ ;    //<! the id of the object that served as template
123         bool hasTemplateId_ = false; //<! true if templateId is set
124     
125      protected :
126
127         /// Constructeurs ///
128         CObjectTemplate(void);
129         explicit CObjectTemplate(const StdString & id);
130         CObjectTemplate(const CObjectTemplate<T> & object,
131                         bool withAttrList = true, bool withId = true);
132         CObjectTemplate(const CObjectTemplate<T> * const object); // Not implemented.
133
134      private :
135
136         /// Propriétés statiques ///
137         static xios_map<StdString,
138                xios_map<StdString,
139                std::shared_ptr<DerivedType> > > AllMapObj;
140         static xios_map<StdString,
141                std::vector<std::shared_ptr<DerivedType> > > AllVectObj;
142
143         static xios_map< StdString, long int > GenId ;
144
145   }; // class CObjectTemplate
146} // namespace xios
147
148//#include "object_template_impl.hpp"
149
150#endif // __XIOS_CObjectTemplate__
Note: See TracBrowser for help on using the repository browser.