]> git.proxmox.com Git - ceph.git/blame - ceph/src/os/kv.h
import ceph quincy 17.2.6
[ceph.git] / ceph / src / os / kv.h
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#ifndef CEPH_OS_KV_H
5#define CEPH_OS_KV_H
6
7#include <string>
8#include "include/byteorder.h"
9
10// some key encoding helpers
11template<typename T>
12inline static void _key_encode_u32(uint32_t u, T *key) {
13 uint32_t bu;
14#ifdef CEPH_BIG_ENDIAN
15 bu = u;
16#elif defined(CEPH_LITTLE_ENDIAN)
17 bu = swab(u);
18#else
19# error wtf
20#endif
21 key->append((char*)&bu, 4);
22}
23
24template<typename T>
25inline static void _key_encode_u32(uint32_t u, size_t pos, T *key) {
26 uint32_t bu;
27#ifdef CEPH_BIG_ENDIAN
28 bu = u;
29#elif defined(CEPH_LITTLE_ENDIAN)
30 bu = swab(u);
31#else
32# error wtf
33#endif
34 key->replace(pos, sizeof(bu), (char*)&bu, sizeof(bu));
35}
36
37inline static const char *_key_decode_u32(const char *key, uint32_t *pu) {
38 uint32_t bu;
39 memcpy(&bu, key, 4);
40#ifdef CEPH_BIG_ENDIAN
41 *pu = bu;
42#elif defined(CEPH_LITTLE_ENDIAN)
43 *pu = swab(bu);
44#else
45# error wtf
46#endif
47 return key + 4;
48}
49
50template<typename T>
51inline static void _key_encode_u64(uint64_t u, T *key) {
52 uint64_t bu;
53#ifdef CEPH_BIG_ENDIAN
54 bu = u;
55#elif defined(CEPH_LITTLE_ENDIAN)
56 bu = swab(u);
57#else
58# error wtf
59#endif
60 key->append((char*)&bu, 8);
61}
62
63inline static const char *_key_decode_u64(const char *key, uint64_t *pu) {
64 uint64_t bu;
65 memcpy(&bu, key, 8);
66#ifdef CEPH_BIG_ENDIAN
67 *pu = bu;
68#elif defined(CEPH_LITTLE_ENDIAN)
69 *pu = swab(bu);
70#else
71# error wtf
72#endif
73 return key + 8;
74}
75
76#endif