leveldb 学习记录 Slice

Posted itdef

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leveldb 学习记录 Slice相关的知识,希望对你有一定的参考价值。

基本每个KV库都有一个简洁的字符串管理类

比如redis的sds  比如leveldb的slice

管理一个字符串指针和数据长度

通过对字符串指针 长度的管理实现一般的创建 判断是否为空 获取第N个位置元素等管理

还可以进行字符串裁剪等操作 避免了一些复制拷贝的消耗性能的操作。

class Slice {
public:

// Return the ith byte in the referenced data.
// REQUIRES: n < size()

//返回字符串中第N个字符
char operator[](size_t n) const {
assert(n < size());
return data_[n];
}

// Return true iff "x" is a prefix of "*this"

//判断是否以XXX开始作为前缀
bool starts_with(const Slice& x) const {
return ((size_ >= x.size_) &&
(memcmp(data_, x.data_, x.size_) == 0));
}

//移除前N个前缀
// Drop the first "n" bytes from this slice.
void remove_prefix(size_t n) {
assert(n <= size());
data_ += n;
size_ -= n;
}

private:
const char* data_;
size_t size_;

}
与redis不同的是
Slice 只接受输入的字符串指针 并不负责内存的分配和释放管理

 

以上是关于leveldb 学习记录 Slice的主要内容,如果未能解决你的问题,请参考以下文章

leveldb 学习记录SSTable:Block操作

Leveldb学习笔记:leveldb的使用与原理探究

leveldb学习笔记

Leveldb学习笔记:leveldb的使用与原理探究

Leveldb学习笔记:leveldb的使用与原理探究

caffe 学习记录1