MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
ring_buffer.h
1/* Copyright (c) 2021 OceanBase and/or its affiliates. All rights reserved.
2miniob is licensed under Mulan PSL v2.
3You can use this software according to the terms and conditions of the Mulan PSL v2.
4You may obtain a copy of Mulan PSL v2 at:
5 http://license.coscl.org.cn/MulanPSL2
6THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
7EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
8MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
9See the Mulan PSL v2 for more details. */
10
11//
12// Created by Wangyunlai on 2023/06/16.
13//
14
15#pragma once
16
17#include <vector>
18
19#include "common/rc.h"
20
26{
27public:
31 RingBuffer();
32
37 explicit RingBuffer(int32_t size);
38
39 virtual ~RingBuffer();
40
47 RC read(char *buf, int32_t size, int32_t &read_size);
48
55 RC buffer(const char *&buf, int32_t &read_size);
56
62 RC forward(int32_t size);
63
70 RC write(const char *buf, int32_t size, int32_t &write_size);
71
75 int32_t capacity() const { return static_cast<int32_t>(buffer_.size()); }
76
80 int32_t remain() const { return capacity() - size(); }
81
85 int32_t size() const { return data_size_; }
86
87private:
88 int32_t read_pos() const { return (write_pos_ - this->size() + capacity()) % capacity(); }
89
90private:
91 std::vector<char> buffer_;
92 int32_t data_size_ = 0;
93 int32_t write_pos_ = 0;
94};
环形缓存,当前用于通讯写入数据时的缓存
Definition: ring_buffer.h:26
int32_t write_pos_
当前写指针的位置,范围不会超出[0, capacity)
Definition: ring_buffer.h:93
int32_t size() const
缓存中已经写入数据的空间大小
Definition: ring_buffer.h:85
int32_t data_size_
已经写入的数据量
Definition: ring_buffer.h:92
int32_t capacity() const
缓存的总容量
Definition: ring_buffer.h:75
std::vector< char > buffer_
缓存使用的内存,使用vector方便管理
Definition: ring_buffer.h:91
int32_t remain() const
缓存中剩余的可写入数据的空间
Definition: ring_buffer.h:80
RingBuffer()
使用默认缓存大小的构造函数,默认大小16K
Definition: ring_buffer.cpp:24
RC write(const char *buf, int32_t size, int32_t &write_size)
将数据写入缓存
Definition: ring_buffer.cpp:93
RC forward(int32_t size)
将读指针向前移动size个字节
Definition: ring_buffer.cpp:78
RC buffer(const char *&buf, int32_t &read_size)
从缓存中读取数据,不会移动读指针
Definition: ring_buffer.cpp:59
RC read(char *buf, int32_t size, int32_t &read_size)
从缓存中读取数据
Definition: ring_buffer.cpp:35