[llvm-commits] CVS: llvm/include/llvm/Support/Search.h

Jim Laskey jlaskey at apple.com
Thu Aug 25 06:32:37 PDT 2005



Changes in directory llvm/include/llvm/Support:

Search.h added (r1.1)
---
Log message:

Added support for generic linear/binary search.



---
Diffs of the changes:  (+78 -0)

 Search.h |   78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 78 insertions(+)


Index: llvm/include/llvm/Support/Search.h
diff -c /dev/null llvm/include/llvm/Support/Search.h:1.1
*** /dev/null	Thu Aug 25 08:32:35 2005
--- llvm/include/llvm/Support/Search.h	Thu Aug 25 08:32:25 2005
***************
*** 0 ****
--- 1,78 ----
+ //===- llvm/Support/Search.h - Support for searching algorithms -*- C++ -*-===//
+ //
+ //                     The LLVM Compiler Infrastructure
+ //
+ // This file was developed by the LLVM research group and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // These templates impliment various generic search algorithms.
+ //
+ //===----------------------------------------------------------------------===//
+ 
+ #ifndef LLVM_SUPPORT_SEARCH_H
+ #define LLVM_SUPPORT_SEARCH_H
+ 
+ namespace llvm {
+   // SearchString - generalized string compare method container.  Used for
+   // search templates.
+   struct SearchString {
+     static inline int Compare(const char *A, const char *B) {
+       return strcmp(A, B);
+     }
+   };
+       
+   // LinearSearch - search an array of items for a match using linear search
+   // algorithm.  Return find index or -1 if not found.
+   //   ItemType - type of elements in array.
+   //   CompareClass - container for compare method in form of
+   //                  static int Compare(ItemType A, ItemType B)
+   //                         returns < 0 for A < B
+   //                                 > 0 for A > B
+   //                                 == 0 for A == B
+   //   Match - item to match in array.
+   //   Array - an array of items to be searched.
+   //   Size - size of array in bytes.  
+   //
+   // Eg.  LinearSearch<const char *, SearchString>("key", List, sizeof(List));
+   //
+   template<typename ItemType, class CompareClass>
+   inline int LinearSearch(ItemType Match, ItemType Array[], size_t Size) {
+     unsigned N = Size / sizeof(ItemType);
+     for (unsigned Index = 0; Index < N; Index++) {
+       if (!CompareClass::Compare(Match, Array[Index])) return Index;
+     }
+     return -1;
+   }
+       
+   // BinarySearch - search an array of items for a match using binary search
+   // algorithm.  Return find index or -1 if not found.
+   //   ItemType - type of elements in array.
+   //   CompareClass - container for compare method in form of
+   //                  static int Compare(ItemType A, ItemType B)
+   //                         returns < 0 for A < B
+   //                                 > 0 for A > B
+   //                                 == 0 for A == B
+   //   Match - item to match in array.
+   //   Array - a sorted array of items to be searched.
+   //   Size - size of array in bytes.  
+   //
+   // Eg.  BinarySearch<const char *, SearchString>("key", List, sizeof(List));
+   //
+   template<typename ItemType, class CompareClass>
+   inline int BinarySearch(ItemType Match, ItemType Array[], size_t Size) {
+     int Lo = 0, Hi = Size / sizeof(ItemType);
+     while (Lo <= Hi) {
+       unsigned Mid = (Lo + Hi) >> 1;
+       int Result = CompareClass::Compare(Match, Array[Mid]);
+       if      (Result < 0) Hi = Mid - 1;
+       else if (Result > 0) Lo = Mid + 1;
+       else                 return Mid;
+     }
+     return -1;
+   }
+ }
+ 
+ #endif
+   






More information about the llvm-commits mailing list