source: XIOS/trunk/src/node/file.hpp @ 640

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

Start using the filter infrastructure to read and write fields.

Note that currently only the simple cases are working. References and all types of operations are disabled.

  • 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: 6.3 KB
Line 
1#ifndef __XIOS_CFile__
2#define __XIOS_CFile__
3
4/// XIOS headers ///
5#include "xios_spl.hpp"
6#include "field.hpp"
7#include "data_output.hpp"
8#include "data_input.hpp"
9#include "declare_group.hpp"
10#include "date.hpp"
11#include "attribute_enum.hpp"
12#include "attribute_enum_impl.hpp"
13#include "mpi.hpp"
14
15
16
17namespace xios {
18
19   /// ////////////////////// Déclarations ////////////////////// ///
20
21   class CFileGroup;
22   class CFileAttributes;
23   class CFile;
24
25   class CGarbageCollector;
26
27   ///--------------------------------------------------------------
28
29   // Declare/Define CFileAttribute
30   BEGIN_DECLARE_ATTRIBUTE_MAP(CFile)
31#  include "file_attribute.conf"
32   END_DECLARE_ATTRIBUTE_MAP(CFile)
33
34   ///--------------------------------------------------------------
35
36   /*!
37   \class CFile
38   This class corresponds to file component of the xml.
39   The class contains all the nessceary information to write data into a netcdf file: The most important thing
40   is the field(s) which will be written into file. Besides, there are some options to write
41   data into file, e.g: writting into only one file or multiple file; splitting a running into several files.
42   Moreover, there are some other attributes of netcdf file which are also stored in this class
43   */
44   class CFile
45      : public CObjectTemplate<CFile>
46      , public CFileAttributes
47   {
48         /// typedef ///
49         typedef CObjectTemplate<CFile>   SuperClass;
50         typedef CFileAttributes SuperClassAttribute;
51
52      public :
53         enum EEventId
54         {
55           EVENT_ID_ADD_FIELD=0,EVENT_ID_ADD_FIELD_GROUP, EVENT_ID_ADD_VARIABLE,
56           EVENT_ID_ADD_VARIABLE_GROUP, EVENT_ID_CREATE_ENABLED_FIELDS
57         } ;
58
59         typedef CFileAttributes RelAttributes;
60         typedef CFileGroup      RelGroup;
61
62         /// Constructeurs ///
63         CFile(void);
64         explicit CFile(const StdString & id);
65         CFile(const CFile & file);       // Not implemented yet.
66         CFile(const CFile * const file); // Not implemented yet.
67
68         /// Destructeur ///
69         virtual ~CFile(void);
70
71      public:
72         /// Accesseurs ///
73         boost::shared_ptr<CDataOutput> getDataOutput(void) const;
74         boost::shared_ptr<CDataInput> getDataInput(void) const;
75         CFieldGroup* getVirtualFieldGroup(void) const;
76         CVariableGroup* getVirtualVariableGroup(void) const;
77         std::vector<CField*> getAllFields(void) const;
78         std::vector<CVariable*> getAllVariables(void) const;
79
80         std::vector<CField* > getEnabledFields(int default_outputlevel = 5,
81                                                int default_level = 1,
82                                                bool default_enabled = true);
83
84      public :
85         // Some functions to verify state of file
86         bool isSyncTime(void) ;
87         bool checkSplit(void) ;
88         bool checkSync(void) ;
89         void checkFile(void) ;
90         void initFile(void) ;
91
92         /// Mutateurs ///
93         // Set some root definitions in a file
94         void setVirtualFieldGroup(CFieldGroup* newVFieldGroup);
95         void setVirtualFieldGroup(void);
96         void setVirtualVariableGroup(CVariableGroup* newVVariableGroup);
97         void setVirtualVariableGroup(void);
98
99         void createHeader(void);
100         void openInReadMode(void);
101         void close(void) ;
102
103         // Some processing on file
104         void solveFieldRefInheritance(bool apply);
105         void solveEFGridRef(void);
106         void solveEFOperation(void);
107         void solveEFExpression(void);
108         void processEnabledFile(void) ;
109         void processEnabledFields(void) ;
110         void solveAllRefOfEnabledFields(bool sendToServer);
111         void buildAllExpressionOfEnabledFields();
112         void buildFilterGraphOfEnabledFields(CGarbageCollector& gc);
113         void prefetchEnabledReadModeFields();
114         void prefetchEnabledReadModeFieldsIfNeeded();
115
116         // Add component into file
117         CField* addField(const string& id="") ;
118         CFieldGroup* addFieldGroup(const string& id="") ;
119         CVariable* addVariable(const string& id="") ;
120         CVariableGroup* addVariableGroup(const string& id="") ;
121
122         // Send info to serever
123         void sendEnabledFields();
124         void sendAddField(const string& id="") ;
125         void sendAddFieldGroup(const string& id="") ;
126         void sendAddAllVariables();
127         void sendAddVariable(const string& id="") ;
128         void sendAddVariableGroup(const string& id="") ;
129
130         // Receive info from client
131         static void recvAddField(CEventServer& event) ;
132         void recvAddField(CBufferIn& buffer) ;
133         static void recvAddFieldGroup(CEventServer& event) ;
134         void recvAddFieldGroup(CBufferIn& buffer) ;
135         static void recvAddVariable(CEventServer& event) ;
136         void recvAddVariable(CBufferIn& buffer) ;
137         static void recvAddVariableGroup(CEventServer& event) ;
138         void recvAddVariableGroup(CBufferIn& buffer) ;
139
140         // Dispatch event
141         static bool dispatchEvent(CEventServer& event) ;
142
143      public:
144         /// Accesseurs statiques ///
145         static StdString GetName(void);
146         static StdString GetDefName(void);
147
148         static ENodeType GetType(void);
149      public:
150         /// Traitements ///
151         virtual void solveDescInheritance(bool apply, const CAttributeMap * const parent = 0);
152
153          /// Autres ///
154         virtual void parse(xml::CXMLNode & node);
155         virtual StdString toString(void) const;
156      public:
157
158         CDate* lastSync ;
159         CDate* lastSplit ;
160         int nbAxis, nbDomains;
161         bool isOpen ;
162         bool allDomainEmpty ;
163         MPI_Comm fileComm ;
164
165      private :
166         /// Propriétés privées ///
167         CFieldGroup* vFieldGroup;
168         CVariableGroup* vVariableGroup ;
169         boost::shared_ptr<CDataOutput> data_out;
170         boost::shared_ptr<CDataInput> data_in;
171         std::vector<CField*> enabledFields;
172
173      public:
174        //         virtual void toBinary  (StdOStream & os) const;
175        //         virtual void fromBinary(StdIStream & is);
176
177   }; // class CFile
178
179   ///--------------------------------------------------------------
180
181   // Declare/Define CFileGroup and CFileDefinition
182   DECLARE_GROUP(CFile);
183
184   ///--------------------------------------------------------------
185
186} // namespace xios
187
188#endif // __XIOS_CFile__
Note: See TracBrowser for help on using the repository browser.