Sord 0.4.2
sord.h
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 */