Sord  0.8.0
sord.h
1 /*
2  Copyright 2011-2012 David Robillard <http://drobilla.net>
3 
4  Permission to use, copy, modify, and/or distribute this software for any
5  purpose with or without fee is hereby granted, provided that the above
6  copyright notice and this permission notice appear in all copies.
7 
8  THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16 
21 #ifndef SORD_SORD_H
22 #define SORD_SORD_H
23 
24 #include <stddef.h>
25 #include <stdint.h>
26 #include <stdio.h>
27 
28 #include "serd/serd.h"
29 
30 #ifdef SORD_SHARED
31 # ifdef _WIN32
32 # define SORD_LIB_IMPORT __declspec(dllimport)
33 # define SORD_LIB_EXPORT __declspec(dllexport)
34 # else
35 # define SORD_LIB_IMPORT __attribute__((visibility("default")))
36 # define SORD_LIB_EXPORT __attribute__((visibility("default")))
37 # endif
38 # ifdef SORD_INTERNAL
39 # define SORD_API SORD_LIB_EXPORT
40 # else
41 # define SORD_API SORD_LIB_IMPORT
42 # endif
43 #else
44 # define SORD_API
45 #endif
46 
47 #ifdef __cplusplus
48 extern "C" {
49 #else
50 # include <stdbool.h>
51 #endif
52 
66 typedef struct SordWorldImpl SordWorld;
67 
75 typedef struct SordModelImpl SordModel;
76 
84 typedef struct SordInserterImpl SordInserter;
85 
89 typedef struct SordIterImpl SordIter;
90 
97 typedef struct SordNodeImpl SordNode;
98 
104 typedef const SordNode* SordQuad[4];
105 
109 typedef enum {
114 } SordQuadIndex;
115 
119 typedef enum {
120  SORD_URI = 1,
123 } SordNodeType;
124 
128 typedef enum {
129  SORD_SPO = 1,
130  SORD_SOP = 1 << 1,
131  SORD_OPS = 1 << 2,
132  SORD_OSP = 1 << 3,
133  SORD_PSO = 1 << 4,
134  SORD_POS = 1 << 5
136 
148 SORD_API
149 SordWorld*
150 sord_world_new(void);
151 
155 SORD_API
156 void
157 sord_world_free(SordWorld* world);
158 
171 SORD_API
172 SordNode*
173 sord_new_uri(SordWorld* world, const uint8_t* uri);
174 
178 SORD_API
179 SordNode*
181  const uint8_t* str,
182  const uint8_t* base_uri);
183 
190 SORD_API
191 SordNode*
192 sord_new_blank(SordWorld* world, const uint8_t* str);
193 
200 SORD_API
201 SordNode*
203  SordNode* datatype,
204  const uint8_t* str,
205  const char* lang);
206 
213 SORD_API
214 SordNode*
215 sord_node_copy(const SordNode* node);
216 
220 SORD_API
221 void
222 sord_node_free(SordWorld* world, SordNode* node);
223 
227 SORD_API
229 sord_node_get_type(const SordNode* node);
230 
234 SORD_API
235 const uint8_t*
236 sord_node_get_string(const SordNode* node);
237 
241 SORD_API
242 const uint8_t*
243 sord_node_get_string_counted(const SordNode* node, size_t* len);
244 
248 SORD_API
249 const char*
250 sord_node_get_language(const SordNode* node);
251 
255 SORD_API
256 SordNode*
257 sord_node_get_datatype(const SordNode* node);
258 
262 SORD_API
263 SerdNodeFlags
264 sord_node_get_flags(const SordNode* node);
265 
273 SORD_API
274 bool
276 
282 SORD_API
283 bool
284 sord_node_equals(const SordNode* a,
285  const SordNode* b);
286 
292 SORD_API
293 const SerdNode*
294 sord_node_to_serd_node(const SordNode* node);
295 
301 SORD_API
302 SordNode*
304  SerdEnv* env,
305  const SerdNode* node,
306  const SerdNode* datatype,
307  const SerdNode* lang);
308 
326 SORD_API
327 SordModel*
328 sord_new(SordWorld* world,
329  unsigned indices,
330  bool graphs);
331 
335 SORD_API
336 void
337 sord_free(SordModel* model);
338 
342 SORD_API
343 SordWorld*
344 sord_get_world(SordModel* model);
345 
351 SORD_API
352 size_t
353 sord_num_nodes(const SordWorld* world);
354 
358 SORD_API
359 size_t
360 sord_num_quads(const SordModel* model);
361 
365 SORD_API
366 SordIter*
367 sord_begin(const SordModel* model);
368 
373 SORD_API
374 SordIter*
375 sord_find(SordModel* model, const SordQuad pat);
376 
381 SORD_API
382 SordIter*
383 sord_search(SordModel* model,
384  const SordNode* s,
385  const SordNode* p,
386  const SordNode* o,
387  const SordNode* g);
388 
392 SORD_API
393 bool
394 sord_ask(SordModel* model,
395  const SordNode* s,
396  const SordNode* p,
397  const SordNode* o,
398  const SordNode* g);
399 
403 SORD_API
404 uint64_t
405 sord_count(SordModel* model,
406  const SordNode* s,
407  const SordNode* p,
408  const SordNode* o,
409  const SordNode* g);
410 
414 SORD_API
415 bool
416 sord_contains(SordModel* model, const SordQuad pat);
417 
421 SORD_API
422 bool
423 sord_add(SordModel* model, const SordQuad quad);
424 
430 SORD_API
431 void
432 sord_remove(SordModel* model, const SordQuad quad);
433 
443 SORD_API
446  SerdEnv* env);
447 
451 SORD_API
452 void
454 
460 SORD_API
461 SerdStatus
463  const SerdNode* uri);
464 
470 SORD_API
471 SerdStatus
473  const SerdNode* name,
474  const SerdNode* uri);
475 
481 SORD_API
482 SerdStatus
484  SerdStatementFlags flags,
485  const SerdNode* graph,
486  const SerdNode* subject,
487  const SerdNode* predicate,
488  const SerdNode* object,
489  const SerdNode* object_datatype,
490  const SerdNode* object_lang);
491 
501 SORD_API
502 void
503 sord_iter_get(const SordIter* iter, SordQuad quad);
504 
508 SORD_API
509 const SordNode*
510 sord_iter_get_node(const SordIter* iter, SordQuadIndex index);
511 
515 SORD_API
516 const SordModel*
518 
522 SORD_API
523 bool
524 sord_iter_next(SordIter* iter);
525 
529 SORD_API
530 bool
531 sord_iter_end(const SordIter* iter);
532 
536 SORD_API
537 void
538 sord_iter_free(SordIter* iter);
539 
553 SORD_API
554 bool
555 sord_quad_match(const SordQuad x, const SordQuad y);
556 
566 SORD_API
567 SerdReader*
569  SerdEnv* env,
570  SerdSyntax syntax,
571  SordNode* graph);
572 
576 SORD_API
577 bool
578 sord_write(SordModel* model,
579  SerdWriter* writer,
580  SordNode* graph);
581 
587 SORD_API
588 bool
590  SerdWriter* writer);
591 
597 #ifdef __cplusplus
598 } /* extern "C" */
599 #endif
600 
601 #endif /* SORD_SORD_H */