Home | History | Annotate | Download | only in src
      1 // Copyright 2010 the V8 project authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "src/bit-vector.h"
      6 
      7 #include "src/base/bits.h"
      8 #include "src/utils.h"
      9 
     10 namespace v8 {
     11 namespace internal {
     12 
     13 #ifdef DEBUG
     14 void BitVector::Print() {
     15   bool first = true;
     16   PrintF("{");
     17   for (int i = 0; i < length(); i++) {
     18     if (Contains(i)) {
     19       if (!first) PrintF(",");
     20       first = false;
     21       PrintF("%d", i);
     22     }
     23   }
     24   PrintF("}\n");
     25 }
     26 #endif
     27 
     28 
     29 void BitVector::Iterator::Advance() {
     30   current_++;
     31   uintptr_t val = current_value_;
     32   while (val == 0) {
     33     current_index_++;
     34     if (Done()) return;
     35     val = target_->data_[current_index_];
     36     current_ = current_index_ << kDataBitShift;
     37   }
     38   val = SkipZeroBytes(val);
     39   val = SkipZeroBits(val);
     40   current_value_ = val >> 1;
     41 }
     42 
     43 
     44 int BitVector::Count() const {
     45   int count = 0;
     46   for (int i = 0; i < data_length_; i++) {
     47     uintptr_t data = data_[i];
     48     if (sizeof(data) == 8) {
     49       count += base::bits::CountPopulation64(data);
     50     } else {
     51       count += base::bits::CountPopulation32(static_cast<uint32_t>(data));
     52     }
     53   }
     54   return count;
     55 }
     56 
     57 }  // namespace internal
     58 }  // namespace v8
     59