ExcelRTC  0.5.0
 全て クラス ファイル 関数 変数
ExcelDataPort.h
説明を見る。
1 // -*-C++-*-
6 #ifndef EXCELDATAPORT_H
7 #define EXCELDATAPORT_H
8 
9 
10 #include "ExcelControl.h"
11 
12 class ExcelPortBase;
13 class ExcelControl;
14 
15 
20 template <class T, class T2>
22  : public ConnectorDataListenerT<T>
23 {
24 public:
31  DataListener(ExcelPortBase *mp, std::vector<std::vector<T2>> &sv, ExcelControl *mrtc){
32  m_port = mp;
33  m_data = &sv;
34  m_rtc = mrtc;
35  }
39  virtual ~DataListener()
40  {
41 
42  }
43 
49  virtual void operator()(const ConnectorInfo& info,
50  const T& data)
51  {
52 
53 
54 
55  std::vector<T2> tmp;
56 
57 
58  tmp.push_back(data.data);
59 
60  m_port->_mutex.lock();
61  m_data->push_back(tmp);
62  m_port->_mutex.unlock();
63 
65 
66  };
68  std::vector<std::vector<T2>> *m_data;
71 };
72 
73 
78 template <class T, class T2>
80  : public ConnectorDataListenerT<T>
81 {
82 public:
89  SeqDataListener(ExcelPortBase *mp, std::vector<std::vector<T2>> &sv, ExcelControl *mrtc){
90  m_port = mp;
91  m_data = &sv;
92  m_rtc = mrtc;
93  }
97  virtual ~SeqDataListener()
98  {
99 
100  }
101 
107  virtual void operator()(const ConnectorInfo& info,
108  const T& data)
109  {
110  std::vector<T2> tmp;
111 
112  for(int i=0;i < data.data.length();i++)
113  {
114  tmp.push_back(data.data[i]);
115  }
116 
117  m_port->_mutex.lock();
118  m_data->push_back(tmp);
119  m_port->_mutex.unlock();
120 
122  };
124  std::vector<std::vector<T2>> *m_data;
127 };
128 
129 
130 
136 {
137  public:
143  OtherPort(PortService_var p, std::vector<std::string> s)
144  {
145  pb = p;
146  buff = s;
147  mpb = NULL;
148  };
149  PortService_var pb;
150  std::vector<std::string> buff;
152 };
153 
154 
155 
161 {
162 public:
166  virtual ~ExcelPortBase()
167  {
168  delete pb;
169  }
170 
171 
180  virtual void setParam(int c, std::string l, std::string sn, std::string leng, bool mstate)
181  {
182  col = c;
183  low = l;
184  sheetName = sn;
185  length = leng;
186  num = 0;
187  state = mstate;
188  //update_cellName();
189  }
190 
194  virtual bool isNew()
195  {
196  return false;
197  }
202  virtual void putData(bool moption)
203  {
204 
205  }
209  virtual void update_cellName()
210  {
211 
213  }
214 
215 
216  std::string name;
218  int col;
219  std::string low;
220  std::string length;
221  int sheetnum;
223  std::string sheetName;
224  int num;
226  PortBase *pb;
227  std::string data_type;
228  std::vector<std::string> attachPort;
230  bool state;
232  coil::Mutex _mutex;
237  /*template <typename T>T GetOutPort()
238  {
239  return static_cast<ExcelOutPort<T>*>this;
240  }
241 
242  template <typename T>T GetInPort()
243  {
244  return static_cast<ExcelInPort<T>*>this;
245  }*/
246 };
247 
248 
253 template <class T, class T2>
255 {
256 public:
265  ExcelInPort(T *id, RTC::InPort<T> *ip, std::string n, std::string dt, ExcelControl *m_mexc){
266  In = id;
267  inIn = ip;
268  name = n;
269  data_type = dt;
270 
271  col = 1;
272  low = 1;
273  sheetnum = 1;
274 
275 
276 
277  pb = ip;
278 
279 
280  mexc = m_mexc;
281 
282 
283  inIn->addConnectorDataListener(ON_BUFFER_WRITE, new DataListener<T,T2>(this, buff, mexc));
284 
285  }
290  {
291  //delete inIn;
292  //delete In;
293  }
294 
298  virtual bool isNew()
299  {
300  return inIn->isNew();
301  }
302 
303 
304 
309  virtual void putData(bool moption)
310  {
311 
312 
313  std::vector<std::vector<T2>> v;
314  if(!moption)
315  {
316 
317  if(inIn->isNew())
318  {
319  inIn->read();
320  //std::cout << ip->In->data << std::endl;
321 
322 
323  std::vector<T2> v2;
324  v2.push_back(In->data);
325  v.push_back(v2);
326 
327 
328  }
329  }
330  else
331  {
332 
333  _mutex.lock();
334  v = buff;
335  buff.clear();
336  _mutex.unlock();
337  }
338 
339 
340 
341  mexc->setCellData<T2>(v, this);
342 
343  if(state)
344  num += v.size();
345 
346 
347 
348 
349 
350  }
351 
352  T *In;
353  RTC::InPort<T> *inIn;
354  std::vector<std::vector<T2>> buff;
356 };
357 
358 
363 template <class T, class T2>
365 {
366 public:
375  ExcelInPortSeq(T *id, RTC::InPort<T> *ip, std::string n, std::string dt, ExcelControl *m_mexc){
376  In = id;
377  inIn = ip;
378  name = n;
379  data_type = dt;
380 
381  col = 1;
382  low = 1;
383  sheetnum = 1;
384 
385 
386 
387  pb = ip;
388 
389 
390  mexc = m_mexc;
391 
392 
393  inIn->addConnectorDataListener(ON_BUFFER_WRITE, new SeqDataListener<T,T2>(this, buff, mexc));
394 
395 
396  }
401  {
402  //delete inIn;
403  //delete In;
404  }
405 
409  virtual bool isNew()
410  {
411  return inIn->isNew();
412  }
413 
414 
415 
416 
417 
418 
419 
424  virtual void putData(bool moption)
425  {
426  std::vector<std::vector<T2>> v;
427  if(!moption)
428  {
429 
430  if(inIn->isNew())
431  {
432  inIn->read();
433 
434  std::vector<T2> v2;
435 
436 
437  for(int i=0;i < In->data.length();i++)
438  {
439  v2.push_back(In->data[i]);
440 
441  }
442  v.push_back(v2);
443 
444  }
445  }
446  else
447  {
448 
449  _mutex.lock();
450  v = buff;
451  buff.clear();
452  _mutex.unlock();
453  }
454 
455  mexc->setCellData<T2>(v, this);
456 
457  if(state)
458  num += v.size();
459 
460 
461 
462 
463 
464 
465 
466  }
467 
468  T *In;
469  RTC::InPort<T> *inIn;
470  std::vector<std::vector<T2>> buff;
472 };
473 
474 
475 
480 template <class T, class T2>
482 {
483 public:
492  ExcelOutPort(T *od, RTC::OutPort<T> *op, std::string n, std::string dt, ExcelControl *m_mexc){
493  Out = od;
494  outOut = op;
495  name = n;
496  data_type = dt;
497 
498  col = 1;
499  low = 1;
500  sheetnum = 1;
501 
502 
503 
504  pb = op;
505 
506  mexc = m_mexc;
507 
508 
509 
510 
511  }
516  {
517  //delete outOut;
518  //delete Out;
519  }
520 
525  virtual void putData(bool moption)
526  {
527 
528  std::vector<T2> v = mexc->getCellData<T2>(this);
529 
530  Out->data = v[0];
531  if(state)
532  num += 1;
533 
534 
535  outOut->write();
536  }
537  T *Out;
538  RTC::OutPort<T> *outOut;
539 };
540 
541 
546 template <class T, class T2>
548 {
549 public:
558  ExcelOutPortSeq(T *od, RTC::OutPort<T> *op, std::string n, std::string dt, ExcelControl *m_mexc){
559  Out = od;
560  outOut = op;
561  name = n;
562  data_type = dt;
563 
564  col = 1;
565  low = 1;
566  sheetnum = 1;
567 
568 
569 
570  pb = op;
571 
572  mexc = m_mexc;
573 
574 
575 
576 
577  }
582  {
583  //delete outOut;
584  //delete Out;
585  }
586 
587 
588 
593  virtual void putData(bool moption)
594  {
595  int t_l = convertStrToVal(low);
596  int t_leng = convertStrToVal(length);
597 
598  int leng = t_leng-t_l+1;
599 
600  Out->data.length(leng);
601  std::vector<T2> v = mexc->getCellData<T2>(this);
602  if(leng != v.size())return;
603  for(int i=0;i < leng;i++)
604  {
605  Out->data[i] = v[i];
606  }
607  if(state)
608  num += 1;
609 
610 
611  outOut->write();
612  }
613  T *Out;
614  RTC::OutPort<T> *outOut;
615 };
616 
617 
618 #endif