MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
全部  文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义  
ob_coding.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#pragma once
12
13#include "common/lang/string.h"
14
15namespace oceanbase {
16
17static const uint8_t SEQ_SIZE = 8;
18static const uint8_t LOOKUP_KEY_PREFIX_SIZE = 8;
19
30template <typename T>
31void put_numeric(string *dst, T v)
32{
33 dst->append(reinterpret_cast<char *>(&v), sizeof(T));
34}
35
46template <typename T>
47T get_numeric(const char *src)
48{
49 T value;
50 memcpy(&value, src, sizeof(T));
51 return value;
52}
53
64inline string_view extract_user_key(const string_view &internal_key)
65{
66 return string_view(internal_key.data(), internal_key.size() - SEQ_SIZE);
67}
68
78inline uint64_t extract_sequence(const string_view &internal_key)
79{
80 return get_numeric<uint64_t>(internal_key.data() + internal_key.size() - SEQ_SIZE);
81}
82
93inline size_t user_key_size_from_lookup_key(const string_view &lookup_key)
94{
95 return lookup_key.size() - SEQ_SIZE - LOOKUP_KEY_PREFIX_SIZE;
96}
97
107inline string_view extract_user_key_from_lookup_key(const string_view &lookup_key)
108{
109 return string_view(lookup_key.data() + LOOKUP_KEY_PREFIX_SIZE, user_key_size_from_lookup_key(lookup_key));
110}
111
112inline string_view extract_internal_key(const string_view &lookup_key)
113{
114 return string_view(lookup_key.data() + LOOKUP_KEY_PREFIX_SIZE, lookup_key.size() - LOOKUP_KEY_PREFIX_SIZE);
115}
116
117inline string_view get_length_prefixed_string(const char *data)
118{
119 size_t len = get_numeric<size_t>(data);
120 const char *p = data + sizeof(size_t);
121 return string_view(p, len);
122}
123
124} // namespace oceanbase