定义直接放在common.h中:
struct BlockInfo { uint32_t block_id_; int32_t version_; int32_t file_count_; int32_t size_; int32_t del_file_count_; int32_t del_size_; uint32_t seq_no_; BlockInfo() { memset(this, 0, sizeof(BlockInfo)); } inline bool operator==(const BlockInfo& rhs) const{ return block_id_ == rhs.block_id_ && version_ == rhs.version_ && file_count_ == rhs.file_count_ && size_ == rhs.size_ && del_file_count_ == rhs.del_file_count_ && del_size_ == rhs.del_size_ && seq_no_ == rhs.seq_no_; } };MetaInfo的定义也直接放在common.h中:
struct MetaInfo { public: MetaInfo() { init(); } MetaInfo(const uint64_t file_id, const int32_t in_offset, const int32_t file_size, const int32_t next_meta_offset) { fileid_ = file_id; location_.inner_offset_ = in_offset; location_.size_ = file_size; next_meta_offset_ = next_meta_offset; } MetaInfo(const MetaInfo& meta_info) { memcpy(this, &meta_info, sizeof(MetaInfo)); } MetaInfo& operator=(const MetaInfo& meta_info) { if(this == &meta_info){ return *this; } fileid_ = meta_info.fileid_; location_.inner_offset_ = meta_info.location_.inner_offset_ ; location_.size_ = meta_info.location_.size_; next_meta_offset_ = meta_info.next_meta_offset_; } MetaInfo& clone(const MetaInfo& meta_info) { assert(this != &meta_info); fileid_ = meta_info.fileid_; location_.inner_offset_ = meta_info.location_.inner_offset_ ; location_.size_ = meta_info.location_.size_; next_meta_offset_ = meta_info.next_meta_offset_; return *this; } bool operator == (const MetaInfo& rhs) const{ return fileid_ == rhs.fileid_ && location_.inner_offset_ == rhs.location_.inner_offset_ && location_.size_ == rhs.location_.size_&& next_meta_offset_ == rhs.next_meta_offset_; } uint64_t get_key() const { return fileid_; } void set_key(const uint64_t key) { fileid_ = key; } uint64_t get_file_id() const { return fileid_; } void set_file_id(const uint64_t file_id) { fileid_ = file_id; } int32_t get_offset() const{ return location_.inner_offset_; } void set_offset(const int32_t offset) { location_.inner_offset_ = offset; } int32_t get_size() const{ return location_.size_; } void set_size(const int32_t file_size) { location_.size_ = file_size; } int32_t get_next_meta_offset() const{ return next_meta_offset_; } void set_next_meta_offset(const int32_t offset) { next_meta_offset_ = offset; } private: uint64_t fileid_; struct{ int32_t inner_offset_; int32_t size_; }location_; int32_t next_meta_offset_; private: void init() { fileid_ = 0; location_.inner_offset_ = 0; location_.size_ = 0; next_meta_offset_ = 0; } };参考资料:
C/C++从入门到精通-高级程序员之路【奇牛学院】