#ifndef __XMLIO_CDomain__ #define __XMLIO_CDomain__ /// xios headers /// #include "xmlioserver_spl.hpp" #include "group_factory.hpp" #include "declare_group.hpp" #include "declare_ref_func.hpp" #include "event_client.hpp" #include "event_server.hpp" #include "buffer_in.hpp" #include "array_new.hpp" #include "attribute_array.hpp" #include "attribute_enum.hpp" namespace xios { /// ////////////////////// Déclarations ////////////////////// /// class CDomainGroup; class CDomainAttributes; class CDomain; ///-------------------------------------------------------------- // Declare/Define CDomainAttribute BEGIN_DECLARE_ATTRIBUTE_MAP(CDomain) # include "domain_attribute.conf" END_DECLARE_ATTRIBUTE_MAP(CDomain) ///-------------------------------------------------------------- class CDomain : public CObjectTemplate , public CDomainAttributes { enum EEventId { EVENT_ID_SERVER_ATTRIBUT, EVENT_ID_LAT, EVENT_ID_LON } ; /// typedef /// typedef CObjectTemplate SuperClass; typedef CDomainAttributes SuperClassAttribute; public : typedef CDomainAttributes RelAttributes; typedef CDomainGroup RelGroup; /// Constructeurs /// CDomain(void); explicit CDomain(const StdString & id); CDomain(const CDomain & domain); // Not implemented yet. CDomain(const CDomain * const domain); // Not implemented yet. /// Vérifications /// void checkAttributes(void); void checkAttributesOnClient(); void sendCheckedAttributes(); private : void checkDomain(void); void checkLocalIDomain(void); void checkLocalJDomain(void); void checkMask(void); void checkDomainData(void); void checkCompression(void); void checkZoom(void); void checkBounds(void); public : /// Autres /// const std::set & getRelFiles(void) const; /// Test /// bool IsWritten(const StdString & filename) const; bool hasZoom(void) const; bool isEmpty(void) const; int ni_client,ibegin_client,iend_client ; int zoom_ni_client,zoom_ibegin_client,zoom_iend_client ; int nj_client,jbegin_client,jend_client ; int zoom_nj_client,zoom_jbegin_client,zoom_jend_client ; int ni_srv,ibegin_srv,iend_srv ; int zoom_ni_srv,zoom_ibegin_srv,zoom_iend_srv ; int nj_srv,jbegin_srv,jend_srv ; int zoom_nj_srv,zoom_jbegin_srv,zoom_jend_srv ; CArray lonvalue_srv, latvalue_srv ; CArray bounds_lon_srv, bounds_lat_srv ; vector connectedServer ; // list of connected server vector nbSenders ; // for each communication with a server, number of communicating client vector nbDataSrv ; // size of data to send to each server vector< vector > i_indSrv ; // for each server, i global index to send vector< vector > j_indSrv ; // for each server, j global index to send CArray mapConnectedServer ; // (ni,nj) => mapped to connected server number, -1 if no server is target // vector ib_srv, ie_srv, in_srv ; // vector jb_srv, je_srv, jn_srv ; public : /// Mutateur /// void addRelFile(const StdString & filename); void completeLonLatClient(void); void sendServerAttribut(void) ; void sendLonLat(void) ; void computeConnectedServer(void) ; static bool dispatchEvent(CEventServer& event) ; static void recvLat(CEventServer& event) ; static void recvLon(CEventServer& event) ; static void recvServerAttribut(CEventServer& event) ; void recvLat(CBufferIn& buffer) ; void recvLon(CBufferIn& buffer) ; void recvServerAttribut(CBufferIn& buffer) ; /// Destructeur /// virtual ~CDomain(void); /// Accesseurs statiques /// static StdString GetName(void); static StdString GetDefName(void); static ENodeType GetType(void); CArray local_mask; bool isCurvilinear ; bool hasBounds ; private : /// Proriétés protégées /// bool isChecked; std::set relFiles; bool isClientChecked; // Verify whether all attributes of domain on the client side are good std::map nbConnectedClients_; // Mapping of number of communicating client to a server std::map > indSrv_; // Global index of each client sent to server std::vector connectedServerRank_; DECLARE_REF_FUNC(Domain,domain) }; // class CDomain ///-------------------------------------------------------------- // Declare/Define CDomainGroup and CDomainDefinition DECLARE_GROUP(CDomain); ///-------------------------------------------------------------- } // namespace xios #endif // __XMLIO_CDomain__