6 #ifndef OPENDDS_DCPS_UTIL_H 7 #define OPENDDS_DCPS_UTIL_H 19 template <
typename Container,
typename FirstType,
typename SecondType>
22 const FirstType& first,
23 const SecondType& second)
25 if (c.find(first) == c.end()) {
26 typedef typename Container::value_type container_value_type;
28 if (c.insert(container_value_type(first, second)).second) {
39 template <
typename Container>
42 const typename Container::key_type& k,
43 typename Container::mapped_type& v)
45 typename Container::const_iterator iter = c.find(k);
47 if (iter != c.end()) {
50 if (c.erase(k) == 1) {
61 template <
typename Container>
64 const typename Container::key_type& k)
66 typename Container::mapped_type v;
70 template <
typename Container,
typename Key>
74 typename Container::mapped_type*&
value)
76 typename Container::iterator iter =
79 if (iter == c.end()) {
83 value = &iter->second;
87 template <
typename Container,
typename Key>
91 typename Container::mapped_type&
value)
93 typename Container::const_iterator iter =
96 if (iter == c.end()) {
100 value = iter->second;
104 template <
typename Container,
typename ValueType>
109 if (c.find(v) == c.end()) {
110 if (c.insert(v).second) {
120 template <
typename Container,
typename ValueType>
125 if (c.find(v) != c.end()) {
126 if (c.erase(v) == 1) {
137 template <
typename Seq>
138 void push_back(Seq& seq,
const typename Seq::value_type& val)
143 if (len && !(len & (len - 1))) {
150 template <
typename Seq>
151 typename Seq::size_type
grow(Seq& seq)
156 if (len && !(len & (len - 1))) {
165 template <
typename InputIteratorA,
typename InputIteratorB,
typename OutputIterator>
167 InputIteratorB b, InputIteratorB bEnd,
170 while (a != aEnd && b != bEnd) {
171 if (*a < *b) { ++a; }
172 else if (*b < *a) { ++b; }
173 else { *intersect++ = *a++; ++b; }
180 template <
typename InputIteratorA,
typename InputIteratorB,
typename OutputIterator,
typename LessThan>
182 InputIteratorB b, InputIteratorB bEnd,
183 OutputIterator
intersect, LessThan lessThan)
185 while (a != aEnd && b != bEnd) {
186 if (lessThan(*a, *b)) { ++a; }
187 else if (lessThan(*b, *a)) { ++b; }
188 else { *intersect++ = *a++; ++b; }
199 template <
typename SetA,
typename SortedB,
typename LessThan>
202 typename SetA::iterator a = sA.begin();
203 typename SortedB::const_iterator b = sB.begin();
204 while (a != sA.end()) {
206 if (lessThan(*a, *b)) {
209 if (!lessThan(*b, *a)) { ++a; }
213 sA.erase(a, sA.end());
220 template <
typename Type,
size_t count>
226 template <
typename T>
229 return std::memcmp(&a, &b,
sizeof(T));
const LogLevel::Value value
int bind(Container &c, const FirstType &first, const SecondType &second)
size_t array_count(Type(&)[count])
int mem_cmp(const T &a, const T &b)
Seq::size_type grow(Seq &seq)
void push_back(Seq &seq, const typename Seq::value_type &val)
std::vector-style push_back() for CORBA Sequences
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
bool set_intersect(SetA &sA, const SortedB &sB, LessThan lessThan)
void intersect(const GuidSet &a, const GuidSet &b, GuidSet &result)
int insert(Container &c, const ValueType &v)
OutputIterator intersect_sorted_ranges(InputIteratorA a, InputIteratorA aEnd, InputIteratorB b, InputIteratorB bEnd, OutputIterator intersect)
The Internal API and Implementation of OpenDDS.
int unbind(Container &c, const typename Container::key_type &k, typename Container::mapped_type &v)
int find(Container &c, const Key &key, typename Container::mapped_type *&value)