00001
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef CORBA_SeqUtil_h
00035 #define CORBA_SeqUtil_h
00036
00037 namespace CORBA
00038 {
00039 typedef unsigned long ULong;
00040 typedef long Long;
00041 };
00042
00084 namespace CORBA_SeqUtil
00085 {
00111 template <class CorbaSequence, class Functor>
00112 Functor for_each(CorbaSequence& seq, Functor f)
00113 {
00114 CORBA::ULong len;
00115 len = seq.length();
00116 for (CORBA::ULong i = 0; i < len; ++i)
00117 {
00118 f(seq[i]);
00119 }
00120 return f;
00121 }
00122
00123
00154 template <class CorbaSequence, class Functor>
00155 CORBA::Long find(const CorbaSequence& seq, Functor f)
00156 {
00157 CORBA::ULong len(seq.length());
00158 for (CORBA::ULong i = 0; i < len; ++i)
00159 {
00160 if (f(seq[i])) return (CORBA::Long)i;
00161 }
00162 return -1;
00163 }
00164
00187 template <class CorbaSequence, class SequenceElement>
00188 void push_back(CorbaSequence& seq, SequenceElement elem)
00189 {
00190 CORBA::ULong len(seq.length());
00191 seq.length(len + 1);
00192 seq[len] = elem;
00193 }
00194
00195 template <class CorbaSequence>
00196 void push_back_list(CorbaSequence& seq1, const CorbaSequence& seq2)
00197 {
00198 CORBA::ULong len1(seq1.length());
00199 CORBA::ULong len2(seq2.length());
00200 CORBA::ULong len(len1 + len2);
00201 seq1.length(len);
00202
00203 for (CORBA::ULong i = 0; i < len2; ++i)
00204 {
00205 seq1[len1 + i] = seq2[i];
00206 }
00207 }
00208
00209
00238 template <class CorbaSequence, class SequenceElement>
00239 void insert(CorbaSequence& seq, SequenceElement& elem, CORBA::ULong index)
00240 {
00241 CORBA::ULong len(seq.length());
00242 if (index > len)
00243 {
00244 push_back(seq, elem);
00245 return;
00246 }
00247
00248 seq.length(len + 1);
00249 for (CORBA::ULong i = len; i > index; --i)
00250 {
00251 seq[i] = seq[i - 1];
00252 }
00253 seq[index] = elem;
00254 }
00255
00256
00275 template <class CorbaSequence, class SequenceElement>
00276 SequenceElement& front(CorbaSequence& seq)
00277 {
00278 return seq[0];
00279 }
00280
00281
00300 template <class CorbaSequence, class SequenceElement>
00301 SequenceElement& back(CorbaSequence& seq)
00302 {
00303 return seq[seq.length() - 1];
00304 }
00305
00306
00329 template <class CorbaSequence>
00330 void erase(CorbaSequence& seq, CORBA::ULong index)
00331 {
00332 CORBA::ULong len(seq.length());
00333 if (index > len) return;
00334
00335 for (CORBA::ULong i = index; i < len - 1; ++i)
00336 {
00337 seq[i] = seq[i + 1];
00338 }
00339 seq.length(len - 1);
00340 }
00341
00342 template <class CorbaSequence, class Functor>
00343 void erase_if(CorbaSequence& seq, Functor f)
00344 {
00345 CORBA::Long index;
00346 index = find(seq, f);
00347 if (index < 0) return;
00348 CORBA_SeqUtil::erase(seq, index);
00349 }
00350
00365 template <class CorbaSequence>
00366 void clear(CorbaSequence& seq)
00367 {
00368 seq.length(0);
00369 }
00370
00371
00372 };
00373 #endif // CORBA_SeqUtil.h