Sord 0.4.2
|
00001 /* 00002 Copyright 2011 David Robillard <http://drobilla.net> 00003 00004 Permission to use, copy, modify, and/or distribute this software for any 00005 purpose with or without fee is hereby granted, provided that the above 00006 copyright notice and this permission notice appear in all copies. 00007 00008 THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 00009 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 00010 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 00011 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 00012 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 00013 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 00014 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 00015 */ 00016 00021 #ifndef SORD_SORD_H 00022 #define SORD_SORD_H 00023 00024 #include <stdbool.h> 00025 #include <stddef.h> 00026 #include <stdint.h> 00027 #include <stdio.h> 00028 00029 #include "serd/serd.h" 00030 00031 #ifdef SORD_SHARED 00032 # ifdef __WIN32__ 00033 # define SORD_LIB_IMPORT __declspec(dllimport) 00034 # define SORD_LIB_EXPORT __declspec(dllexport) 00035 # else 00036 # define SORD_LIB_IMPORT __attribute__((visibility("default"))) 00037 # define SORD_LIB_EXPORT __attribute__((visibility("default"))) 00038 # endif 00039 # ifdef SORD_INTERNAL 00040 # define SORD_API SORD_LIB_EXPORT 00041 # else 00042 # define SORD_API SORD_LIB_IMPORT 00043 # endif 00044 #else 00045 # define SORD_API 00046 #endif 00047 00048 #ifdef __cplusplus 00049 extern "C" { 00050 #endif 00051 00065 typedef struct SordWorldImpl SordWorld; 00066 00074 typedef struct SordModelImpl SordModel; 00075 00079 typedef struct SordIterImpl SordIter; 00080 00087 typedef struct SordNodeImpl SordNode; 00088 00094 typedef const SordNode* SordQuad[4]; 00095 00099 typedef enum { 00100 SORD_SUBJECT = 0, 00101 SORD_PREDICATE = 1, 00102 SORD_OBJECT = 2, 00103 SORD_GRAPH = 3 00104 } SordQuadIndex; 00105 00109 typedef enum { 00110 SORD_URI = 1, 00111 SORD_BLANK = 2, 00112 SORD_LITERAL = 3 00113 } SordNodeType; 00114 00118 typedef enum { 00119 SORD_SPO = 1, 00120 SORD_SOP = 1 << 1, 00121 SORD_OPS = 1 << 2, 00122 SORD_OSP = 1 << 3, 00123 SORD_PSO = 1 << 4, 00124 SORD_POS = 1 << 5 00125 } SordIndexOption; 00126 00138 SORD_API 00139 SordWorld* 00140 sord_world_new(void); 00141 00145 SORD_API 00146 void 00147 sord_world_free(SordWorld* world); 00148 00161 SORD_API 00162 SordNode* 00163 sord_new_uri(SordWorld* world, const uint8_t* str); 00164 00171 SORD_API 00172 SordNode* 00173 sord_new_blank(SordWorld* world, const uint8_t* str); 00174 00181 SORD_API 00182 SordNode* 00183 sord_new_literal(SordWorld* world, 00184 SordNode* datatype, 00185 const uint8_t* str, 00186 const char* lang); 00187 00194 SORD_API 00195 SordNode* 00196 sord_node_copy(const SordNode* node); 00197 00201 SORD_API 00202 void 00203 sord_node_free(SordWorld* world, SordNode* node); 00204 00208 SORD_API 00209 SordNodeType 00210 sord_node_get_type(const SordNode* node); 00211 00215 SORD_API 00216 const uint8_t* 00217 sord_node_get_string(const SordNode* node); 00218 00222 SORD_API 00223 const uint8_t* 00224 sord_node_get_string_counted(const SordNode* node, size_t* len); 00225 00229 SORD_API 00230 const char* 00231 sord_node_get_language(const SordNode* node); 00232 00236 SORD_API 00237 SordNode* 00238 sord_node_get_datatype(const SordNode* node); 00239 00243 SORD_API 00244 SerdNodeFlags 00245 sord_node_get_flags(const SordNode* node); 00246 00254 SORD_API 00255 bool 00256 sord_node_is_inline_object(const SordNode* node); 00257 00263 SORD_API 00264 bool 00265 sord_node_equals(const SordNode* a, 00266 const SordNode* b); 00267 00273 SORD_API 00274 const SerdNode* 00275 sord_node_to_serd_node(const SordNode* node); 00276 00282 SORD_API 00283 SordNode* 00284 sord_node_from_serd_node(SordWorld* world, 00285 SerdEnv* env, 00286 const SerdNode* node, 00287 const SerdNode* datatype, 00288 const SerdNode* lang); 00289 00307 SORD_API 00308 SordModel* 00309 sord_new(SordWorld* world, 00310 unsigned indices, 00311 bool graphs); 00312 00316 SORD_API 00317 void 00318 sord_free(SordModel* model); 00319 00323 SORD_API 00324 SordWorld* 00325 sord_get_world(SordModel* model); 00326 00332 SORD_API 00333 size_t 00334 sord_num_nodes(const SordWorld* world); 00335 00339 SORD_API 00340 size_t 00341 sord_num_quads(const SordModel* model); 00342 00346 SORD_API 00347 SordIter* 00348 sord_begin(const SordModel* model); 00349 00354 SORD_API 00355 SordIter* 00356 sord_find(SordModel* model, const SordQuad pat); 00357 00361 SORD_API 00362 bool 00363 sord_add(SordModel* model, const SordQuad quad); 00364 00370 SORD_API 00371 void 00372 sord_remove(SordModel* model, const SordQuad quad); 00373 00383 SORD_API 00384 void 00385 sord_iter_get(const SordIter* iter, SordQuad quad); 00386 00390 SORD_API 00391 const SordModel* 00392 sord_iter_get_model(SordIter* iter); 00393 00397 SORD_API 00398 bool 00399 sord_iter_next(SordIter* iter); 00400 00404 SORD_API 00405 bool 00406 sord_iter_end(const SordIter* iter); 00407 00411 SORD_API 00412 void 00413 sord_iter_free(SordIter* iter); 00414 00428 SORD_API 00429 bool 00430 sord_quad_match(const SordQuad x, const SordQuad y); 00431 00441 SORD_API 00442 SerdReader* 00443 sord_new_reader(SordModel* model, 00444 SerdEnv* env, 00445 SerdSyntax syntax, 00446 SordNode* graph); 00447 00451 SORD_API 00452 bool 00453 sord_write(SordModel* model, 00454 SerdWriter* writer, 00455 SordNode* graph); 00456 00462 #ifdef __cplusplus 00463 } /* extern "C" */ 00464 #endif 00465 00466 #endif /* SORD_SORD_H */