1 //===-- STLUtils.h ----------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_STLUtils_h_ 11 #define liblldb_STLUtils_h_ 12 #if defined(__cplusplus) 13 14 #include <string.h> 15 16 #include <map> 17 #include <ostream> 18 #include <vector> 19 20 //---------------------------------------------------------------------- 21 // C string less than compare function object 22 //---------------------------------------------------------------------- 23 struct CStringCompareFunctionObject 24 { 25 bool operator() (const char* s1, const char* s2) const 26 { 27 return strcmp(s1, s2) < 0; 28 } 29 }; 30 31 32 //---------------------------------------------------------------------- 33 // C string equality function object (binary predicate). 34 //---------------------------------------------------------------------- 35 struct CStringEqualBinaryPredicate 36 { 37 bool operator()(const char* s1, const char* s2) const 38 { 39 return strcmp(s1, s2) == 0; 40 } 41 }; 42 43 44 //---------------------------------------------------------------------- 45 // Templated type for finding an entry in a std::map<F,S> whose value 46 // is equal to something 47 //---------------------------------------------------------------------- 48 template <class F, class S> 49 class ValueEquals 50 { 51 private: 52 S second_value; 53 54 public: 55 ValueEquals (const S& val) : second_value(val) 56 {} 57 // Compare the second item 58 bool operator() (std::pair<const F, S> elem) 59 { 60 return elem.second == second_value; 61 } 62 }; 63 64 template <class T> 65 inline void PrintAllCollectionElements (std::ostream &s, const T& coll, const char* header_cstr=NULL, const char* separator_cstr=" ") 66 { 67 typename T::const_iterator pos; 68 69 if (header_cstr) 70 s << header_cstr; 71 for (pos=coll.begin(); pos!=coll.end(); ++pos) { 72 s << *pos << separator_cstr; 73 } 74 s << std::endl; 75 } 76 77 // The function object below can be used to delete a STL container that 78 // contains C++ object pointers. 79 // 80 // Usage: std::for_each(vector.begin(), vector.end(), for_each_delete()); 81 82 struct for_each_cplusplus_delete 83 { 84 template <typename T> 85 void operator()(T *ptr){ delete ptr;} 86 }; 87 88 typedef std::vector<std::string> STLStringArray; 89 typedef std::vector<const char *> CStringArray; 90 91 92 93 #endif // #if defined(__cplusplus) 94 #endif // liblldb_STLUtils_h_ 95