BusBoy  2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ArrayUtil.h
Go to the documentation of this file.
1 
17 #ifndef __BUSBOY_ARRAY_UTIL_H__
18 #define __BUSBOY_ARRAY_UTIL_H__
19 
20 #include <set>
21 #include <map>
22 #include <vector>
23 #include <sstream>
24 
25 
26 namespace BUSBOY {
27 
31 template<typename T> void copyArray(const T* src, T* dest, size_t size) {
32  std::copy(src, src+size, dest);
33 }
34 
40 template<typename T> T* copyArray(const T* src, size_t size) {
41  T* dest = new T[size];
42  copyArray<T>(src,dest,size);
43  return dest;
44 }
45 
49 template<typename T> bool compareArray(const T* arr1, const T* arr2, size_t size) {
50  return std::equal(arr1, arr1+size, arr2);
51 }
52 
53 
57 template<typename T>
58 bool comparePointers(const T* p1, const T* p2 ) {
59  return *p1==*p2;
60 }
61 
66 template<typename T>
68  const std::vector<T*> vector1,
69  const std::vector<T*> vector2
70 ) {
71  if ( vector1.size()!=vector2.size() ) return false;
72  return std::equal(vector1.begin(), vector1.end(), vector2.begin(), &comparePointers<T>);
73 }
74 
78 template<typename V>
79 void deleteVectorOfPointers( std::vector<V*>& vector) {
80  for ( typename std::vector<V*>::iterator iter = vector.begin(); iter!=vector.end(); iter++ ) {
81  delete *iter;
82  }
83 }
84 
88 template<typename K, typename V>
90  const std::pair<K,V*>& pair1,
91  const std::pair<K,V*>& pair2
92 ) {
93 
94  // check keys
95  if ( pair1.first!=pair2.first ) {
96  return false;
97  }
98  // check values
99  return *pair1.second==*pair2.second;
100 }
101 
106 template<typename K, typename V>
108  const std::map<K,V*> map1,
109  const std::map<K,V*> map2
110 ) {
111  if ( map1.size()!=map2.size() ) return false;
112  return std::equal(map1.begin(), map1.end(), map2.begin(), &comparePointerPairs<K,V>);
113 }
114 
118 template<typename K, typename V>
119 void deleteMapOfPointers( std::map<K,V*>& map) {
120  for ( typename std::map<K,V*>::iterator iter = map.begin(); iter!=map.end(); iter++ ) {
121  delete iter->second;
122  }
123 }
124 
125 
130 template<typename K, typename V>
131 std::set<K> keySet(const std::map<K,V>& map) {
132  std::set<K> result;
133  typename std::map<K,V>::const_iterator iter=map.begin();
134  for ( ; iter!=map.end(); iter++ ) {
135  result.insert(iter->first);
136  }
137  return result;
138 }
139 
143 template<typename K, typename V>
144 void mapAddAll(std::map<K,V>* map1, const std::map<K,V>& map2) {
145  typename std::map<K,V>::const_iterator iter=map2.begin();
146  for ( ; iter!=map2.end(); iter++ ) {
147  (*map1)[iter->first] = iter->second; // making sure the original values are overwritten
148  }
149 }
150 
154 template<typename T>
155 std::string vectorToString(const std::vector<T>& vec, const std::string& delim) {
156  return containerToString(vec.begin(), vec.end(), delim);
157 }
158 
162 template<typename T>
163 std::string setToString(const std::set<T>& set, const std::string& delim) {
164  return containerToString(set.begin(), set.end(), delim);
165 }
166 
170 template<typename InputIterator>
171 std::string containerToString(const InputIterator begin, const InputIterator end, const std::string& delim) {
172  if ( begin==end ) {
173  return "";
174  }
175  std::ostringstream ss;
176  InputIterator iter = begin;
177  InputIterator ahead = begin;
178  ahead++;
179  for ( ; iter!=end; iter++ ) {
180  ss << *iter;
181  if ( ahead!=end ) {
182  ss << delim << " ";
183  ahead++;
184  }
185  }
186  return ss.str();
187 }
188 
192 template<typename T>
193 std::vector<T> setToVector(const std::set<T>& set) {
194  return std::vector<T>(set.begin(), set.end());
195 }
196 
197 }
198 
199 #endif

Copyright 2014 Google Inc. All rights reserved.