annotate win64-msvc/include/sord/sord.h @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents d530e058a1c1
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 */