Chromium Code Reviews| Index: src/unique.h |
| diff --git a/src/unique.h b/src/unique.h |
| index 7ae704a26ad18922944050722073ee0a5dfed6c0..38cc336426fa8403db3241b3fcf1fe360d2a368f 100644 |
| --- a/src/unique.h |
| +++ b/src/unique.h |
| @@ -64,6 +64,10 @@ class Unique V8_FINAL { |
| handle_ = handle; |
| } |
| + // TODO(titzer): this is a hack to migrate to Unique<T> incrementally. |
| + Unique(Address raw_address, Handle<T> handle) |
| + : raw_address_(raw_address), handle_(handle) { } |
| + |
| // Constructor for handling automatic up casting. |
| // Ex. Unique<JSFunction> can be passed when Unique<Object> is expected. |
| template <class S> Unique(Unique<S> uniq) { |
| @@ -138,7 +142,7 @@ class UniqueSet V8_FINAL : public ZoneObject { |
| } |
| // Compare this set against another set. O(|this|). |
| - bool Equals(UniqueSet<T>* that) { |
| + bool Equals(UniqueSet<T>* that) const { |
| if (that->size_ != this->size_) return false; |
| for (int i = 0; i < this->size_; i++) { |
| if (this->array_[i] != that->array_[i]) return false; |
| @@ -146,8 +150,17 @@ class UniqueSet V8_FINAL : public ZoneObject { |
| return true; |
| } |
| + template <typename U> |
| + bool Contains(Unique<U> elem) const { |
| + // TODO(titzer): use binary search for larger sets. |
|
Toon Verwaest
2013/09/13 11:20:49
Maybe you want to add an ASSERT that size_ <= 8; o
|
| + for (int i = 0; i < size_; i++) { |
| + if (this->array_[i] == elem) return true; |
| + } |
| + return false; |
| + } |
| + |
| // Check if this set is a subset of the given set. O(|this| + |that|). |
| - bool IsSubset(UniqueSet<T>* that) { |
| + bool IsSubset(UniqueSet<T>* that) const { |
| if (that->size_ < this->size_) return false; |
| int j = 0; |
| for (int i = 0; i < this->size_; i++) { |
| @@ -163,7 +176,7 @@ class UniqueSet V8_FINAL : public ZoneObject { |
| // Returns a new set representing the intersection of this set and the other. |
| // O(|this| + |that|). |
| - UniqueSet<T>* Intersect(UniqueSet<T>* that, Zone* zone) { |
| + UniqueSet<T>* Intersect(UniqueSet<T>* that, Zone* zone) const { |
| if (that->size_ == 0 || this->size_ == 0) return new(zone) UniqueSet<T>(); |
| UniqueSet<T>* out = new(zone) UniqueSet<T>(); |
| @@ -190,7 +203,7 @@ class UniqueSet V8_FINAL : public ZoneObject { |
| // Returns a new set representing the union of this set and the other. |
| // O(|this| + |that|). |
| - UniqueSet<T>* Union(UniqueSet<T>* that, Zone* zone) { |
| + UniqueSet<T>* Union(UniqueSet<T>* that, Zone* zone) const { |
| if (that->size_ == 0) return this->Copy(zone); |
| if (this->size_ == 0) return that->Copy(zone); |
| @@ -222,7 +235,7 @@ class UniqueSet V8_FINAL : public ZoneObject { |
| } |
| // Makes an exact copy of this set. O(|this| + |that|). |
| - UniqueSet<T>* Copy(Zone* zone) { |
| + UniqueSet<T>* Copy(Zone* zone) const { |
| UniqueSet<T>* copy = new(zone) UniqueSet<T>(); |
| copy->size_ = this->size_; |
| copy->capacity_ = this->size_; |
| @@ -231,10 +244,15 @@ class UniqueSet V8_FINAL : public ZoneObject { |
| return copy; |
| } |
| - inline int size() { |
| + inline int size() const { |
| return size_; |
| } |
| + inline Unique<T> at(int index) const { |
| + ASSERT(index >= 0 && index < size_); |
| + return array_[index]; |
| + } |
| + |
| private: |
| // These sets should be small, since operations are implemented with simple |
| // linear algorithms. Enforce a maximum size. |