LogSystem beta 1.4
This is a logging system project
 
载入中...
搜索中...
未找到
buffer.hpp
浏览该文件的文档.
1
7#pragma once
8#include "util.hpp"
9#include <vector>
10#include <cassert>
11namespace Xulog
12{
13// 设置默认缓冲区大小10MB,阈值缓冲区大小100MB,增量大小10MB
14#define DEFAULT_BUFFER_SIZE (10 * 1024 * 1024)
15#define THRESHOLD_BUFFER_SIZE (100 * 1024 * 1024)
16#define INCREMENT_BUFFER_SIZE (10 * 1024 * 1024)
23 class Buffer
24 {
25 public:
43 void push(const char *data, size_t len)
44 {
45 // 动态空间,则扩容写入
47 // 数据写入缓冲区
48 std::copy(data, data + len, &_buffer[_writer_idx]);
49 // 写指针偏移
50 moveWriter(len);
51 }
57 const char *begin()
58 {
59 return &_buffer[_reader_idx];
60 }
66 size_t readAbleSize()
67 {
68 // 单方向写入读出的缓冲区
69 return (_writer_idx - _reader_idx);
70 }
77 {
78 // 扩容测试,总可写
79 return (_buffer.size() - _writer_idx);
80 }
88 void moveReader(size_t len)
89 {
90 assert(len <= readAbleSize());
91 _reader_idx += len;
92 }
98 void reset()
99 {
100 _reader_idx = 0;
101 _writer_idx = 0;
102 }
110 void swap(Buffer &buffer)
111 {
112 _buffer.swap(buffer._buffer);
113 std::swap(_reader_idx, buffer._reader_idx);
114 std::swap(_writer_idx, buffer._writer_idx);
115 }
121 bool empty()
122 {
123 return _reader_idx == _writer_idx;
124 }
125
126 private:
134 void moveWriter(size_t len)
135 {
136 assert(len + _writer_idx <= _buffer.size());
137 _writer_idx += len;
138 }
146 void ensureEnoughSize(size_t len)
147 {
148 if (len <= writeAbleSize())
149 return;
150 size_t new_size = 0;
151 if (_buffer.size() < THRESHOLD_BUFFER_SIZE)
152 new_size = _buffer.size() * 2 + len; // 小于阈值则翻倍
153 else
154 new_size = _buffer.size() + INCREMENT_BUFFER_SIZE + len; // 大于阈值则线性增长
155 _buffer.resize(new_size);
156 }
157
158 private:
159 std::vector<char> _buffer;
160 size_t _reader_idx;
161 size_t _writer_idx;
162 };
163}
#define DEFAULT_BUFFER_SIZE
默认缓冲区大小
Definition buffer.hpp:14
#define THRESHOLD_BUFFER_SIZE
阈值缓冲区大小
Definition buffer.hpp:15
#define INCREMENT_BUFFER_SIZE
增量大小
Definition buffer.hpp:16
异步日志缓冲区类
Definition buffer.hpp:24
void push(const char *data, size_t len)
向缓冲区写入数据
Definition buffer.hpp:43
void moveReader(size_t len)
移动读指针
Definition buffer.hpp:88
size_t readAbleSize()
获取可读数据的长度
Definition buffer.hpp:66
bool empty()
判空
Definition buffer.hpp:121
void ensureEnoughSize(size_t len)
确保缓冲区有足够的空间
Definition buffer.hpp:146
size_t writeAbleSize()
获取可写数据的长度
Definition buffer.hpp:76
const char * begin()
获取可读数据的起始地址
Definition buffer.hpp:57
Buffer()
构造函数
Definition buffer.hpp:31
std::vector< char > _buffer
存储缓冲区数据的字符
Definition buffer.hpp:159
size_t _reader_idx
可读数据指针
Definition buffer.hpp:160
void swap(Buffer &buffer)
交换当前缓冲区与另一个缓冲区
Definition buffer.hpp:110
size_t _writer_idx
可写数据指针
Definition buffer.hpp:161
void moveWriter(size_t len)
移动写指针
Definition buffer.hpp:134
void reset()
重置缓冲区
Definition buffer.hpp:98
Definition buffer.hpp:12
实用工具类的实现