⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 segment.h

📁 Linux下一个可以比较二进制文件的工具xdelta3.0u的源码。
💻 H
字号:
// -*- Mode: C++ -*-namespace regtest {class Segment { public:  Segment(size_t size, MTRandom *rand)    : size_(size),      seed_(rand->Rand32()),      seed_offset_(0),      data_(NULL) {     CHECK_GT(size_, 0);  }  Segment(size_t size, uint32_t seed)    : size_(size),      seed_(seed),      seed_offset_(0),      data_(NULL) {     CHECK_GT(size_, 0);  }  Segment(size_t size, uint8_t *data)    : size_(size),      seed_(0),      seed_offset_(0),      data_(data) {     CHECK_GT(size_, 0);  }  size_t Size() const {    return size_;   }  Segment Subseg(size_t start, size_t size) const {    CHECK_LE(start + size, size_);    if (data_) {      return Segment(size, data_ + start);    } else {      return Segment(size, seed_, seed_offset_ + start);    }  }  void Fill(size_t seg_offset, size_t size, uint8_t *data) const {    CHECK_LE(seg_offset + size, size_);    if (data_) {      memcpy(data, data_ + seg_offset, size);    } else {      size_t skip = seg_offset + seed_offset_;      MTRandom gen(seed_);      MTRandom8 gen8(&gen);      while (skip--) {	gen8.Rand8();      }      for (size_t i = 0; i < size; i++) {	data[i] = gen8.Rand8();      }    }  }private:  // Used by Subseg()  Segment(size_t size, uint32_t seed, size_t seed_offset)    : size_(size),      seed_(seed),      seed_offset_(seed_offset),      data_(NULL) {    CHECK_GT(size_, 0);  }  friend ostream& operator<<(ostream& os, const Segment &seg);  size_t size_;  // Size of this segment  // For random segments  uint32_t seed_;  // Seed used for generating byte sequence  size_t seed_offset_;  // Seed positions the sequence this many bytes                        // before its beginning.  // For literal segments (data is not owned)  uint8_t *data_;};ostream& operator<<(ostream& os, const Segment &seg) {  if (seg.data_) {    for (size_t i = 0; i < seg.size_; i++) {      char buf[10];      sprintf(buf, "%02x ", seg.data_[i]);      os << buf;    }    return os;  } else {    return os << "size=" << seg.size_ << ",seed=" << seg.seed_	      << ",skip=" << seg.seed_offset_;  }}typedef map<xoff_t, Segment> SegmentMap;}  // namespace regtest

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -