zoukankan      html  css  js  c++  java
  • 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 只接受输入的字符串指针 并不负责内存的分配和释放管理

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    PHP 魔术函数
    创建静态链接库
    Linux C 子进程的调度
    Android开发(三) android布局
    谷歌(Google)算法面试题
    Android开发(二) 详细了解android开发
    制作makefile文件
    SHELL编程
    5 Rules For A Good Web Design
    非托管代码方法的命名约定
  • 原文地址:https://www.cnblogs.com/itdef/p/7722120.html
Copyright © 2011-2022 走看看