Reviewers: Kevin Millikin,

Description:
Add copy constructor and assignment operator to the BitVector class.


Please review this at http://codereview.chromium.org/668259

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     src/data-flow.h
  M     test/cctest/test-dataflow.cc


Index: test/cctest/test-dataflow.cc
===================================================================
--- test/cctest/test-dataflow.cc        (revision 4056)
+++ test/cctest/test-dataflow.cc        (working copy)
@@ -61,6 +61,20 @@
   }

   {
+    BitVector v(15);
+    v.Add(0);
+    BitVector 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);
Index: src/data-flow.h
===================================================================
--- src/data-flow.h     (revision 4056)
+++ src/data-flow.h     (working copy)
@@ -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<uint32_t>::New(1 + length / 32)) {
     ASSERT(length > 0);
-    bits_ = Vector<uint32_t>::New(1 + length / 32);
     for (int i = 0; i < bits_.length(); i++) {
       bits_[i] = 0;
     }
   }

+  BitVector(const BitVector& other)
+      : length_(other.length()),
+        bits_(Vector<uint32_t>::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,25 @@
     }
   }

+  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<uint32_t> bits_;

-  DISALLOW_COPY_AND_ASSIGN(BitVector);
 };




--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to