MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
serializer.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.wyl on 2024/02/19.
13//
14
15#pragma once
16
17#include <stdint.h>
18
19#include "common/lang/vector.h"
20#include "common/lang/span.h"
21
22namespace common {
23
28class Serializer final
29{
30public:
31 using BufferType = vector<char>;
32
33public:
34 Serializer() = default;
35 ~Serializer() = default;
36
37 Serializer(const Serializer &) = delete;
38 Serializer &operator=(const Serializer &) = delete;
39
41 int write(span<const char> data);
43 int write(const char *data, int size) { return write(span<const char>(data, size)); }
45 int64_t size() const { return buffer_.size(); }
46
47 BufferType &data() { return buffer_; }
48 const BufferType &data() const { return buffer_; }
49
51 int write_int32(int32_t value);
53 int write_int64(int64_t value);
54
55private:
56 BufferType buffer_;
57};
58
62class Deserializer final
63{
64public:
65 explicit Deserializer(span<const char> buffer) : buffer_(buffer) {}
66 Deserializer(const char *buffer, int size) : buffer_(buffer, size) {}
67 ~Deserializer() = default;
68
69 Deserializer(const Deserializer &) = delete;
70 Deserializer &operator=(const Deserializer &) = delete;
71
73 int read(span<char> data);
75 int read(char *data, int size) { return read(span<char>(data, size)); }
76
78 int64_t size() const { return buffer_.size(); }
79
81 int64_t remain() const { return buffer_.size() - position_; }
82
84 int read_int32(int32_t &value);
86 int read_int64(int64_t &value);
87
88private:
89 span<const char> buffer_;
90 int64_t position_ = 0;
91};
92
93} // namespace common
反序列化工具
Definition: serializer.h:63
int64_t size() const
buffer的大小
Definition: serializer.h:78
int read(char *data, int size)
读取指定长度的数据
Definition: serializer.h:75
int64_t position_
当前读取到的位置
Definition: serializer.h:90
int read_int32(int32_t &value)
读取一个int32数据
Definition: serializer.cpp:49
int read_int64(int64_t &value)
读取一个int64数据
Definition: serializer.cpp:55
span< const char > buffer_
存放数据的buffer
Definition: serializer.h:89
int64_t remain() const
还剩余多少数据
Definition: serializer.h:81
int read(span< char > data)
读取指定大小的数据
Definition: serializer.cpp:38
序列化工具
Definition: serializer.h:29
int write_int64(int64_t value)
写入一个int64整数
Definition: serializer.cpp:32
int64_t size() const
当前写入了多少数据
Definition: serializer.h:45
int write_int32(int32_t value)
写入一个int32整数
Definition: serializer.cpp:26
int write(const char *data, int size)
写入指定长度的数据
Definition: serializer.h:43
int write(span< const char > data)
写入指定长度的数据
Definition: serializer.cpp:20