PaCO++  0.05
ParisBasicExample.cc
Go to the documentation of this file.
1 #include "ParisBasicExample.h"
2 #include <string.h>
3 #include <stdlib.h>
4 #include <iostream>
5 
6 ParisBasicExample::ParisBasicExample() : _data_size(0), _data_elt_nb(0),
7  _my_rank(-1), _server_nb_nodes(-1)
8 {
9  _user_data = 0;
10  temp_buffer = 0;
11  _length = 0;
12 }
13 
15 {
16  delete position;
17  delete _data_rst;
18 }
19 
20 void
22 {
23  _data_size = size;
25  {
26  for (int i = 0; i < _server_nb_nodes; i++)
27  {
29  }
30  }
31 }
32 
33 void
35 {
36  _data_elt_nb = elt_nb;
38  {
39  for (int i = 0; i < _server_nb_nodes; i++)
40  {
42  }
43  }
44 }
45 
46 void
48 {
49  _srcTopo = topo;
50 }
51 
54 {
55  return _srcTopo;
56 }
57 
58 void
60 {
61  _destTopo = topo;
63  position = new long[_server_nb_nodes];
64  _data_rst = new long[_server_nb_nodes];
65  for (int i = 0; i < _server_nb_nodes; i++)
66  {
67  position[i] = 0;
68  _data_rst[i] = 0;
69  }
70  if (_data_size && _data_elt_nb)
71  {
72  for (int i = 0; i < _server_nb_nodes; i++)
73  {
75  }
76  }
77 }
78 
81 {
82  return _destTopo;
83 }
84 
85 void
87 {
88  _my_rank = Rank;
89 }
90 
91 long
93 {
94  return _my_rank;
95 }
96 
99 {
100  // Compute total data length
101  long total_length = _data_size * _data_elt_nb;
102  // We send at each server node the
103  // same data
104  PieceToSend * comm_vector = new PieceToSend[_server_nb_nodes];
105  for (int i = 0; i < _server_nb_nodes; i++)
106  {
107  comm_vector[i].sourceNode = _my_rank;
108  comm_vector[i].destNode = i;
109  if (i == _my_rank)
110  {
111  comm_vector[i].size = total_length;
112  }
113  else
114  {
115  comm_vector[i].size = 0;
116  }
117  }
118  return comm_vector;
119 }
120 
121 void
123 {
124  _user_data = (char*) dataPtr;
125  cerr << "_data_size " <<_data_size << endl;
126  cerr << "_data_elt_nb " <<_data_elt_nb << endl;
127  cerr << "_my_rank " <<_my_rank << endl;
128  cerr << "_server_nb_nodes " <<_server_nb_nodes << endl;
129  cerr << "_data_rst " <<_data_rst << endl;
130  cerr << " position" << position << endl;
131 }
132 
133 void *
134 ParisBasicExample::getClientData(int server_node, long & size, long & length, bool & end)
135 {
136  if (size > 0)
137  {
138  if (temp_buffer) clientFree(server_node);
139  // First get position
140  long actual_pos = position[server_node];
141  // Test if size > _data_rst
142  long real_size = 0;
143  if (size > _data_rst[server_node])
144  {
145  real_size = _data_rst[server_node];
146  size = size - _data_rst[server_node];
147  _data_rst[server_node] = 0;
148  }
149  else
150  {
151  real_size = size;
152  _data_rst[server_node] = _data_rst[server_node] - size;
153  size = 0;
154  }
155  length = real_size / _data_size;
156  _length = length;
157  end = true;
158  position[server_node] = actual_pos + real_size;
159  if (_data_rst[server_node] == 0)
160  {
161  _data_rst[server_node] = _data_size * _data_elt_nb;
162  position[server_node] = 0;
163  }
164  return &_user_data[actual_pos];
165  }
166  else
167  {
168  length = 0;
169  _length = length;
170  end = true;
171  return NULL;
172  }
173  return NULL;
174 }
175 
176 void
178 {
179  free(temp_buffer);
180 }
181 
182 void
184 {
185  free(temp_buffer);
186 }
187 
188 bool
190 {
191  _user_data = (char *) rcptBuf;
192  return true;
193 }
194 
195 void *
197 {
198  length = _length;
199  return _user_data;
200 }
201 
202 void
204 {
205  _length = *((CORBA::Short*) descr);
206  cerr << " Set Descr : "<< _length << endl;
207 }
208 
209 void *
211 {
212  return &_length;
213 }
virtual PaCO::PacoTopology_t getDestTopology()
virtual void * getDescr()
virtual PieceToSend * computePiecesToSend()
virtual void setDescr(void *descr)
virtual void clientFree()
virtual void setDataPtr(void *dataPtr)
PaCO::PacoTopology_t _srcTopo
virtual bool insertData(void *rcptBuf)
unsigned long total
Definition: PaCO++.idl:35
PaCO::PacoTopology_t _destTopo
virtual void * getClientData(int server_node, long &size, long &length, bool &end)
virtual void setSourceTopology(PaCO::PacoTopology_t topo)
virtual long getNodeRank()
void setEltSize(long size)
virtual ~ParisBasicExample()
CORBA::Short _length
void setNbElt(long elt_nb)
virtual void setNodeRank(long Rank)
virtual void * getServerData(long &length)
virtual PaCO::PacoTopology_t getSourceTopology()
virtual void setDestTopology(PaCO::PacoTopology_t topo)