source: XIOS/trunk/src/node/context.hpp @ 645

Last change on this file since 645 was 645, checked in by rlacroix, 9 years ago

Cleanup: Remove now deprecated code.

  • 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: 7.6 KB
Line 
1#ifndef __XIOS_CContext__
2#define __XIOS_CContext__
3
4/// XIOS headers ///
5#include "xios_spl.hpp"
6//#include "node_type.hpp"
7#include "calendar_wrapper.hpp"
8
9#include "declare_group.hpp"
10//#include "context_client.hpp"
11//#include "context_server.hpp"
12#include "data_output.hpp"
13#include "garbage_collector.hpp"
14
15#include "mpi.hpp"
16
17
18namespace xios {
19   class CContextClient;
20   class CContextServer;
21
22
23   /// ////////////////////// Déclarations ////////////////////// ///
24   class CContextGroup;
25   class CContextAttributes;
26   class CContext;
27   class CFile;
28   ///--------------------------------------------------------------
29
30   // Declare/Define CFileAttribute
31   BEGIN_DECLARE_ATTRIBUTE_MAP(CContext)
32#  include "context_attribute.conf"
33   END_DECLARE_ATTRIBUTE_MAP(CContext)
34
35   ///--------------------------------------------------------------
36  /*!
37  \class CContext
38   This class corresponds to the concrete presentation of context in xml file and in play an essential role in XIOS
39   Each object of this class contains all root definition of elements: files, fiels, domains, axis, etc, ... from which
40   we can have access to each element.
41   In fact, every thing must a be inside a particuliar context. After the xml file (iodef.xml) is parsed,
42   object of the class is created and its contains all information of other elements in the xml file.
43  */
44   class CContext
45      : public CObjectTemplate<CContext>
46      , public CContextAttributes
47   {
48         public :
49         enum EEventId
50         {
51           EVENT_ID_CLOSE_DEFINITION,EVENT_ID_UPDATE_CALENDAR,
52           EVENT_ID_CREATE_FILE_HEADER,EVENT_ID_CONTEXT_FINALIZE,
53           EVENT_ID_POST_PROCESS
54         };
55
56         /// typedef ///
57         typedef CObjectTemplate<CContext>   SuperClass;
58         typedef CContextAttributes SuperClassAttribute;
59
60      public :
61
62         typedef CContextAttributes RelAttributes;
63         typedef CContext           RelGroup;
64
65         //---------------------------------------------------------
66
67      public :
68
69         /// Constructeurs ///
70         CContext(void);
71         explicit CContext(const StdString & id);
72         CContext(const CContext & context);       // Not implemented yet.
73         CContext(const CContext * const context); // Not implemented yet.
74
75         /// Destructeur ///
76         virtual ~CContext(void);
77
78         //---------------------------------------------------------
79
80      public :
81
82         /// Mutateurs ///
83         void setCalendar(boost::shared_ptr<CCalendar> newCalendar);
84
85         /// Accesseurs ///
86         boost::shared_ptr<CCalendar>      getCalendar(void) const;
87
88      public :
89         // Initialize server or client
90         void initServer(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtClient = 0);
91         void initClient(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtServer = 0);
92         bool isInitialized(void);
93
94         // Put sever or client into loop state
95         bool eventLoop(void);
96
97         bool checkBuffersAndListen(void);
98
99         // Finalize a context
100         void finalize(void);
101         void closeDefinition(void);
102
103         // Some functions to process context
104         void findAllEnabledFields(void);
105         void solveAllInheritance(bool apply=true);
106         void findEnabledFiles(void);
107         void findEnabledReadModeFiles(void);
108         void closeAllFile(void);
109         void updateCalendar(int step);
110         void createFileHeader(void );
111         void solveAllRefOfEnabledFields(bool sendToServer);
112         void buildFilterGraphOfEnabledFields();
113         void startPrefetchingOfEnabledReadModeFiles();
114         void checkPrefetchingOfEnabledReadModeFiles();
115         void findFieldsWithReadAccess(void);
116         void solveAllRefOfFieldsWithReadAccess();
117         void buildFilterGraphOfFieldsWithReadAccess();
118         void postProcessing();
119
120         std::map<int, StdSize>& getDataSize();
121         void setClientServerBuffer();
122
123         // Send context close definition
124         void sendCloseDefinition(void);
125         // There are something to send on closing context defintion
126         void sendUpdateCalendar(int step);
127         void sendCreateFileHeader(void);
128         void sendEnabledFiles();
129         void sendEnabledFields();
130         void sendRefDomainsAxis();
131         void sendRefGrid();
132         void sendPostProcessing();
133
134         const StdString& getIdServer();
135
136         // Client side: Receive and process messages
137         static void recvUpdateCalendar(CEventServer& event);
138         void recvUpdateCalendar(CBufferIn& buffer);
139         static void recvCloseDefinition(CEventServer& event);
140         static void recvCreateFileHeader(CEventServer& event);
141         void recvCreateFileHeader(CBufferIn& buffer);
142         static void recvSolveInheritanceContext(CEventServer& event);
143         void recvSolveInheritanceContext(CBufferIn& buffer);
144         static void recvPostProcessing(CEventServer& event);
145         void recvPostProcessing(CBufferIn& buffer);
146
147         // dispatch event
148         static bool dispatchEvent(CEventServer& event);
149
150      public:
151        // Get current context
152        static CContext* getCurrent(void);
153
154        // Get context root
155        static CContextGroup* getRoot(void);
156
157        // Set current context
158        static void setCurrent(const string& id);
159
160        // Create new context
161        static CContext* create(const string& id = "");
162
163        /// Accesseurs statiques ///
164        static StdString GetName(void);
165        static StdString GetDefName(void);
166        static ENodeType GetType(void);
167
168        static CContextGroup* GetContextGroup(void);
169
170        // Some functions to visualize structure of current context
171        static void ShowTree(StdOStream & out = std::clog);
172        static void CleanTree(void);
173
174      public :
175         // Parse xml node and write all info into context
176         virtual void parse(xml::CXMLNode & node);
177
178         // Visualize a context
179         virtual StdString toString(void) const;
180
181
182         // Solve all inheritance relation in current context
183         virtual void solveDescInheritance(bool apply, const CAttributeMap * const parent = 0);
184
185         // Verify if all root definition in a context have children
186         virtual bool hasChild(void) const;
187
188      public :
189         // Calendar of context
190         boost::shared_ptr<CCalendar>   calendar;
191
192         // List of all enabled files (files on which fields are written or read)
193         std::vector<CFile*> enabledFiles;
194         // List of all enabled files in read mode (files on which fields are read)
195         std::vector<CFile*> enabledReadModeFiles;
196
197         // List of all fields whose instant data is accessible from the public API
198         std::vector<CField*> fieldsWithReadAccess;
199
200         // Context root
201         static shared_ptr<CContextGroup> root;
202
203         // Determine context on client or not
204         bool hasClient;
205
206         // Determine context on server or not
207         bool hasServer;
208
209         // Concrete context server
210         CContextServer* server;
211
212         // Concrete contex client
213         CContextClient* client;
214
215      private:
216         bool isPostProcessed;
217         bool finalized;
218         std::map<int, StdSize> dataSize_;
219         StdString idServer_;
220         CGarbageCollector garbageCollector;
221
222
223      public: // Some function maybe removed in the near future
224        // virtual void toBinary  (StdOStream & os) const;
225        // virtual void fromBinary(StdIStream & is);
226   }; // class CContext
227
228   ///--------------------------------------------------------------
229
230   // Declare/Define CContextGroup and CContextDefinition
231   DECLARE_GROUP(CContext);
232
233   ///--------------------------------------------------------------
234
235} // namespace xios
236
237#endif // __XIOS_CContext__
Note: See TracBrowser for help on using the repository browser.