OpenRTM-aist 2.0.2
Loading...
Searching...
No Matches
CORBA_SeqUtil.h
Go to the documentation of this file.
1// -*- C++ -*-
19#ifndef CORBA_SEQUTIL_H
20#define CORBA_SEQUTIL_H
21
22#include <rtm/RTC.h>
23#include <rtm/Manager.h>
24
66namespace CORBA_SeqUtil
67{
97 template <class CorbaSequence, class Functor>
98 Functor for_each(CorbaSequence& seq, Functor f)
99 {
100 CORBA::ULong len;
101 len = seq.length();
102 for (CORBA::ULong i = 0; i < len; ++i)
103 {
104 f(seq[i]);
105 }
106 return f;
107 }
108
141 template <class CorbaSequence, class Functor>
142 CORBA::Long find(const CorbaSequence& seq, Functor f)
143 {
144 CORBA::ULong len(seq.length());
145 for (CORBA::ULong i = 0; i < len; ++i)
146 {
147 if (f(seq[i])) { return static_cast<CORBA::Long>(i); }
148 }
149 return -1;
150 }
151
174 template <class CorbaSequence, class SequenceElement>
175 void push_back(CorbaSequence& seq, SequenceElement elem)
176 {
177 CORBA::ULong len(seq.length());
178 seq.length(len + 1);
179 seq[len] = elem;
180 }
181
202 template <class CorbaSequence>
203 void push_back_list(CorbaSequence& seq1, const CorbaSequence& seq2)
204 {
205 CORBA::ULong len1(seq1.length());
206 CORBA::ULong len2(seq2.length());
207 CORBA::ULong len(len1 + len2);
208 seq1.length(len);
209
210 for (CORBA::ULong i = 0; i < len2; ++i)
211 {
212 seq1[len1 + i] = seq2[i];
213 }
214 }
215
244 template <class CorbaSequence, class SequenceElement>
245 void insert(CorbaSequence& seq, SequenceElement& elem, CORBA::ULong index)
246 {
247 CORBA::ULong len(seq.length());
248 if (index > len)
249 {
250 push_back(seq, elem);
251 return;
252 }
253
254 seq.length(len + 1);
255 for (CORBA::ULong i = len; i > index; --i)
256 {
257 seq[i] = seq[i - 1];
258 }
259 seq[index] = elem;
260 }
261
287 template <class CorbaSequence, class SequenceElement>
288 SequenceElement& front(CorbaSequence& seq)
289 {
290 return seq[0];
291 }
292
316 template <class CorbaSequence, class SequenceElement>
317 SequenceElement& back(CorbaSequence& seq)
318 {
319 return seq[seq.length() - 1];
320 }
321
344 template <class CorbaSequence>
345 void erase(CorbaSequence& seq, CORBA::ULong index)
346 {
347 CORBA::ULong len(seq.length());
348 if (index > len) return;
349
350 for (CORBA::ULong i = index; i < len - 1; ++i)
351 {
352 seq[i] = seq[i + 1];
353 }
354 seq.length(len - 1);
355 }
356
380 template <class CorbaSequence, class Functor>
381 void erase_if(CorbaSequence& seq, Functor f)
382 {
383 CORBA::Long index;
384 index = find(seq, f);
385 if (index < 0) return;
386 CORBA_SeqUtil::erase(seq, index);
387 }
388
404 template <class CorbaSequence>
405 void clear(CorbaSequence& seq)
406 {
407 seq.length(0);
408 }
409 // End of CORBA sequence helper functions
410
411
412 template <class CorbaRefSequence>
413 coil::vstring refToVstring(const CorbaRefSequence& objlist)
414 {
415 coil::vstring iorlist;
416 CORBA::ORB_var orb = ::RTC::Manager::instance().getORB();
417
418 for (CORBA::ULong i(0), len(objlist.length()); i < len; ++i)
419 {
420#ifndef ORB_IS_RTORB
421 CORBA::String_var str_var = orb->object_to_string(objlist[i].in());
422#else
423 CORBA_Object obj = (objlist.cobj())->_buffer[i];
424 CORBA::String_var str_var = orb->object_to_string2(obj);
425#endif
426 iorlist.emplace_back(str_var.in());
427 }
428 return iorlist;
429 }
430} // namespace CORBA_SeqUtil
431#endif // CORBA_SEQUTIL_H
-*- C++ -*-
RTComponent header.
CORBA::ORB_ptr getORB()
Get the pointer to ORB (ownership duplicated)
static Manager & instance()
Get instance of the manager.
CORBA IOR helper functions.
SequenceElement & back(CorbaSequence &seq)
Get the last element of the CORBA sequence.
Definition CORBA_SeqUtil.h:317
coil::vstring refToVstring(const CorbaRefSequence &objlist)
Definition CORBA_SeqUtil.h:413
void insert(CorbaSequence &seq, SequenceElement &elem, CORBA::ULong index)
Insert the element to the CORBA sequence.
Definition CORBA_SeqUtil.h:245
void push_back(CorbaSequence &seq, SequenceElement elem)
Push the new element back to the CORBA sequence.
Definition CORBA_SeqUtil.h:175
CORBA::Long find(const CorbaSequence &seq, Functor f)
Return the index of CORBA sequence element that functor matches.
Definition CORBA_SeqUtil.h:142
Functor for_each(CorbaSequence &seq, Functor f)
Apply the functor to all CORBA sequence elements.
Definition CORBA_SeqUtil.h:98
void erase_if(CorbaSequence &seq, Functor f)
Remove an element of a sequence according to a predicate.
Definition CORBA_SeqUtil.h:381
void clear(CorbaSequence &seq)
Erase all the elements of the CORBA sequence.
Definition CORBA_SeqUtil.h:405
void erase(CorbaSequence &seq, CORBA::ULong index)
Erase the element of the specified index.
Definition CORBA_SeqUtil.h:345
SequenceElement & front(CorbaSequence &seq)
Get the front element of the CORBA sequence.
Definition CORBA_SeqUtil.h:288
void push_back_list(CorbaSequence &seq1, const CorbaSequence &seq2)
Merge the elements of the CORBA sequence.
Definition CORBA_SeqUtil.h:203