]>
Commit | Line | Data |
---|---|---|
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 | |
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 |