| sordmm.hpp | | sordmm.hpp | |
| /* | | /* | |
|
| Copyright 2011-2012 David Robillard <http://drobilla.net> | | Copyright 2011-2013 David Robillard <http://drobilla.net> | |
| | | | |
| Permission to use, copy, modify, and/or distribute this software for any | | Permission to use, copy, modify, and/or distribute this software for any | |
| purpose with or without fee is hereby granted, provided that the above | | purpose with or without fee is hereby granted, provided that the above | |
| copyright notice and this permission notice appear in all copies. | | copyright notice and this permission notice appear in all copies. | |
| | | | |
| THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | | THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
| WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
| MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
| ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
| | | | |
| skipping to change at line 116 | | skipping to change at line 116 | |
| } | | } | |
| }; | | }; | |
| | | | |
| /** Sord library state. */ | | /** Sord library state. */ | |
| class World : public Noncopyable, public Wrapper<SordWorld*> { | | class World : public Noncopyable, public Wrapper<SordWorld*> { | |
| public: | | public: | |
| inline World() | | inline World() | |
| : _next_blank_id(0) | | : _next_blank_id(0) | |
| { | | { | |
| _c_obj = sord_world_new(); | | _c_obj = sord_world_new(); | |
|
| add_prefix("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-n
s#"); | | | |
| } | | } | |
| | | | |
| inline ~World() { | | inline ~World() { | |
| sord_world_free(_c_obj); | | sord_world_free(_c_obj); | |
| } | | } | |
| | | | |
| inline uint64_t blank_id() { return _next_blank_id++; } | | inline uint64_t blank_id() { return _next_blank_id++; } | |
| | | | |
| inline void add_prefix(const std::string& prefix, const std::string&
uri) { | | inline void add_prefix(const std::string& prefix, const std::string&
uri) { | |
| _prefixes.add(prefix, uri); | | _prefixes.add(prefix, uri); | |
| | | | |
| skipping to change at line 154 | | skipping to change at line 153 | |
| URI = SORD_URI, | | URI = SORD_URI, | |
| BLANK = SORD_BLANK, | | BLANK = SORD_BLANK, | |
| LITERAL = SORD_LITERAL | | LITERAL = SORD_LITERAL | |
| }; | | }; | |
| | | | |
| inline Node() : Wrapper<SordNode*>(NULL), _world(NULL) {} | | inline Node() : Wrapper<SordNode*>(NULL), _world(NULL) {} | |
| | | | |
| inline Node(World& world, Type t, const std::string& s); | | inline Node(World& world, Type t, const std::string& s); | |
| inline Node(World& world); | | inline Node(World& world); | |
| inline Node(World& world, const SordNode* node); | | inline Node(World& world, const SordNode* node); | |
|
| | | inline Node(World& world, SordNode* node, bool copy=false); | |
| inline Node(const Node& other); | | inline Node(const Node& other); | |
| inline ~Node(); | | inline ~Node(); | |
| | | | |
| inline Type type() const { | | inline Type type() const { | |
| return _c_obj ? (Type)sord_node_get_type(_c_obj) : UNKNOWN; | | return _c_obj ? (Type)sord_node_get_type(_c_obj) : UNKNOWN; | |
| } | | } | |
| | | | |
| inline const SordNode* get_node() const { return _c_obj; } | | inline const SordNode* get_node() const { return _c_obj; } | |
| inline SordNode* get_node() { return _c_obj; } | | inline SordNode* get_node() { return _c_obj; } | |
| | | | |
|
| | | const SerdNode* to_serd_node() { | |
| | | return sord_node_to_serd_node(_c_obj); | |
| | | } | |
| | | | |
| inline bool is_valid() const { return type() != UNKNOWN; } | | inline bool is_valid() const { return type() != UNKNOWN; } | |
| | | | |
| inline bool operator<(const Node& other) const { | | inline bool operator<(const Node& other) const { | |
| if (type() != other.type()) { | | if (type() != other.type()) { | |
| return type() < other.type(); | | return type() < other.type(); | |
| } else { | | } else { | |
| return to_string() < other.to_string(); | | return to_string() < other.to_string(); | |
| } | | } | |
| } | | } | |
| | | | |
| | | | |
| skipping to change at line 243 | | skipping to change at line 247 | |
| class Curie : public Node { | | class Curie : public Node { | |
| public: | | public: | |
| inline Curie(World& world, const std::string& s) | | inline Curie(World& world, const std::string& s) | |
| : Node(world, Node::URI, world.prefixes().expand(s)) {} | | : Node(world, Node::URI, world.prefixes().expand(s)) {} | |
| }; | | }; | |
| | | | |
| class Literal : public Node { | | class Literal : public Node { | |
| public: | | public: | |
| inline Literal(World& world, const std::string& s) | | inline Literal(World& world, const std::string& s) | |
| : Node(world, Node::LITERAL, s) {} | | : Node(world, Node::LITERAL, s) {} | |
|
| | | | |
| | | static inline Node decimal(World& world, double d, unsigned frac_dig | |
| | | its) { | |
| | | const SerdNode val = serd_node_new_decimal(d, 7); | |
| | | const SerdNode type = serd_node_from_string( | |
| | | SERD_URI, (const uint8_t*)SORD_NS_XSD "decimal"); | |
| | | | |
| | | return Node( | |
| | | world, | |
| | | sord_node_from_serd_node( | |
| | | world.c_obj(), world.prefixes().c_obj(), &va | |
| | | l, &type, NULL), | |
| | | false); | |
| | | } | |
| | | | |
| | | static inline Node integer(World& world, int64_t i) { | |
| | | const SerdNode val = serd_node_new_integer(i); | |
| | | const SerdNode type = serd_node_from_string( | |
| | | SERD_URI, (const uint8_t*)SORD_NS_XSD "integer"); | |
| | | | |
| | | return Node( | |
| | | world, | |
| | | sord_node_from_serd_node( | |
| | | world.c_obj(), world.prefixes().c_obj(), &va | |
| | | l, &type, NULL), | |
| | | false); | |
| | | } | |
| }; | | }; | |
| | | | |
| inline | | inline | |
| Node::Node(World& world, Type type, const std::string& s) | | Node::Node(World& world, Type type, const std::string& s) | |
| : _world(&world) | | : _world(&world) | |
| { | | { | |
| switch (type) { | | switch (type) { | |
| case URI: | | case URI: | |
| _c_obj = sord_new_uri( | | _c_obj = sord_new_uri( | |
| world.world(), (const unsigned char*)s.c_str()); | | world.world(), (const unsigned char*)s.c_str()); | |
| | | | |
| skipping to change at line 281 | | skipping to change at line 309 | |
| : _world(&world) | | : _world(&world) | |
| { | | { | |
| Node me = blank_id(world); | | Node me = blank_id(world); | |
| *this = me; | | *this = me; | |
| } | | } | |
| | | | |
| inline | | inline | |
| Node::Node(World& world, const SordNode* node) | | Node::Node(World& world, const SordNode* node) | |
| : _world(&world) | | : _world(&world) | |
| { | | { | |
|
| _c_obj = node ? sord_node_copy(node) : NULL; | | _c_obj = sord_node_copy(node); | |
| | | } | |
| | | | |
| | | inline | |
| | | Node::Node(World& world, SordNode* node, bool copy) | |
| | | : _world(&world) | |
| | | { | |
| | | _c_obj = copy ? sord_node_copy(node) : node; | |
| } | | } | |
| | | | |
| inline | | inline | |
| Node::Node(const Node& other) | | Node::Node(const Node& other) | |
| : Wrapper<SordNode*>() | | : Wrapper<SordNode*>() | |
| , _world(other._world) | | , _world(other._world) | |
| { | | { | |
| if (_world) { | | if (_world) { | |
| _c_obj = other._c_obj ? sord_node_copy(other._c_obj) : NULL; | | _c_obj = other._c_obj ? sord_node_copy(other._c_obj) : NULL; | |
| } | | } | |
| | | | |
| skipping to change at line 434 | | skipping to change at line 469 | |
| |SERD_STYLE_RESOLVED
)); | | |SERD_STYLE_RESOLVED
)); | |
| | | | |
| inline void add_statement(const Node& subject, | | inline void add_statement(const Node& subject, | |
| const Node& predicate, | | const Node& predicate, | |
| const Node& object); | | const Node& object); | |
| | | | |
| inline Iter find(const Node& subject, | | inline Iter find(const Node& subject, | |
| const Node& predicate, | | const Node& predicate, | |
| const Node& object); | | const Node& object); | |
| | | | |
|
| | | inline Node get(const Node& subject, | |
| | | const Node& predicate, | |
| | | const Node& object); | |
| | | | |
| inline World& world() const { return _world; } | | inline World& world() const { return _world; } | |
| | | | |
| private: | | private: | |
| World& _world; | | World& _world; | |
| Node _base; | | Node _base; | |
| SerdWriter* _writer; | | SerdWriter* _writer; | |
| size_t _next_blank_id; | | size_t _next_blank_id; | |
| }; | | }; | |
| | | | |
| /** Create an empty in-memory RDF model. | | /** Create an empty in-memory RDF model. | |
| | | | |
| skipping to change at line 599 | | skipping to change at line 638 | |
| const Node& object) | | const Node& object) | |
| { | | { | |
| SordQuad quad = { subject.c_obj(), | | SordQuad quad = { subject.c_obj(), | |
| predicate.c_obj(), | | predicate.c_obj(), | |
| object.c_obj(), | | object.c_obj(), | |
| NULL }; | | NULL }; | |
| | | | |
| return Iter(_world, sord_find(_c_obj, quad)); | | return Iter(_world, sord_find(_c_obj, quad)); | |
| } | | } | |
| | | | |
|
| | | inline Node | |
| | | Model::get(const Node& subject, | |
| | | const Node& predicate, | |
| | | const Node& object) | |
| | | { | |
| | | SordNode* c_node = sord_get( | |
| | | _c_obj, subject.c_obj(), predicate.c_obj(), object.c_obj(), | |
| | | NULL); | |
| | | Node node(_world, c_node); | |
| | | sord_node_free(_world.c_obj(), c_node); | |
| | | return node; | |
| | | } | |
| | | | |
| } // namespace Sord | | } // namespace Sord | |
| | | | |
| #endif // SORD_SORDMM_HPP | | #endif // SORD_SORDMM_HPP | |
| | | | |
End of changes. 8 change blocks. |
| 3 lines changed or deleted | | 58 lines changed or added | |
|