索引文件核心頭文件定義

1 BlockInfo

定義直接放在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_;
	}
};

2 MetaInfo

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;
		}
};

參考資料:

  1. C/C++從入門到精通-高級程序員之路【奇牛學院】
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章