PaCO++  0.05
DistributionLibrairie.h
Go to the documentation of this file.
1 #ifndef DISTRIBUTION_LIBRARY_IS_DEFINED
2 #define DISTRIBUTION_LIBRARY_IS_DEFINED
3 
4 #include "FabriqueManagerTpl.h"
5 #include <PaCO++.h>
6 #include <string>
7 #include <map>
8 #include <vector>
9 
10 using namespace std;
11 
12 // To delete ?
14 {
15  unsigned sourceNode; // Quel noeud envoi
16  unsigned destNode; // Quel est le noeud destinataire
17  unsigned size; // nb octet ! la taille que l'on envoi
18  void* id; // Cette identifiant est ensuite redonnée a la bibliothèque lorsque l'on demande
19  // réellement les données
20 };
21 
22 typedef vector<PieceToSend> vPieceToSend_t;
23 
25 
26 public:
27 
29  virtual ~DistributionLibrary() {}
30 
31  // Topology
32  virtual void setSourceTopology(PaCO::PacoTopology_t topo) = 0; // paco_operation
33  virtual PaCO::PacoTopology_t getSourceTopology() = 0; // ??
34  virtual void setDestTopology(PaCO::PacoTopology_t topo) = 0; // paco_operation
35  virtual PaCO::PacoTopology_t getDestTopology() = 0; // ??
36  virtual void setNodeRank(long Rank) = 0; // paco_operation
37  virtual long getNodeRank() = 0; // by user ?
38 
39  // Com Id management
40  virtual bool setComId(long id) { return false;}
41  virtual bool freeComId(long id) { return false;}
42 
43  // If the library is parallel
44  virtual void setCommunicator(void * group) = 0;
45  // virtual void* getCommunicator() = 0; PROPOSED EXTENSION
46 
47  // Client Side
48  // Computes communications vector (or eventually matrix)
49  // Cette méthode est appellée par PaCO++ pour demander la matrice de communication
50  virtual PieceToSend* computePiecesToSend(unsigned& size) = 0;
51  // virtual PieceToSend* computePiecesToSend2(unsigned& size) = 0; SHOULD COMPUTE DIRECTLY THE FULL MATRIX
52  // Sets client-side data
53  // Pointeur vers les données client
54  virtual void setDataPtr(void* dataPtr) = 0;
55 
56  // Get data
57  // PaCO++ demande une quantité size pour le server_node
58  // length est la taille réelle que l'on lui donne
59  // end permet de fragmenter le message en plusieurs buffer : si on veut envoyer
60  // qu'un seul buffer on repond true sinon on repond false
61  // pid est l'id contenu dans PieceToSend
62  // size est la taille que PaCO++ veut et on soustrait ce qu'on donne réellement
63  virtual void* getClientData(void *pid, int server_node, long & size, long & length, bool & end) = 0;
64  // PaCO++ demande le descripteur qui sera attaché à l'envoi des données.
65  // PaCO++ caste le void * dans le type décrit dans le fichier de configuration de la lib
66  // situé dans le répertoires Types.
67  virtual void* getDescr() = 0;
68 
69  // Free
70  virtual void clientFree() = 0;
71 
72  // Server Side
73  // Sets server-side data return true if data complete
74  // element_nb : nombre d'etls de la sequence != 1 si
75  // si le message est fragmenté virtual bool insertData(void* rcptBuf, unsigned long element_nb) = 0; virtual void setDescr(void * descr) = 0; // getData for the servant virtual void* getServerData(long & length) = 0; // Free virtual void serverFree() = 0; }; // Abstract class to be implemeted by each fabrique class paco_fabrique_distribution { public: virtual ~paco_fabrique_distribution() {} virtual DistributionLibrary* create()=0; }; // The distribution fabrique typedef paco_fabrique_manager_tpl<paco_fabrique_distribution> paco_fabrique_manager_distribution; #endif
76  virtual bool insertData(void* rcptBuf, unsigned long element_nb) = 0;
77  virtual void setDescr(void * descr) = 0;
78 
79  // getData for the servant
80  virtual void* getServerData(long & length) = 0;
81 
82  // Free
83  virtual void serverFree() = 0;
84 };
85 
86 // Abstract class to be implemeted by each fabrique
88 public:
90  virtual DistributionLibrary* create()=0;
91 };
92 
93 // The distribution fabrique
95 
96 #endif
paco_fabrique_manager_tpl< paco_fabrique_distribution > paco_fabrique_manager_distribution
vector< PieceToSend > vPieceToSend_t
virtual bool setComId(long id)
virtual bool freeComId(long id)