Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index c741ce34e132ad255a944f3a30110e88863cba0d..1c1aec3cf788b8091068b8af63b07a236c4adb69 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -2853,10 +2853,8 @@ void DescriptorArray::SetNumberOfDescriptors(int number_of_descriptors) { |
// Perform a binary search in a fixed array. Low and high are entry indices. If |
// there are three entries in this array it should be called with low=0 and |
// high=2. |
-template <SearchMode search_mode, typename T> |
-int BinarySearch(T* array, Name* name, int low, int high, int valid_entries, |
- int* out_insertion_index) { |
- DCHECK(search_mode == ALL_ENTRIES || out_insertion_index == NULL); |
+template<SearchMode search_mode, typename T> |
+int BinarySearch(T* array, Name* name, int low, int high, int valid_entries) { |
uint32_t hash = name->Hash(); |
int limit = high; |
@@ -2877,13 +2875,7 @@ int BinarySearch(T* array, Name* name, int low, int high, int valid_entries, |
for (; low <= limit; ++low) { |
int sort_index = array->GetSortedKeyIndex(low); |
Name* entry = array->GetKey(sort_index); |
- uint32_t current_hash = entry->Hash(); |
- if (current_hash != hash) { |
- if (out_insertion_index != NULL) { |
- *out_insertion_index = sort_index + (current_hash > hash ? 0 : 1); |
- } |
- return T::kNotFound; |
- } |
+ if (entry->Hash() != hash) break; |
if (entry->Equals(name)) { |
if (search_mode == ALL_ENTRIES || sort_index < valid_entries) { |
return sort_index; |
@@ -2892,45 +2884,37 @@ int BinarySearch(T* array, Name* name, int low, int high, int valid_entries, |
} |
} |
- if (out_insertion_index != NULL) *out_insertion_index = limit + 1; |
return T::kNotFound; |
} |
// Perform a linear search in this fixed array. len is the number of entry |
// indices that are valid. |
-template <SearchMode search_mode, typename T> |
-int LinearSearch(T* array, Name* name, int len, int valid_entries, |
- int* out_insertion_index) { |
+template<SearchMode search_mode, typename T> |
+int LinearSearch(T* array, Name* name, int len, int valid_entries) { |
uint32_t hash = name->Hash(); |
if (search_mode == ALL_ENTRIES) { |
for (int number = 0; number < len; number++) { |
int sorted_index = array->GetSortedKeyIndex(number); |
Name* entry = array->GetKey(sorted_index); |
uint32_t current_hash = entry->Hash(); |
- if (current_hash > hash) { |
- if (out_insertion_index != NULL) *out_insertion_index = sorted_index; |
- return T::kNotFound; |
- } |
+ if (current_hash > hash) break; |
if (current_hash == hash && entry->Equals(name)) return sorted_index; |
} |
- if (out_insertion_index != NULL) *out_insertion_index = len; |
- return T::kNotFound; |
} else { |
DCHECK(len >= valid_entries); |
- DCHECK_EQ(NULL, out_insertion_index); // Not supported here. |
for (int number = 0; number < valid_entries; number++) { |
Name* entry = array->GetKey(number); |
uint32_t current_hash = entry->Hash(); |
if (current_hash == hash && entry->Equals(name)) return number; |
} |
- return T::kNotFound; |
} |
+ return T::kNotFound; |
} |
-template <SearchMode search_mode, typename T> |
-int Search(T* array, Name* name, int valid_entries, int* out_insertion_index) { |
+template<SearchMode search_mode, typename T> |
+int Search(T* array, Name* name, int valid_entries) { |
if (search_mode == VALID_ENTRIES) { |
SLOW_DCHECK(array->IsSortedNoDuplicates(valid_entries)); |
} else { |
@@ -2938,10 +2922,7 @@ int Search(T* array, Name* name, int valid_entries, int* out_insertion_index) { |
} |
int nof = array->number_of_entries(); |
- if (nof == 0) { |
- if (out_insertion_index != NULL) *out_insertion_index = 0; |
- return T::kNotFound; |
- } |
+ if (nof == 0) return T::kNotFound; |
// Fast case: do linear search for small arrays. |
const int kMaxElementsForLinearSearch = 8; |
@@ -2949,18 +2930,16 @@ int Search(T* array, Name* name, int valid_entries, int* out_insertion_index) { |
nof <= kMaxElementsForLinearSearch) || |
(search_mode == VALID_ENTRIES && |
valid_entries <= (kMaxElementsForLinearSearch * 3))) { |
- return LinearSearch<search_mode>(array, name, nof, valid_entries, |
- out_insertion_index); |
+ return LinearSearch<search_mode>(array, name, nof, valid_entries); |
} |
// Slow case: perform binary search. |
- return BinarySearch<search_mode>(array, name, 0, nof - 1, valid_entries, |
- out_insertion_index); |
+ return BinarySearch<search_mode>(array, name, 0, nof - 1, valid_entries); |
} |
int DescriptorArray::Search(Name* name, int valid_descriptors) { |
- return internal::Search<VALID_ENTRIES>(this, name, valid_descriptors, NULL); |
+ return internal::Search<VALID_ENTRIES>(this, name, valid_descriptors); |
} |