PaCO++  0.05
GaBro.h
Go to the documentation of this file.
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