メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ

CORBA_SeqUtil.h

説明を見る。
00001 // -*- C++ -*-
00019 /*
00020  * $Log: CORBA_SeqUtil.h,v $
00021  * Revision 1.3.4.1  2007/09/16 08:19:02  n-ando
00022  * The problem of redefinition of CORBA::ULong and CORBA::Long was modified.
00023  *
00024  * Revision 1.3  2006/11/02 09:04:39  n-ando
00025  * CORBA_SeqUtil::insert()'s bug was fixed.
00026  *
00027  * Revision 1.2  2006/10/30 08:09:07  n-ando
00028  * Two functions push_back_lsit(), erase_if() were added.
00029  * Function reference manual was revised.
00030  *
00031  * Revision 1.1  2006/10/27 09:09:46  n-ando
00032  * The first commitment.
00033  *
00034  *
00035  */
00036 
00037 #ifndef CORBA_SeqUtil_h
00038 #define CORBA_SeqUtil_h
00039 
00040 #include <rtm/RTC.h>
00041 
00083 namespace CORBA_SeqUtil
00084 {
00110   template <class CorbaSequence, class Functor>
00111   Functor for_each(CorbaSequence& seq, Functor f)
00112   {
00113     CORBA::ULong len;
00114     len = seq.length();
00115     for (CORBA::ULong i = 0; i < len; ++i)
00116       {
00117         f(seq[i]);
00118       }
00119     return f;
00120   }
00121 
00122 
00153   template <class CorbaSequence, class Functor>
00154   CORBA::Long find(const CorbaSequence& seq, Functor f)
00155   {
00156     CORBA::ULong len(seq.length());
00157     for (CORBA::ULong i = 0; i < len; ++i)
00158       {
00159         if (f(seq[i])) return (CORBA::Long)i;
00160       }
00161     return -1;
00162   }
00163 
00186   template <class CorbaSequence, class SequenceElement>
00187   void push_back(CorbaSequence& seq, SequenceElement elem)
00188   {
00189     CORBA::ULong len(seq.length());
00190     seq.length(len + 1);
00191     seq[len] = elem;
00192   }
00193 
00194   template <class CorbaSequence>
00195   void push_back_list(CorbaSequence& seq1, const CorbaSequence& seq2)
00196   {
00197     CORBA::ULong len1(seq1.length());
00198     CORBA::ULong len2(seq2.length());
00199     CORBA::ULong len(len1 + len2);
00200     seq1.length(len);
00201 
00202     for (CORBA::ULong i = 0; i < len2; ++i)
00203       {
00204         seq1[len1 + i] = seq2[i];
00205       }
00206   }
00207 
00208 
00237   template <class CorbaSequence, class SequenceElement>
00238   void insert(CorbaSequence& seq, SequenceElement& elem, CORBA::ULong index)
00239   {
00240     CORBA::ULong len(seq.length());
00241     if (index > len)
00242       {
00243         push_back(seq, elem);
00244         return;
00245       }
00246 
00247     seq.length(len + 1);
00248     for (CORBA::ULong i = len; i > index; --i)
00249       {
00250         seq[i] = seq[i - 1];
00251       }
00252     seq[index] = elem;
00253   }
00254 
00255 
00274   template <class CorbaSequence, class SequenceElement>
00275   SequenceElement& front(CorbaSequence& seq)
00276   {
00277     return seq[0];
00278   }
00279 
00280 
00299   template <class CorbaSequence, class SequenceElement>
00300   SequenceElement& back(CorbaSequence& seq)
00301   {
00302     return seq[seq.length() - 1];
00303   }
00304 
00305 
00328   template <class CorbaSequence>
00329   void erase(CorbaSequence& seq, CORBA::ULong index)
00330   {
00331     CORBA::ULong len(seq.length());
00332     if (index > len) return;
00333 
00334     for (CORBA::ULong i = index; i < len - 1; ++i)
00335       {
00336         seq[i] = seq[i + 1];
00337       }
00338     seq.length(len - 1);
00339   }
00340 
00341   template <class CorbaSequence, class Functor>
00342   void erase_if(CorbaSequence& seq, Functor f)
00343   {
00344     CORBA::Long index;
00345     index = find(seq, f);
00346     if (index < 0) return;
00347     CORBA_SeqUtil::erase(seq, index);
00348   }
00349 
00364   template <class CorbaSequence>
00365   void clear(CorbaSequence& seq)
00366   {
00367     seq.length(0);
00368   }
00369   // End of CORBA sequence helper functions
00370 
00371 }; // namespace CORBA_SeqUtil
00372 #endif // CORBA_SeqUtil.h

OpenRTMに対してFri Oct 5 05:14:56 2007に生成されました。  doxygen 1.4.1