Merge remote branch 'gvdb/master'
[platform/upstream/glib.git] / gio / gvdb / gvdb-format.h
1 /*
2  * Copyright © 2010 Codethink Limited
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the licence, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  *
19  * Author: Ryan Lortie <desrt@desrt.ca>
20  */
21
22 #ifndef __gvdb_format_h__
23 #define __gvdb_format_h__
24
25 #include <glib.h>
26
27 typedef struct { guint16 __value; } guint16_le;
28 typedef struct { guint32 __value; } guint32_le;
29
30 struct gvdb_pointer {
31   guint32_le start;
32   guint32_le end;
33 };
34
35 struct gvdb_hash_header {
36   guint32_le n_bloom_words;
37   guint32_le n_buckets;
38 };
39
40 struct gvdb_hash_item {
41   guint32_le hash_value;
42   guint32_le parent;
43
44   guint32_le key_start;
45   guint16_le key_size;
46   gchar type;
47   gchar unused;
48
49   union
50   {
51     struct gvdb_pointer pointer;
52     gchar direct[8];
53   } value;
54
55   struct gvdb_pointer options;
56 };
57
58 struct gvdb_header {
59   guint32 signature[2];
60   guint32_le version;
61   guint32_le options;
62
63   struct gvdb_pointer root;
64 };
65
66 static inline guint32_le guint32_to_le (guint32 value) {
67   guint32_le result = { GUINT32_TO_LE (value) };
68   return result;
69 }
70
71 static inline guint32 guint32_from_le (guint32_le value) {
72   return GUINT32_FROM_LE (value.__value);
73 }
74
75 static inline guint16_le guint16_to_le (guint16 value) {
76   guint16_le result = { GUINT16_TO_LE (value) };
77   return result;
78 }
79
80 static inline guint16 guint16_from_le (guint16_le value) {
81   return GUINT16_FROM_LE (value.__value);
82 }
83
84 #define GVDB_SIGNATURE0 1918981703
85 #define GVDB_SIGNATURE1 1953390953
86 #define GVDB_SWAPPED_SIGNATURE0 GUINT32_SWAP_LE_BE (GVDB_SIGNATURE0)
87 #define GVDB_SWAPPED_SIGNATURE1 GUINT32_SWAP_LE_BE (GVDB_SIGNATURE1)
88
89 #endif /* __gvdb_format_h__ */