Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / os / kv.h
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
11 template<typename T>
12 inline 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
24 template<typename T>
25 inline 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
37 inline 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
50 template<typename T>
51 inline 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
63 inline 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