From: fschneider@chromium.org Date: Tue, 9 Mar 2010 09:51:37 +0000 (+0000) Subject: Add copy constructor and assignment operator to the BitVector class. X-Git-Tag: upstream/4.7.83~22307 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cc9512f661bf1fd0350605a91dd7b9354e42f952;p=platform%2Fupstream%2Fv8.git Add copy constructor and assignment operator to the BitVector class. Review URL: http://codereview.chromium.org/668259 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4063 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/data-flow.h b/src/data-flow.h index 30c0336..adad5f9 100644 --- a/src/data-flow.h +++ b/src/data-flow.h @@ -36,18 +36,29 @@ namespace v8 { namespace internal { -class BitVector { +class BitVector BASE_EMBEDDED { public: - explicit BitVector(int length) : length_(length) { + explicit BitVector(int length) + : length_(length), bits_(Vector::New(1 + length / 32)) { ASSERT(length > 0); - bits_ = Vector::New(1 + length / 32); for (int i = 0; i < bits_.length(); i++) { bits_[i] = 0; } } + BitVector(const BitVector& other) + : length_(other.length()), + bits_(Vector::New(1 + other.length() / 32)) { + CopyFrom(other); + } + ~BitVector() { bits_.Dispose(); } + BitVector& operator=(const BitVector& rhs) { + if (this != &rhs) CopyFrom(rhs); + return *this; + } + void CopyFrom(const BitVector& other) { ASSERT(other.length() == length()); for (int i = 0; i < bits_.length(); i++) { @@ -85,13 +96,24 @@ class BitVector { } } + void Clear() { + for (int i = 0; i < bits_.length(); i++) { + bits_[i] = 0; + } + } + + bool IsEmpty() { + for (int i = 0; i < bits_.length(); i++) { + if (bits_[i] != 0) return false; + } + return true; + } + int length() const { return length_; } private: int length_; Vector bits_; - - DISALLOW_COPY_AND_ASSIGN(BitVector); }; diff --git a/test/cctest/test-dataflow.cc b/test/cctest/test-dataflow.cc index 1e9f655..085198a 100644 --- a/test/cctest/test-dataflow.cc +++ b/test/cctest/test-dataflow.cc @@ -61,6 +61,21 @@ TEST(BitVector) { } { + BitVector v(15); + v.Add(0); + BitVector w(15); + w = v; + CHECK(w.Contains(0)); + w.Add(1); + BitVector u(w); + CHECK(u.Contains(0)); + CHECK(u.Contains(1)); + v.Union(w); + CHECK(v.Contains(0)); + CHECK(v.Contains(1)); + } + + { BitVector v(35); v.Add(0); BitVector w(35);