void init(Space mem_,byte fill_)
   {
    mem=mem_;
    fill=fill_;

    ByteRange(mem_).set(fill_);
   }
示例#2
0
void testVarint(uint64_t val, std::initializer_list<uint8_t> bytes) {
  size_t n = bytes.size();
  ByteRange expected(&*bytes.begin(), n);

  {
    uint8_t buf[kMaxVarintLength64];
    EXPECT_EQ(expected.size(), encodeVarint(val, buf));
    EXPECT_TRUE(ByteRange(buf, expected.size()) == expected);
  }

  {
    ByteRange r = expected;
    uint64_t decoded = decodeVarint(r);
    EXPECT_TRUE(r.empty());
    EXPECT_EQ(val, decoded);
  }

  if (n < kMaxVarintLength64) {
    // Try from a full buffer too, different code path
    uint8_t buf[kMaxVarintLength64];
    memcpy(buf, &*bytes.begin(), n);

    uint8_t fills[] = {0, 0x7f, 0x80, 0xff};

    for (uint8_t fill : fills) {
      memset(buf + n, fill, kMaxVarintLength64 - n);
      ByteRange r(buf, kMaxVarintLength64);
      uint64_t decoded = decodeVarint(r);
      EXPECT_EQ(val, decoded);
      EXPECT_EQ(kMaxVarintLength64 - n, r.size());
    }
  }
}
  void init(Space space_,byte fill_)
   {
    space=space_;
    fill=fill_;

    ByteRange(space_).set(fill_);
   }
  bool extend(Heap &heap,ulen len)
   {
    DeltaLen result=heap.extend(mem.mem,len);

    if( result.ok )
      {
       auto r=ByteRange(mem);

       Range(r.ptr+r.len,result.delta).set(fill);

       mem.len+=result.delta;

       return true;
      }

    return false;
   }
示例#5
0
void writeFileAtomic(
    StringPiece filename,
    StringPiece data,
    mode_t permissions) {
  writeFileAtomic(filename, ByteRange(data), permissions);
}
  void check(Heap &heap)
   {
    if( mem.len!=heap.getLen(mem.mem) ) fail(1);

    for(auto r=ByteRange(mem); +r ;++r) if( *r!=fill ) fail(2);
   }
示例#7
0
ByteRange DataHolder::data(size_t size) const {
  CHECK_LE(size, size_);
  return ByteRange(data_.get(), size);
}