CORBA_SeqUtil.h

説明を見る。
00001 // -*- C++ -*-
00019 #ifndef CORBA_SeqUtil_h
00020 #define CORBA_SeqUtil_h
00021 
00022 #include <rtm/RTC.h>
00023 
00065 namespace CORBA_SeqUtil
00066 {
00096   template <class CorbaSequence, class Functor>
00097   Functor for_each(CorbaSequence& seq, Functor f)
00098   {
00099     CORBA::ULong len;
00100     len = seq.length();
00101     for (CORBA::ULong i = 0; i < len; ++i)
00102       {
00103         f(seq[i]);
00104       }
00105     return f;
00106   }
00107   
00140   template <class CorbaSequence, class Functor>
00141   CORBA::Long find(const CorbaSequence& seq, Functor f)
00142   {
00143     CORBA::ULong len(seq.length());
00144     for (CORBA::ULong i = 0; i < len; ++i)
00145       {
00146         if (f(seq[i])) return (CORBA::Long)i;
00147       }
00148     return -1;
00149   }
00150   
00173   template <class CorbaSequence, class SequenceElement>
00174   void push_back(CorbaSequence& seq, SequenceElement elem)
00175   {
00176     CORBA::ULong len(seq.length());
00177     seq.length(len + 1);
00178     seq[len] = elem;
00179   }
00180   
00201   template <class CorbaSequence>
00202   void push_back_list(CorbaSequence& seq1, const CorbaSequence& seq2)
00203   {
00204     CORBA::ULong len1(seq1.length());
00205     CORBA::ULong len2(seq2.length());
00206     CORBA::ULong len(len1 + len2);
00207     seq1.length(len);
00208     
00209     for (CORBA::ULong i = 0; i < len2; ++i)
00210       {
00211         seq1[len1 + i] = seq2[i];
00212       }
00213   }
00214   
00243   template <class CorbaSequence, class SequenceElement>
00244   void insert(CorbaSequence& seq, SequenceElement& elem, CORBA::ULong index)
00245   {
00246     CORBA::ULong len(seq.length());
00247     if (index > len)
00248       {
00249         push_back(seq, elem);
00250         return;
00251       }
00252     
00253     seq.length(len + 1);
00254     for (CORBA::ULong i = len; i > index; --i)
00255       {
00256         seq[i] = seq[i - 1];
00257       }
00258     seq[index] = elem;
00259   }
00260   
00286   template <class CorbaSequence, class SequenceElement>
00287   SequenceElement& front(CorbaSequence& seq)
00288   {
00289     return seq[0];
00290   }
00291   
00315   template <class CorbaSequence, class SequenceElement>
00316   SequenceElement& back(CorbaSequence& seq)
00317   {
00318     return seq[seq.length() - 1];
00319   }
00320   
00343   template <class CorbaSequence>
00344   void erase(CorbaSequence& seq, CORBA::ULong index)
00345   {
00346     CORBA::ULong len(seq.length());
00347     if (index > len) return;
00348     
00349     for (CORBA::ULong i = index; i < len - 1; ++i)
00350       {
00351         seq[i] = seq[i + 1];
00352       }
00353     seq.length(len - 1);
00354   }
00355   
00379   template <class CorbaSequence, class Functor>
00380   void erase_if(CorbaSequence& seq, Functor f)
00381   {
00382     CORBA::Long index;
00383     index = find(seq, f);
00384     if (index < 0) return;
00385     CORBA_SeqUtil::erase(seq, index);
00386   }
00387   
00403   template <class CorbaSequence>
00404   void clear(CorbaSequence& seq)
00405   {
00406     seq.length(0);
00407   }
00408   // End of CORBA sequence helper functions
00409   
00410 }; // namespace CORBA_SeqUtil
00411 #endif // CORBA_SeqUtil.h

OpenRTMに対してThu May 29 15:03:26 2008に生成されました。  doxygen 1.5.3