Home | History | Annotate | Download | only in Core
      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