PaCO++
0.05
|
00001 #ifndef _GABRO_H 00002 #define _GABRO_H 00003 00004 #include "DistributionLibrairie.h" 00005 #include "GaBroIdl.h" 00006 00007 using namespace std; 00008 00009 class GaBro : public DistributionLibrary 00010 { 00011 public: 00012 GaBro(); 00013 virtual ~GaBro(); 00014 00015 // Common 00016 virtual void setSourceTopology(PaCO::PacoTopology_t topo); 00017 virtual PaCO::PacoTopology_t getSourceTopology(); 00018 virtual void setDestTopology(PaCO::PacoTopology_t topo); 00019 virtual PaCO::PacoTopology_t getDestTopology(); 00020 virtual void setNodeRank(long Rank); 00021 virtual long getNodeRank(); 00022 virtual void setCommunicator(void * group) {} 00023 00024 // Data description API 00025 void setEltSize(long size); 00026 void setNodeNbElt(long elt_node_nb); 00027 void setTotalNbElt(long elt_nb); 00028 void setNodePos(long node_pos); 00029 00030 // Client Side 00031 virtual PieceToSend* computePiecesToSend(unsigned& size); 00032 virtual void setDataPtr(void* dataPtr); 00033 virtual void* getClientData(void* pid, int server_node, long & size, long & length, bool & end); 00034 virtual void clientFree(); 00035 virtual void * getDescr(); 00036 00037 virtual bool setComId(long id); 00038 virtual bool freeComId(long id); 00039 00040 // Server Side 00041 virtual bool insertData(void* rcptBuf, unsigned long element_nb); 00042 virtual void* getServerData(long & length); 00043 virtual void serverFree(); 00044 virtual void setDescr(void * descr); 00045 00046 private: 00047 00048 PaCO::PacoTopology_t _srcTopo; 00049 PaCO::PacoTopology_t _destTopo; 00050 00051 // Descr 00052 GaBroLib::GaBroDescr _descr; 00053 00054 // Common 00055 long _data_size; 00056 long _data_elt_nb; 00057 long _my_rank; 00058 long _server_nb_nodes; 00059 00060 // Client Side 00061 char * _client_buffer; 00062 int * _pos; 00063 long _elt_node_nb; 00064 long _node_pos; 00065 00066 typedef struct { 00067 long _data_size; 00068 long _elt_node_nb; 00069 long _server_nb_nodes; 00070 long _data_elt_nb; 00071 long _node_pos; 00072 } info_t; 00073 00074 typedef map<long, info_t*> info_list_map_t; // - 1 = none 00075 info_list_map_t _info_list_map; 00076 00077 long _cur_id; // - 1 = none 00078 info_t * _cur_info; 00079 00080 // Server Side 00081 char * _server_buffer; 00082 long * _nb_rcp; 00083 int _current_rcp; 00084 long _current_pos; 00085 long _total_data_nb; 00086 long _node_data_nb; 00087 long _current_data_size; 00088 }; 00089 00090 class GaBro_fab : virtual public paco_fabrique_distribution 00091 { 00092 00093 public: 00094 GaBro_fab() {} 00095 ~GaBro_fab() {} 00096 00097 DistributionLibrary * create() 00098 { 00099 return new GaBro(); 00100 } 00101 }; 00102 00103 #endif