CARMA C++
corbaSequenceUtils.h
1 #ifndef CARMA_UTIL_CORBASEQUENCEUTILS_H
2 #define CARMA_UTIL_CORBASEQUENCEUTILS_H
3 
4 #include <set>
5 #include <string>
6 #include <vector>
7 
8 #include "carma/corba/corba.h"
9 #include "carma/util/SeqTypedefs.h"
10 
11 namespace carma {
12 namespace util {
13 
14 
15 template < typename T, typename S >
16 void assignVectorToSequence( const ::std::vector< T > & tVector,
17  S & sequence );
18 
19 template < typename T, typename S >
20 void assignSetToSequence( const ::std::set< T > & tSet,
21  S & sequence );
22 
23 template < typename T, typename S >
24 void assignMultisetToSequence( const ::std::multiset< T > & tMultiset,
25  S & sequence );
26 
27 template < typename S, typename T >
28 void assignSequenceToVector( const S & sequence,
29  ::std::vector< T > & tVector );
30 
31 void assignSequenceToVector(
32  const carma::util::SeqString & sequence,
33  ::std::vector< std::string > & tVector );
34 
35 template < typename S, typename T >
36 void assignSequenceToSet( const S & sequence,
37  ::std::set< T > & tSet);
38 
39 template < typename S, typename T >
40 S convertVectorToSequence( const ::std::vector< T > & tVector );
41 
42 
43 template < typename S, typename T >
44 S convertSetToSequence( const ::std::set< T > & tSet );
45 
46 
47 template < typename S, typename T >
48 S convertMultisetToSequence( const ::std::multiset< T > & tMultiset );
49 
50 
51 template < typename T, typename S >
52 ::std::vector< T > convertSequenceToVector( const S & sequence );
53 
54 template < typename T, typename S >
55 ::std::set< T > convertSequenceToSet( const S & sequence );
56 
57 } // namespace carma::util
58 } // namespace carma
59 
60 
61 // NOTE: Below here is simply implementation
62 
63 template < typename T, typename S >
64 void
65 carma::util::assignVectorToSequence( const ::std::vector< T > & tVector,
66  S & sequence )
67 {
68  const typename ::std::vector< T >::size_type count = tVector.size();
69 
70  sequence.length( count );
71 
72  typename ::std::vector< T >::const_iterator i = tVector.begin();
73  const typename ::std::vector< T >::const_iterator iEnd = tVector.end();
74 
75  for ( CORBA::Long j = 0; i != iEnd; ++j, ++i )
76  sequence[ j ] = *i;
77 }
78 
79 
80 template < typename T, typename S >
81 void
82 carma::util::assignSetToSequence( const ::std::set< T > & tSet,
83  S & sequence )
84 {
85  const typename ::std::set< T >::size_type count = tSet.size();
86 
87  sequence.length( count );
88 
89  typename ::std::set< T >::const_iterator i = tSet.begin();
90  const typename ::std::set< T >::const_iterator iEnd = tSet.end();
91 
92  for ( CORBA::Long j = 0; i != iEnd; ++j, ++i )
93  sequence[ j ] = *i;
94 }
95 
96 
97 template < typename T, typename S >
98 void
99 carma::util::assignMultisetToSequence( const ::std::multiset< T > & tMultiset,
100  S & sequence )
101 {
102  const typename ::std::multiset< T >::size_type count = tMultiset.size();
103 
104  sequence.length( count );
105 
106  typename ::std::multiset< T >::const_iterator i = tMultiset.begin();
107  const typename ::std::multiset< T >::const_iterator iEnd = tMultiset.end();
108 
109  for ( CORBA::Long j = 0; i != iEnd; ++j, ++i )
110  sequence[ j ] = *i;
111 }
112 
113 
114 template < typename S, typename T >
115 void
116 carma::util::assignSequenceToVector( const S & sequence,
117  ::std::vector< T > & tVector )
118 {
119  const CORBA::Long count = sequence.length();
120 
121  tVector.clear();
122  tVector.reserve( count );
123 
124  for ( CORBA::Long i = 0; i < count; ++i )
125  tVector.push_back( sequence[ i ] );
126 }
127 
128 template < typename S, typename T >
129 void
130 carma::util::assignSequenceToSet( const S & sequence,
131  ::std::set< T > & tSet )
132 {
133  const CORBA::Long count = sequence.length();
134 
135  tSet.clear();
136 
137  for ( CORBA::Long i = 0; i < count; ++i )
138  tSet.insert( sequence[ i ] );
139 }
140 
141 
142 template < typename S, typename T >
143 S
144 carma::util::convertVectorToSequence( const ::std::vector< T > & tVector )
145 {
146  S result;
147 
148  assignVectorToSequence( tVector, result );
149 
150  return result;
151 }
152 
153 
154 template < typename S, typename T >
155 S
156 carma::util::convertSetToSequence( const ::std::set< T > & tSet )
157 {
158  S result;
159 
160  assignSetToSequence( tSet, result );
161 
162  return result;
163 }
164 
165 
166 template < typename S, typename T >
167 S
168 carma::util::convertMultisetToSequence( const ::std::multiset< T > & tMultiset )
169 {
170  S result;
171 
172  assignMultisetToSequence( tMultiset, result );
173 
174  return result;
175 }
176 
177 
178 template < typename T, typename S >
179 ::std::vector< T >
180 carma::util::convertSequenceToVector( const S & sequence )
181 {
182  ::std::vector< T > result;
183 
184  assignSequenceToVector( sequence, result );
185 
186  return result;
187 }
188 
189 template < typename T, typename S >
190 ::std::set< T >
191 carma::util::convertSequenceToSet( const S & sequence )
192 {
193  ::std::set< T > result;
194 
195  assignSequenceToSet( sequence, result );
196 
197  return result;
198 }
199 
200 #endif
sequence< string > SeqString
Sequence of CORBA::String.
Definition: SeqTypedefs.idl:12