#ifndef __XMLIO_CField__ #define __XMLIO_CField__ /// xios headers /// #include "xmlioserver_spl.hpp" #include "group_factory.hpp" #include "functor.hpp" #include "functor_type.hpp" #include "duration.hpp" #include "date.hpp" #include "declare_group.hpp" #include "calendar_util.hpp" //#include "context.hpp" namespace xios { namespace tree { /// ////////////////////// Déclarations ////////////////////// /// class CFieldGroup; class CFieldAttributes; class CField; class CFile; class CGrid; class CContext ; ///-------------------------------------------------------------- // Declare/Define CFieldAttribute BEGIN_DECLARE_ATTRIBUTE_MAP(CField) # include "field_attribute.conf" END_DECLARE_ATTRIBUTE_MAP(CField) ///-------------------------------------------------------------- class CField : public CObjectTemplate , public CFieldAttributes { /// friend /// friend class CFile; /// typedef /// typedef CObjectTemplate SuperClass; typedef CFieldAttributes SuperClassAttribute; public : typedef CFieldAttributes RelAttributes; typedef CFieldGroup RelGroup; enum EEventId { EVENT_ID_UPDATE_DATA } ; /// Constructeurs /// CField(void); explicit CField(const StdString & id); CField(const CField & field); // Not implemented yet. CField(const CField * const field); // Not implemented yet. /// Accesseurs /// boost::shared_ptr getDirectFieldReference(void) const; const boost::shared_ptr getBaseFieldReference(void) const; const std::vector > & getAllReference(void) const; boost::shared_ptr getRelGrid(void) const ; boost::shared_ptr getRelFile(void) const ; public : StdSize getNStep(void) const; const date::CDuration & getFreqOperation(void) const; const date::CDuration & getFreqWrite(void) const; boost::shared_ptr getLastWriteDate(void) const; boost::shared_ptr getLastOperationDate(void) const; boost::shared_ptr getFieldOperation(void) const; ARRAY(double, 1) getData(void) const; const StdString & getBaseFieldId(void) const; /// Mutateur /// void setRelFile(const boost::shared_ptr _file); void incrementNStep(void); void resetNStep() ; template bool updateData(const ARRAY(double, N) data); bool updateDataServer (const date::CDate & currDate, const std::deque storedClient); public : /// Test /// bool hasDirectFieldReference(void) const; bool isActive(void) const; /// Traitements /// void solveRefInheritance(void); void solveGridReference(void); void solveOperation(void); virtual void fromBinary(StdIStream & is); /// Destructeur /// virtual ~CField(void); /// Accesseurs statiques /// static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); template void setData(const ARRAY(double, N) _data) ; static bool dispatchEvent(CEventServer& event) ; void sendUpdateData(void) ; static void recvUpdateData(CEventServer& event) ; void recvUpdateData(vector& ranks, vector& buffers) ; void writeField(void) ; void outputField(ARRAY(double,3) fieldOut) ; void outputField(ARRAY(double,2) fieldOut) ; public : /// Propriétés privées /// std::vector > refObject; boost::shared_ptr baseRefObject; boost::shared_ptr grid ; boost::shared_ptr file; date::CDuration freq_operation, freq_write; date::CDuration freq_operation_srv, freq_write_srv; StdSize nstep; boost::shared_ptr last_Write, last_operation; boost::shared_ptr lastlast_Write_srv,last_Write_srv, last_operation_srv; boost::shared_ptr foperation; map > foperation_srv; ARRAY(double, 1) data; map data_srv ; }; // class CField ///-------------------------------------------------------------- // Declare/Define CFieldGroup and CFieldDefinition DECLARE_GROUP(CField); } // namespace tree ///----------------------------------------------------------------- template <> void CGroupTemplate::solveRefInheritance(void); ///----------------------------------------------------------------- } // namespace xios #endif // __XMLIO_CField__