dl
dl_stream_output.h
浏览该文件的文档.
1
12#pragma once
13
14#include <vector>
15#include <list>
16#include <map>
17#include <unordered_map>
18#include <string>
19
20#include "base/dl_concept.h"
21#include "math/dl_algorithm.h"
22#include "memory/dl_buffer.h"
23#include "memory/dl_memory.h"
24
25namespace dl
26{
29{
30public:
33
37 const std::byte* GetData();
38
39
41 {
42 return _buf;
43 }
45 {
46 return _buf;
47 }
48
52 template <IsCopyable T>
53 void Write(const T* data)
54 {
55 Write(data, sizeof(T));
56 }
57
58 void Write(const Buffer* data)
59 {
60 Write(data->data(), data->size());
61 }
62
63 //---------------------------------------------特殊内容写入---------------------------
67 template <typename T>
68 void Write64(const T* data)
69 {
70 uint64_t temp = uint64_t(*data);
71 Write(&temp, sizeof(uint64_t));//防止64位递归调用
72 }
73
76 template <typename T>
77 void WriteSize(const T* data)
78 {
79 size_t len = std::size(*data);
80 Write64(&len);
81 }
82
85 void WriteCString(const char* str)
86 {
87 Write(str, strlen(str) + 1);
88 }
89
90 template <typename T>
91 void Write(const std::list<T>* container)
92 {
93 Write64(pointer(container->size()));
94 for (auto& iter : *container)
95 {
96 Write(&iter);
97 }
98 }
99
100 template <typename T>
101 void Write(const std::vector<T>* container)
102 {
103 Write64(pointer(container->size()));
104 for (auto& iter : *container)
105 {
106 Write(&iter);
107 }
108 }
109
110 void Write(const std::string* str)
111 {
112 Write64(pointer(str->size()));
113 for (auto& iter : *str)
114 {
115 Write(&iter);
116 }
117 }
118
119 template <typename K, typename V>
120 void Write(const std::map<K, V>* container)
121 {
122 Write64(pointer(container->size()));
123 for (auto& iter : *container)
124 {
125 Write(&iter.first);
126 Write(&iter.second);
127 }
128 }
129
130 template <typename K, typename V>
131 void Write(const std::unordered_map<K, V>* container)
132 {
133 Write64(pointer(container->size()));
134 for (auto& iter : *container)
135 {
136 Write(&iter.first);
137 Write(&iter.second);
138 }
139 }
140 //----------------------------------------------------------------------------
144 void Write(const void* data, size_t byte_count);
145
146
150 void Fill(int val, size_t byte_count);
151
155 bool Save(std::string_view path_name, bool compress = false);
156
160 void Clear();
161
165 size_t GetPos() { return _head; }
166
170 void SetPos(size_t pos);
171
176
180 void SetDelete(bool d)
181 {
182 _delete = d;
183 }
184private:
185 void _realloc(size_t size);
186
187 Buffer _buf;
188 size_t _head;
189 bool _delete;//默认会删除堆内存
190};
191}
size_t size() const
std::byte * data()
void SetPos(size_t pos)
设置 流位置,如果内存不够会扩大
void Compress(Memory::CompressMode mode)
压缩当前内存
void Write(const std::map< K, V > *container)
void WriteSize(const T *data)
写入容器的大小
void Write(const std::unordered_map< K, V > *container)
void WriteCString(const char *str)
写入C风格字符串
void Write(const Buffer *data)
bool Save(std::string_view path_name, bool compress=false)
保存到文件
const std::byte * GetData()
返回指向的内存指针
void Write(const std::string *str)
void Write(const std::list< T > *container)
void Write(const std::vector< T > *container)
size_t GetPos()
返回 流位置
void Fill(int val, size_t byte_count)
填充一段数据,本质调用memset
void SetDelete(bool d)
标记内存已经被移走所有权,析构函数不再释放
void Write64(const T *data)
写入一个类型以64位,对于在64位平台的大小不一致,所以特殊处理
void Write(const T *data)
写入一个对象
void Write(const void *data, size_t byte_count)
写入一段数据,最基础操作
void Clear()
清除数据(移动head标记到内存最开始)
表示一段内存
用于模板限定,更好的报错信息
内存操作相关
T * pointer(T &&x)
查找算法