Volksdata 1.0b7
RDF library
Loading...
Searching...
No Matches
buffer.h
Go to the documentation of this file.
1#ifndef VOLK_BUFFER_H
2#define VOLK_BUFFER_H
3
4#include "volksdata/core.h"
5
10
15#define NULL_KEY 0
16
17
19typedef enum {
24
25
27typedef enum {
36
37
47typedef struct VOLK_Buffer {
48 /*@null@*/ unsigned char *addr;
49 size_t size;
52
53
60typedef struct buffer_triple_t {
65
66
69
70
71/*
72 * Function prototypes.
73 */
74
93 VOLK_Buffer *buf, const size_t size, const unsigned char *data);
94
95
110inline VOLK_Buffer *
111VOLK_buffer_new (const unsigned char *data, const size_t size)
112{
113 VOLK_Buffer *buf;
114 CALLOC_GUARD (buf, NULL);
115
116 if (VOLK_buffer_init (buf, size, data) != VOLK_OK) {
117 free (buf->addr);
118 free (buf);
119 return NULL;
120 }
121
122 return buf;
123}
124
125
138inline VOLK_Buffer *
139VOLK_buffer_new_borrowed (unsigned char *data, const size_t size)
140{
141 VOLK_Buffer *buf;
142 MALLOC_GUARD (buf, NULL);
143
144 buf->addr = data;
145 buf->size = size;
147
148 return buf;
149}
150
151
154#define BUF_DUMMY VOLK_buffer_new (NULL, 0)
155
156
161void VOLK_buffer_done (VOLK_Buffer *buf);
162
163
169void VOLK_buffer_free (VOLK_Buffer *buf);
170
171
174inline VOLK_Key
176{
177 return (buf == NULL) ? NULL_KEY :
178 VOLK_HASH (buf->addr, buf->size, VOLK_HASH_SEED);
179}
180
181
187void VOLK_buffer_print (const VOLK_Buffer *buf);
188
189
198char *
200
201
206inline int VOLK_buffer_cmp (const VOLK_Buffer *buf1, const VOLK_Buffer *buf2)
207{
208 return memcmp (
209 buf1->addr, buf2->addr,
210 (buf1->size > buf2->size ? buf1->size : buf2->size));
211}
212
213
219inline bool VOLK_buffer_eq (const VOLK_Buffer *buf1, const VOLK_Buffer *buf2)
220{
221 if (buf1->size != buf2->size) return false;
222
223 return (VOLK_buffer_cmp (buf1, buf2) == 0) ? true : false;
224}
225
226
227/*
228 * Buffer triples.
229 */
230
245
246
263 VOLK_BufferTriple *sspo,
265
266
271void
273
274
282void
284
285
296inline VOLK_Buffer *
298{
299 if (n == TRP_POS_S) return btrp->s;
300 if (n == TRP_POS_P) return btrp->p;
301 if (n == TRP_POS_O) return btrp->o;
302
303 return NULL;
304}
305
306
316inline VOLK_Key
318{
319 return VOLK_HASH (
320 strp->s->addr, strp->s->size,
321 VOLK_HASH (
322 strp->p->addr, strp->p->size,
323 VOLK_HASH (strp->o->addr, strp->o->size, VOLK_HASH_SEED)
324 )
325 );
326}
327
328
336#define BTRP_DUMMY VOLK_btriple_new (BUF_DUMMY, BUF_DUMMY, BUF_DUMMY)
337
339
340#endif // VOLK_BUFFER_H
bool VOLK_buffer_eq(const VOLK_Buffer *buf1, const VOLK_Buffer *buf2)
Return whether two buffers are equal.
Definition buffer.h:219
#define NULL_KEY
"NULL" key, a value that is never user-provided.
Definition buffer.h:15
void VOLK_btriple_done(VOLK_BufferTriple *sspo)
Free the internal pointers of a buffer triple.
Definition buffer.c:136
VOLK_Key VOLK_buffer_hash(const VOLK_Buffer *buf)
Hash a buffer.
Definition buffer.h:175
void VOLK_buffer_done(VOLK_Buffer *buf)
Free the content of a buffer.
Definition buffer.c:92
VOLK_BufferFlag
Buffer flags, stored in buffer structure.
Definition buffer.h:27
VOLK_Buffer * VOLK_btriple_pos(const VOLK_BufferTriple *btrp, VOLK_TriplePos n)
Get serialized triple by term position.
Definition buffer.h:297
char * VOLK_buffer_as_str(const VOLK_Buffer *buf)
Format a buffer into anb ASCII string.
Definition buffer.c:58
VOLK_rc VOLK_buffer_init(VOLK_Buffer *buf, const size_t size, const unsigned char *data)
Initialize or reuse a buffer handle.
Definition buffer.c:18
VOLK_Key VOLK_btriple_hash(const VOLK_BufferTriple *strp)
Hash a buffer triple.
Definition buffer.h:317
VOLK_Buffer * VOLK_default_ctx_buf
Serialized default context.
Definition buffer.c:5
void VOLK_btriple_free(VOLK_BufferTriple *sspo)
Free a buffer triple and all its internal pointers.
Definition buffer.c:147
void VOLK_buffer_print(const VOLK_Buffer *buf)
Print a byte string of a given length in a human-readable format.
Definition buffer.c:43
VOLK_TriplePos
Triple position of s, p, o.
Definition buffer.h:19
VOLK_rc VOLK_btriple_init(VOLK_BufferTriple *sspo, VOLK_Buffer *s, VOLK_Buffer *p, VOLK_Buffer *o)
Initialize internal term pointers in a heap-allocated buffer triple.
Definition buffer.c:124
void VOLK_buffer_free(VOLK_Buffer *buf)
Free a buffer.
Definition buffer.c:97
int VOLK_buffer_cmp(const VOLK_Buffer *buf1, const VOLK_Buffer *buf2)
Compare two buffers.
Definition buffer.h:206
VOLK_BufferTriple * VOLK_btriple_new(VOLK_Buffer *s, VOLK_Buffer *p, VOLK_Buffer *o)
Create a new buffer triple.
Definition buffer.c:109
VOLK_Buffer * VOLK_buffer_new(const unsigned char *data, const size_t size)
Create a new buffer and optionally populate it with data.
Definition buffer.h:111
VOLK_Buffer * VOLK_buffer_new_borrowed(unsigned char *data, const size_t size)
Create a borrowed buffer (memory view).
Definition buffer.h:139
@ VOLK_BUF_BORROWED
Definition buffer.h:28
@ TRP_POS_O
Definition buffer.h:22
@ TRP_POS_S
Definition buffer.h:20
@ TRP_POS_P
Definition buffer.h:21
#define VOLK_HASH_SEED
Seed used for all hashing. Compile-time configurable.
Definition core.h:175
#define VOLK_HASH(...)
Default hashing function. Depends on architecture.
Definition core.h:186
#define MALLOC_GUARD(var, rc)
Allocate one pointer with malloc and return rc if it fails.
Definition core.h:375
#define CALLOC_GUARD(var, rc)
Allocate one pointer with calloc and return rc if it fails.
Definition core.h:381
size_t VOLK_Key
Term key, i.e., hash of a serialized term.
Definition core.h:230
#define VOLK_OK
Generic success return code.
Definition core.h:83
int VOLK_rc
Definition core.h:79
Triple of byte buffers.
Definition buffer.h:60
VOLK_Buffer * o
Definition buffer.h:63
VOLK_Buffer * s
Definition buffer.h:61
VOLK_Buffer * p
Definition buffer.h:62
General-purpose data buffer.
Definition buffer.h:47
VOLK_BufferFlag flags
Definition buffer.h:50
unsigned char * addr
Definition buffer.h:48
size_t size
Definition buffer.h:49