Index: runtime/vm/hash_set.h |
=================================================================== |
--- runtime/vm/hash_set.h (revision 22392) |
+++ runtime/vm/hash_set.h (working copy) |
@@ -1,103 +0,0 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-#ifndef VM_HASH_SET_H_ |
-#define VM_HASH_SET_H_ |
- |
-#include "vm/allocation.h" |
-#include "platform/utils.h" |
- |
-namespace dart { |
- |
-class HashSet { |
- public: |
- HashSet(intptr_t size, intptr_t fill_ratio) |
- : keys_(new uword[size]), |
- size_mask_(size - 1), |
- growth_limit_((size * fill_ratio) / 100), |
- count_(0), |
- fill_ratio_(fill_ratio) { |
- ASSERT(Utils::IsPowerOfTwo(size)); |
- ASSERT(fill_ratio < 100); |
- memset(keys_, 0, size * sizeof(*keys_)); |
- } |
- |
- ~HashSet() { |
- delete[] keys_; |
- } |
- |
- intptr_t Size() const { |
- return size_mask_ + 1; |
- } |
- |
- intptr_t Count() const { |
- return count_; |
- } |
- |
- uword At(intptr_t i) const { |
- ASSERT(i >= 0); |
- ASSERT(i < Size()); |
- return keys_[i]; |
- } |
- |
- // Returns false if the caller should stop adding entries to this HashSet. |
- bool Add(uword value) { |
- ASSERT(value != 0); |
- ASSERT(count_ < growth_limit_); |
- intptr_t hash = Hash(value); |
- while (true) { |
- if (keys_[hash] == value) { |
- return true; |
- } else if (SlotIsEmpty(hash)) { |
- keys_[hash] = value; |
- count_++; |
- return (count_ < growth_limit_); |
- } |
- hash = (hash + 1) & size_mask_; |
- // Ensure that we do not end up looping forever. |
- ASSERT(hash != Hash(value)); |
- } |
- UNREACHABLE(); |
- } |
- |
- bool Contains(uword value) const { |
- if (value == 0) { |
- return false; |
- } |
- intptr_t hash = Hash(value); |
- while (true) { |
- if (keys_[hash] == value) { |
- return true; |
- } else if (SlotIsEmpty(hash)) { |
- return false; |
- } |
- hash = (hash + 1) & size_mask_; |
- // Ensure that we do not end up looping forever. |
- ASSERT(hash != Hash(value)); |
- } |
- UNREACHABLE(); |
- } |
- |
- private: |
- intptr_t Hash(uword value) const { |
- return value & size_mask_; |
- } |
- |
- // Returns true if the given slot does not contain a value. |
- bool SlotIsEmpty(intptr_t index) const { |
- return keys_[index] == 0; |
- } |
- |
- uword* keys_; |
- intptr_t size_mask_; |
- intptr_t growth_limit_; |
- intptr_t count_; |
- intptr_t fill_ratio_; |
- |
- DISALLOW_IMPLICIT_CONSTRUCTORS(HashSet); |
-}; |
- |
-} // namespace dart |
- |
-#endif // VM_HASH_SET_H_ |