annotate win64-msvc/include/sord/sord.h @ 45:d530e058a1c1

64-bit MSVC builds
author Chris Cannam
date Tue, 18 Oct 2016 15:59:23 +0100
parents
children
rev   line source
Chris@45 1 /*
Chris@45 2 Copyright 2011-2016 David Robillard <http://drobilla.net>
Chris@45 3
Chris@45 4 Permission to use, copy, modify, and/or distribute this software for any
Chris@45 5 purpose with or without fee is hereby granted, provided that the above
Chris@45 6 copyright notice and this permission notice appear in all copies.
Chris@45 7
Chris@45 8 THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
Chris@45 9 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
Chris@45 10 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
Chris@45 11 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
Chris@45 12 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
Chris@45 13 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
Chris@45 14 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Chris@45 15 */
Chris@45 16
Chris@45 17 /**
Chris@45 18 @file sord.h API for Sord, a lightweight RDF model library.
Chris@45 19 */
Chris@45 20
Chris@45 21 #ifndef SORD_SORD_H
Chris@45 22 #define SORD_SORD_H
Chris@45 23
Chris@45 24 #include <stddef.h>
Chris@45 25 #include <stdint.h>
Chris@45 26 #include <stdio.h>
Chris@45 27
Chris@45 28 #include "serd/serd.h"
Chris@45 29
Chris@45 30 #ifdef SORD_SHARED
Chris@45 31 # ifdef _WIN32
Chris@45 32 # define SORD_LIB_IMPORT __declspec(dllimport)
Chris@45 33 # define SORD_LIB_EXPORT __declspec(dllexport)
Chris@45 34 # else
Chris@45 35 # define SORD_LIB_IMPORT __attribute__((visibility("default")))
Chris@45 36 # define SORD_LIB_EXPORT __attribute__((visibility("default")))
Chris@45 37 # endif
Chris@45 38 # ifdef SORD_INTERNAL
Chris@45 39 # define SORD_API SORD_LIB_EXPORT
Chris@45 40 # else
Chris@45 41 # define SORD_API SORD_LIB_IMPORT
Chris@45 42 # endif
Chris@45 43 #else
Chris@45 44 # define SORD_API
Chris@45 45 #endif
Chris@45 46
Chris@45 47 #ifdef __cplusplus
Chris@45 48 extern "C" {
Chris@45 49 #else
Chris@45 50 # include <stdbool.h>
Chris@45 51 #endif
Chris@45 52
Chris@45 53 /**
Chris@45 54 @defgroup sord Sord
Chris@45 55 A lightweight RDF model library.
Chris@45 56
Chris@45 57 Sord stores RDF (subject object predicate context) quads, where the context
Chris@45 58 may be omitted (to represent triples in the default graph).
Chris@45 59 @{
Chris@45 60 */
Chris@45 61
Chris@45 62 /**
Chris@45 63 Sord World.
Chris@45 64 The World represents all library state, including interned strings.
Chris@45 65 */
Chris@45 66 typedef struct SordWorldImpl SordWorld;
Chris@45 67
Chris@45 68 /**
Chris@45 69 Sord Model.
Chris@45 70
Chris@45 71 A model is an indexed set of Quads (i.e. it can contain several RDF
Chris@45 72 graphs). It may be searched using various patterns depending on which
Chris@45 73 indices are enabled.
Chris@45 74 */
Chris@45 75 typedef struct SordModelImpl SordModel;
Chris@45 76
Chris@45 77 /**
Chris@45 78 Model Inserter.
Chris@45 79
Chris@45 80 An inserter is used for writing statements to a model using the Serd sink
Chris@45 81 interface. This makes it simple to write to a model directly using a
Chris@45 82 SerdReader, or any other code that writes statements to a SerdStatementSink.
Chris@45 83 */
Chris@45 84 typedef struct SordInserterImpl SordInserter;
Chris@45 85
Chris@45 86 /**
Chris@45 87 Model Iterator.
Chris@45 88 */
Chris@45 89 typedef struct SordIterImpl SordIter;
Chris@45 90
Chris@45 91 /**
Chris@45 92 RDF Node.
Chris@45 93 A Node is a component of a Quad. Nodes may be URIs, blank nodes, or
Chris@45 94 (in the case of quad objects only) string literals. Literal nodes may
Chris@45 95 have an associate language or datatype (but not both).
Chris@45 96 */
Chris@45 97 typedef struct SordNodeImpl SordNode;
Chris@45 98
Chris@45 99 /**
Chris@45 100 Quad of nodes (a statement), or a quad pattern.
Chris@45 101
Chris@45 102 Nodes are ordered (S P O G). The ID of the default graph is 0.
Chris@45 103 */
Chris@45 104 typedef const SordNode* SordQuad[4];
Chris@45 105
Chris@45 106 /**
Chris@45 107 Index into a SordQuad.
Chris@45 108 */
Chris@45 109 typedef enum {
Chris@45 110 SORD_SUBJECT = 0, /**< Subject */
Chris@45 111 SORD_PREDICATE = 1, /**< Predicate ("key") */
Chris@45 112 SORD_OBJECT = 2, /**< Object ("value") */
Chris@45 113 SORD_GRAPH = 3 /**< Graph ("context") */
Chris@45 114 } SordQuadIndex;
Chris@45 115
Chris@45 116 /**
Chris@45 117 Type of a node.
Chris@45 118 */
Chris@45 119 typedef enum {
Chris@45 120 SORD_URI = 1, /**< URI */
Chris@45 121 SORD_BLANK = 2, /**< Blank node identifier */
Chris@45 122 SORD_LITERAL = 3 /**< Literal (string with optional lang or datatype) */
Chris@45 123 } SordNodeType;
Chris@45 124
Chris@45 125 /**
Chris@45 126 Indexing option.
Chris@45 127 */
Chris@45 128 typedef enum {
Chris@45 129 SORD_SPO = 1, /**< Subject, Predicate, Object */
Chris@45 130 SORD_SOP = 1 << 1, /**< Subject, Object, Predicate */
Chris@45 131 SORD_OPS = 1 << 2, /**< Object, Predicate, Subject */
Chris@45 132 SORD_OSP = 1 << 3, /**< Object, Subject, Predicate */
Chris@45 133 SORD_PSO = 1 << 4, /**< Predicate, Subject, Object */
Chris@45 134 SORD_POS = 1 << 5 /**< Predicate, Object, Subject */
Chris@45 135 } SordIndexOption;
Chris@45 136
Chris@45 137 /**
Chris@45 138 @name World
Chris@45 139 @{
Chris@45 140 */
Chris@45 141
Chris@45 142 /**
Chris@45 143 Create a new Sord World.
Chris@45 144 It is safe to use multiple worlds in one process, though no data
Chris@45 145 (e.g. nodes) can be shared between worlds, and this should be avoided if
Chris@45 146 possible for performance reasons.
Chris@45 147 */
Chris@45 148 SORD_API
Chris@45 149 SordWorld*
Chris@45 150 sord_world_new(void);
Chris@45 151
Chris@45 152 /**
Chris@45 153 Free `world`.
Chris@45 154 */
Chris@45 155 SORD_API
Chris@45 156 void
Chris@45 157 sord_world_free(SordWorld* world);
Chris@45 158
Chris@45 159 /**
Chris@45 160 Set a function to be called when errors occur.
Chris@45 161
Chris@45 162 The `error_sink` will be called with `handle` as its first argument. If
Chris@45 163 no error function is set, errors are printed to stderr.
Chris@45 164 */
Chris@45 165 SORD_API
Chris@45 166 void
Chris@45 167 sord_world_set_error_sink(SordWorld* world,
Chris@45 168 SerdErrorSink error_sink,
Chris@45 169 void* handle);
Chris@45 170
Chris@45 171 /**
Chris@45 172 @}
Chris@45 173 @name Node
Chris@45 174 @{
Chris@45 175 */
Chris@45 176
Chris@45 177 /**
Chris@45 178 Get a URI node from a string.
Chris@45 179
Chris@45 180 Note this function measures `str`, which is a common bottleneck.
Chris@45 181 Use sord_node_from_serd_node() instead if `str` is already measured.
Chris@45 182 */
Chris@45 183 SORD_API
Chris@45 184 SordNode*
Chris@45 185 sord_new_uri(SordWorld* world, const uint8_t* uri);
Chris@45 186
Chris@45 187 /**
Chris@45 188 Get a URI node from a relative URI string.
Chris@45 189 */
Chris@45 190 SORD_API
Chris@45 191 SordNode*
Chris@45 192 sord_new_relative_uri(SordWorld* world,
Chris@45 193 const uint8_t* str,
Chris@45 194 const uint8_t* base_uri);
Chris@45 195
Chris@45 196 /**
Chris@45 197 Get a blank node from a string.
Chris@45 198
Chris@45 199 Note this function measures `str`, which is a common bottleneck.
Chris@45 200 Use sord_node_from_serd_node() instead if `str` is already measured.
Chris@45 201 */
Chris@45 202 SORD_API
Chris@45 203 SordNode*
Chris@45 204 sord_new_blank(SordWorld* world, const uint8_t* str);
Chris@45 205
Chris@45 206 /**
Chris@45 207 Get a literal node from a string.
Chris@45 208
Chris@45 209 Note this function measures `str`, which is a common bottleneck.
Chris@45 210 Use sord_node_from_serd_node() instead if `str` is already measured.
Chris@45 211 */
Chris@45 212 SORD_API
Chris@45 213 SordNode*
Chris@45 214 sord_new_literal(SordWorld* world,
Chris@45 215 SordNode* datatype,
Chris@45 216 const uint8_t* str,
Chris@45 217 const char* lang);
Chris@45 218
Chris@45 219 /**
Chris@45 220 Copy a node (obtain a reference).
Chris@45 221
Chris@45 222 Node that since nodes are interned and reference counted, this does not
Chris@45 223 actually create a deep copy of `node`.
Chris@45 224 */
Chris@45 225 SORD_API
Chris@45 226 SordNode*
Chris@45 227 sord_node_copy(const SordNode* node);
Chris@45 228
Chris@45 229 /**
Chris@45 230 Free a node (drop a reference).
Chris@45 231 */
Chris@45 232 SORD_API
Chris@45 233 void
Chris@45 234 sord_node_free(SordWorld* world, SordNode* node);
Chris@45 235
Chris@45 236 /**
Chris@45 237 Return the type of a node (SORD_URI, SORD_BLANK, or SORD_LITERAL).
Chris@45 238 */
Chris@45 239 SORD_API
Chris@45 240 SordNodeType
Chris@45 241 sord_node_get_type(const SordNode* node);
Chris@45 242
Chris@45 243 /**
Chris@45 244 Return the string value of a node.
Chris@45 245 */
Chris@45 246 SORD_API
Chris@45 247 const uint8_t*
Chris@45 248 sord_node_get_string(const SordNode* node);
Chris@45 249
Chris@45 250 /**
Chris@45 251 Return the string value of a node, and set `bytes` to its length in bytes.
Chris@45 252 */
Chris@45 253 SORD_API
Chris@45 254 const uint8_t*
Chris@45 255 sord_node_get_string_counted(const SordNode* node, size_t* bytes);
Chris@45 256
Chris@45 257 /**
Chris@45 258 Return the string value of a node, and set `bytes` to its length in bytes,
Chris@45 259 and `count` to its length in characters.
Chris@45 260 */
Chris@45 261 SORD_API
Chris@45 262 const uint8_t*
Chris@45 263 sord_node_get_string_measured(const SordNode* node,
Chris@45 264 size_t* bytes,
Chris@45 265 size_t* chars);
Chris@45 266
Chris@45 267 /**
Chris@45 268 Return the language of a literal node (or NULL).
Chris@45 269 */
Chris@45 270 SORD_API
Chris@45 271 const char*
Chris@45 272 sord_node_get_language(const SordNode* node);
Chris@45 273
Chris@45 274 /**
Chris@45 275 Return the datatype URI of a literal node (or NULL).
Chris@45 276 */
Chris@45 277 SORD_API
Chris@45 278 SordNode*
Chris@45 279 sord_node_get_datatype(const SordNode* node);
Chris@45 280
Chris@45 281 /**
Chris@45 282 Return the flags (string attributes) of a node.
Chris@45 283 */
Chris@45 284 SORD_API
Chris@45 285 SerdNodeFlags
Chris@45 286 sord_node_get_flags(const SordNode* node);
Chris@45 287
Chris@45 288 /**
Chris@45 289 Return true iff node can be serialised as an inline object.
Chris@45 290
Chris@45 291 More specifically, this returns true iff the node is the object field
Chris@45 292 of exactly one statement, and therefore can be inlined since it needn't
Chris@45 293 be referred to by name.
Chris@45 294 */
Chris@45 295 SORD_API
Chris@45 296 bool
Chris@45 297 sord_node_is_inline_object(const SordNode* node);
Chris@45 298
Chris@45 299 /**
Chris@45 300 Return true iff `a` is equal to `b`.
Chris@45 301
Chris@45 302 Note this is much faster than comparing the node's strings.
Chris@45 303 */
Chris@45 304 SORD_API
Chris@45 305 bool
Chris@45 306 sord_node_equals(const SordNode* a,
Chris@45 307 const SordNode* b);
Chris@45 308
Chris@45 309 /**
Chris@45 310 Return a SordNode as a SerdNode.
Chris@45 311
Chris@45 312 The returned node is shared and must not be freed or modified.
Chris@45 313 */
Chris@45 314 SORD_API
Chris@45 315 const SerdNode*
Chris@45 316 sord_node_to_serd_node(const SordNode* node);
Chris@45 317
Chris@45 318 /**
Chris@45 319 Create a new SordNode from a SerdNode.
Chris@45 320
Chris@45 321 The returned node must be freed using sord_node_free().
Chris@45 322 */
Chris@45 323 SORD_API
Chris@45 324 SordNode*
Chris@45 325 sord_node_from_serd_node(SordWorld* world,
Chris@45 326 SerdEnv* env,
Chris@45 327 const SerdNode* node,
Chris@45 328 const SerdNode* datatype,
Chris@45 329 const SerdNode* lang);
Chris@45 330
Chris@45 331 /**
Chris@45 332 @}
Chris@45 333 @name Model
Chris@45 334 @{
Chris@45 335 */
Chris@45 336
Chris@45 337 /**
Chris@45 338 Create a new model.
Chris@45 339
Chris@45 340 @param world The world in which to make this model.
Chris@45 341
Chris@45 342 @param indices SordIndexOption flags (e.g. SORD_SPO|SORD_OPS). Be sure to
Chris@45 343 enable an index where the most significant node(s) are not variables in your
Chris@45 344 queries (e.g. to make (? P O) queries, enable either SORD_OPS or SORD_POS).
Chris@45 345
Chris@45 346 @param graphs If true, store (and index) graph contexts.
Chris@45 347 */
Chris@45 348 SORD_API
Chris@45 349 SordModel*
Chris@45 350 sord_new(SordWorld* world,
Chris@45 351 unsigned indices,
Chris@45 352 bool graphs);
Chris@45 353
Chris@45 354 /**
Chris@45 355 Close and free `model`.
Chris@45 356 */
Chris@45 357 SORD_API
Chris@45 358 void
Chris@45 359 sord_free(SordModel* model);
Chris@45 360
Chris@45 361 /**
Chris@45 362 Get the world associated with `model`.
Chris@45 363 */
Chris@45 364 SORD_API
Chris@45 365 SordWorld*
Chris@45 366 sord_get_world(SordModel* model);
Chris@45 367
Chris@45 368 /**
Chris@45 369 Return the number of nodes stored in `world`.
Chris@45 370
Chris@45 371 Nodes are included in this count iff they are a part of a quad in `world`.
Chris@45 372 */
Chris@45 373 SORD_API
Chris@45 374 size_t
Chris@45 375 sord_num_nodes(const SordWorld* world);
Chris@45 376
Chris@45 377 /**
Chris@45 378 Return the number of quads stored in `model`.
Chris@45 379 */
Chris@45 380 SORD_API
Chris@45 381 size_t
Chris@45 382 sord_num_quads(const SordModel* model);
Chris@45 383
Chris@45 384 /**
Chris@45 385 Return an iterator to the start of `model`.
Chris@45 386 */
Chris@45 387 SORD_API
Chris@45 388 SordIter*
Chris@45 389 sord_begin(const SordModel* model);
Chris@45 390
Chris@45 391 /**
Chris@45 392 Search for statements by a quad pattern.
Chris@45 393 @return an iterator to the first match, or NULL if no matches found.
Chris@45 394 */
Chris@45 395 SORD_API
Chris@45 396 SordIter*
Chris@45 397 sord_find(SordModel* model, const SordQuad pat);
Chris@45 398
Chris@45 399 /**
Chris@45 400 Search for statements by nodes.
Chris@45 401 @return an iterator to the first match, or NULL if no matches found.
Chris@45 402 */
Chris@45 403 SORD_API
Chris@45 404 SordIter*
Chris@45 405 sord_search(SordModel* model,
Chris@45 406 const SordNode* s,
Chris@45 407 const SordNode* p,
Chris@45 408 const SordNode* o,
Chris@45 409 const SordNode* g);
Chris@45 410 /**
Chris@45 411 Search for a single node that matches a pattern.
Chris@45 412 Exactly one of `s`, `p`, `o` must be NULL.
Chris@45 413 This function is mainly useful for predicates that only have one value.
Chris@45 414 The returned node must be freed using sord_node_free().
Chris@45 415 @return the first matching node, or NULL if no matches are found.
Chris@45 416 */
Chris@45 417 SORD_API
Chris@45 418 SordNode*
Chris@45 419 sord_get(SordModel* model,
Chris@45 420 const SordNode* s,
Chris@45 421 const SordNode* p,
Chris@45 422 const SordNode* o,
Chris@45 423 const SordNode* g);
Chris@45 424
Chris@45 425 /**
Chris@45 426 Return true iff a statement exists.
Chris@45 427 */
Chris@45 428 SORD_API
Chris@45 429 bool
Chris@45 430 sord_ask(SordModel* model,
Chris@45 431 const SordNode* s,
Chris@45 432 const SordNode* p,
Chris@45 433 const SordNode* o,
Chris@45 434 const SordNode* g);
Chris@45 435
Chris@45 436 /**
Chris@45 437 Return the number of matching statements.
Chris@45 438 */
Chris@45 439 SORD_API
Chris@45 440 uint64_t
Chris@45 441 sord_count(SordModel* model,
Chris@45 442 const SordNode* s,
Chris@45 443 const SordNode* p,
Chris@45 444 const SordNode* o,
Chris@45 445 const SordNode* g);
Chris@45 446
Chris@45 447 /**
Chris@45 448 Check if `model` contains a triple pattern.
Chris@45 449
Chris@45 450 @return true if `model` contains a match for `pat`, otherwise false.
Chris@45 451 */
Chris@45 452 SORD_API
Chris@45 453 bool
Chris@45 454 sord_contains(SordModel* model, const SordQuad pat);
Chris@45 455
Chris@45 456 /**
Chris@45 457 Add a quad to a model.
Chris@45 458
Chris@45 459 Calling this function invalidates all iterators on `model`.
Chris@45 460
Chris@45 461 @return true on success, false, on error.
Chris@45 462 */
Chris@45 463 SORD_API
Chris@45 464 bool
Chris@45 465 sord_add(SordModel* model, const SordQuad quad);
Chris@45 466
Chris@45 467 /**
Chris@45 468 Remove a quad from a model.
Chris@45 469
Chris@45 470 Calling this function invalidates all iterators on `model`. To remove quads
Chris@45 471 while iterating, use sord_erase() instead.
Chris@45 472 */
Chris@45 473 SORD_API
Chris@45 474 void
Chris@45 475 sord_remove(SordModel* model, const SordQuad quad);
Chris@45 476
Chris@45 477 /**
Chris@45 478 Remove a quad from a model via an iterator.
Chris@45 479
Chris@45 480 Calling this function invalidates all iterators on `model` except `iter`.
Chris@45 481
Chris@45 482 @param model The model which `iter` points to.
Chris@45 483 @param iter Iterator to the element to erase, which is incremented to the
Chris@45 484 next value on return.
Chris@45 485 */
Chris@45 486 SORD_API
Chris@45 487 SerdStatus
Chris@45 488 sord_erase(SordModel* model, SordIter* iter);
Chris@45 489
Chris@45 490 /**
Chris@45 491 @}
Chris@45 492 @name Inserter
Chris@45 493 @{
Chris@45 494 */
Chris@45 495
Chris@45 496 /**
Chris@45 497 Create an inserter for writing statements to a model.
Chris@45 498 */
Chris@45 499 SORD_API
Chris@45 500 SordInserter*
Chris@45 501 sord_inserter_new(SordModel* model,
Chris@45 502 SerdEnv* env);
Chris@45 503
Chris@45 504 /**
Chris@45 505 Free an inserter.
Chris@45 506 */
Chris@45 507 SORD_API
Chris@45 508 void
Chris@45 509 sord_inserter_free(SordInserter* inserter);
Chris@45 510
Chris@45 511 /**
Chris@45 512 Set the current base URI for writing to the model.
Chris@45 513
Chris@45 514 Note this function can be safely casted to SerdBaseSink.
Chris@45 515 */
Chris@45 516 SORD_API
Chris@45 517 SerdStatus
Chris@45 518 sord_inserter_set_base_uri(SordInserter* inserter,
Chris@45 519 const SerdNode* uri);
Chris@45 520
Chris@45 521 /**
Chris@45 522 Set a namespace prefix for writing to the model.
Chris@45 523
Chris@45 524 Note this function can be safely casted to SerdPrefixSink.
Chris@45 525 */
Chris@45 526 SORD_API
Chris@45 527 SerdStatus
Chris@45 528 sord_inserter_set_prefix(SordInserter* inserter,
Chris@45 529 const SerdNode* name,
Chris@45 530 const SerdNode* uri);
Chris@45 531
Chris@45 532 /**
Chris@45 533 Write a statement to the model.
Chris@45 534
Chris@45 535 Note this function can be safely casted to SerdStatementSink.
Chris@45 536 */
Chris@45 537 SORD_API
Chris@45 538 SerdStatus
Chris@45 539 sord_inserter_write_statement(SordInserter* inserter,
Chris@45 540 SerdStatementFlags flags,
Chris@45 541 const SerdNode* graph,
Chris@45 542 const SerdNode* subject,
Chris@45 543 const SerdNode* predicate,
Chris@45 544 const SerdNode* object,
Chris@45 545 const SerdNode* object_datatype,
Chris@45 546 const SerdNode* object_lang);
Chris@45 547
Chris@45 548 /**
Chris@45 549 @}
Chris@45 550 @name Iteration
Chris@45 551 @{
Chris@45 552 */
Chris@45 553
Chris@45 554 /**
Chris@45 555 Set `quad` to the quad pointed to by `iter`.
Chris@45 556 */
Chris@45 557 SORD_API
Chris@45 558 void
Chris@45 559 sord_iter_get(const SordIter* iter, SordQuad quad);
Chris@45 560
Chris@45 561 /**
Chris@45 562 Return a field of the quad pointed to by `iter`.
Chris@45 563
Chris@45 564 Returns NULL if `iter` is NULL or is at the end.
Chris@45 565 */
Chris@45 566 SORD_API
Chris@45 567 const SordNode*
Chris@45 568 sord_iter_get_node(const SordIter* iter, SordQuadIndex index);
Chris@45 569
Chris@45 570 /**
Chris@45 571 Return the store pointed to by `iter`.
Chris@45 572 */
Chris@45 573 SORD_API
Chris@45 574 const SordModel*
Chris@45 575 sord_iter_get_model(SordIter* iter);
Chris@45 576
Chris@45 577 /**
Chris@45 578 Increment `iter` to point to the next statement.
Chris@45 579 */
Chris@45 580 SORD_API
Chris@45 581 bool
Chris@45 582 sord_iter_next(SordIter* iter);
Chris@45 583
Chris@45 584 /**
Chris@45 585 Return true iff `iter` is at the end of its range.
Chris@45 586 */
Chris@45 587 SORD_API
Chris@45 588 bool
Chris@45 589 sord_iter_end(const SordIter* iter);
Chris@45 590
Chris@45 591 /**
Chris@45 592 Free `iter`.
Chris@45 593 */
Chris@45 594 SORD_API
Chris@45 595 void
Chris@45 596 sord_iter_free(SordIter* iter);
Chris@45 597
Chris@45 598 /**
Chris@45 599 @}
Chris@45 600 @name Utilities
Chris@45 601 @{
Chris@45 602 */
Chris@45 603
Chris@45 604 /**
Chris@45 605 Match two quads (using ID comparison only).
Chris@45 606
Chris@45 607 This function is a straightforward and fast equivalence match with wildcard
Chris@45 608 support (ID 0 is a wildcard). It does not actually read node data.
Chris@45 609 @return true iff `x` and `y` match.
Chris@45 610 */
Chris@45 611 SORD_API
Chris@45 612 bool
Chris@45 613 sord_quad_match(const SordQuad x, const SordQuad y);
Chris@45 614
Chris@45 615 /**
Chris@45 616 @}
Chris@45 617 @name Serialisation
Chris@45 618 @{
Chris@45 619 */
Chris@45 620
Chris@45 621 /**
Chris@45 622 Return a reader that will read into `model`.
Chris@45 623 */
Chris@45 624 SORD_API
Chris@45 625 SerdReader*
Chris@45 626 sord_new_reader(SordModel* model,
Chris@45 627 SerdEnv* env,
Chris@45 628 SerdSyntax syntax,
Chris@45 629 SordNode* graph);
Chris@45 630
Chris@45 631 /**
Chris@45 632 Write a model to a writer.
Chris@45 633 */
Chris@45 634 SORD_API
Chris@45 635 bool
Chris@45 636 sord_write(SordModel* model,
Chris@45 637 SerdWriter* writer,
Chris@45 638 SordNode* graph);
Chris@45 639
Chris@45 640 /**
Chris@45 641 Write a range to a writer.
Chris@45 642
Chris@45 643 This increments `iter` to its end, then frees it.
Chris@45 644 */
Chris@45 645 SORD_API
Chris@45 646 bool
Chris@45 647 sord_write_iter(SordIter* iter,
Chris@45 648 SerdWriter* writer);
Chris@45 649
Chris@45 650 /**
Chris@45 651 @}
Chris@45 652 @}
Chris@45 653 */
Chris@45 654
Chris@45 655 #ifdef __cplusplus
Chris@45 656 } /* extern "C" */
Chris@45 657 #endif
Chris@45 658
Chris@45 659 #endif /* SORD_SORD_H */