forked from ammarahm-ed/react-native-mmkv-storage
-
Notifications
You must be signed in to change notification settings - Fork 0
/
PBUtility.h
executable file
·153 lines (123 loc) · 3.63 KB
/
PBUtility.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
* Tencent is pleased to support the open source community by making
* MMKV available.
*
* Copyright (C) 2018 THL A29 Limited, a Tencent company.
* All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License"); you may not use
* this file except in compliance with the License. You may obtain a copy of
* the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef MMKV_PBUTILITY_H
#define MMKV_PBUTILITY_H
#ifdef __cplusplus
#include "MMKVPredef.h"
#include <cstdint>
#ifndef MMKV_WIN32
# ifndef likely
# define unlikely(x) (__builtin_expect(bool(x), 0))
# define likely(x) (__builtin_expect(bool(x), 1))
# endif
#else
# ifndef likely
# define unlikely(x) (x)
# define likely(x) (x)
# endif
#endif
namespace mmkv {
template <typename T, typename P>
union Converter {
static_assert(sizeof(T) == sizeof(P), "size not match");
T first;
P second;
};
static inline int64_t Float64ToInt64(double v) {
Converter<double, int64_t> converter;
converter.first = v;
return converter.second;
}
static inline int32_t Float32ToInt32(float v) {
Converter<float, int32_t> converter;
converter.first = v;
return converter.second;
}
static inline double Int64ToFloat64(int64_t v) {
Converter<double, int64_t> converter;
converter.second = v;
return converter.first;
}
static inline float Int32ToFloat32(int32_t v) {
Converter<float, int32_t> converter;
converter.second = v;
return converter.first;
}
static inline uint64_t Int64ToUInt64(int64_t v) {
Converter<int64_t, uint64_t> converter;
converter.first = v;
return converter.second;
}
static inline int64_t UInt64ToInt64(uint64_t v) {
Converter<int64_t, uint64_t> converter;
converter.second = v;
return converter.first;
}
static inline uint32_t Int32ToUInt32(int32_t v) {
Converter<int32_t, uint32_t> converter;
converter.first = v;
return converter.second;
}
static inline int32_t UInt32ToInt32(uint32_t v) {
Converter<int32_t, uint32_t> converter;
converter.second = v;
return converter.first;
}
static inline int32_t logicalRightShift32(int32_t value, uint32_t spaces) {
return UInt32ToInt32((Int32ToUInt32(value) >> spaces));
}
static inline int64_t logicalRightShift64(int64_t value, uint32_t spaces) {
return UInt64ToInt64((Int64ToUInt64(value) >> spaces));
}
constexpr uint32_t LittleEdian32Size = 4;
constexpr uint32_t pbFloatSize() {
return LittleEdian32Size;
}
constexpr uint32_t pbFixed32Size() {
return LittleEdian32Size;
}
constexpr uint32_t LittleEdian64Size = 8;
constexpr uint32_t pbDoubleSize() {
return LittleEdian64Size;
}
constexpr uint32_t pbBoolSize() {
return 1;
}
extern uint32_t pbRawVarint32Size(uint32_t value);
static inline uint32_t pbRawVarint32Size(int32_t value) {
return pbRawVarint32Size(Int32ToUInt32(value));
}
extern uint32_t pbUInt64Size(uint64_t value);
static inline uint32_t pbInt64Size(int64_t value) {
return pbUInt64Size(Int64ToUInt64(value));
}
static inline uint32_t pbInt32Size(int32_t value) {
if (value >= 0) {
return pbRawVarint32Size(value);
} else {
return 10;
}
}
static inline uint32_t pbUInt32Size(uint32_t value) {
return pbRawVarint32Size(value);
}
} // namespace mmkv
#endif
#endif //MMKV_PBUTILITY_H