diff options
Diffstat (limited to 'src/URI.cpp')
-rw-r--r-- | src/URI.cpp | 91 |
1 files changed, 14 insertions, 77 deletions
diff --git a/src/URI.cpp b/src/URI.cpp index f7b64209..fd649393 100644 --- a/src/URI.cpp +++ b/src/URI.cpp @@ -22,102 +22,39 @@ namespace ingen { -URI::URI() - : _uri(SERD_URI_NULL) - , _node(SERD_NODE_NULL) -{} - URI::URI(const std::string& str) - : _uri(SERD_URI_NULL) - , _node(serd_node_new_uri_from_string((const uint8_t*)str.c_str(), - nullptr, - &_uri)) -{} - -URI::URI(const char* str) - : _uri(SERD_URI_NULL) - , _node(serd_node_new_uri_from_string((const uint8_t*)str, nullptr, &_uri)) -{} - -URI::URI(const std::string& str, const URI& base) - : _uri(SERD_URI_NULL) - , _node(serd_node_new_uri_from_string((const uint8_t*)str.c_str(), - &base._uri, - &_uri)) -{} - -URI::URI(SerdNode node) - : _uri(SERD_URI_NULL) - , _node(serd_node_new_uri_from_node(&node, nullptr, &_uri)) + : serd::Node{serd::make_uri(str)} { - assert(node.type == SERD_URI); } -URI::URI(SerdNode node, SerdURI uri) - : _uri(uri) - , _node(node) -{ - assert(node.type == SERD_URI); -} - -URI::URI(const Sord::Node& node) - : URI(*node.to_serd_node()) -{ -} - -URI::URI(const FilePath& path) - : _uri(SERD_URI_NULL) - , _node(serd_node_new_file_uri((const uint8_t*)path.c_str(), - nullptr, - &_uri, - true)) -{} - -URI::URI(const URI& uri) - : _uri(SERD_URI_NULL) - , _node(serd_node_new_uri(&uri._uri, nullptr, &_uri)) -{} - -URI& -URI::operator=(const URI& uri) +URI::URI(const char* str) + : serd::Node{serd::make_uri(str)} { - if (&uri != this) { - serd_node_free(&_node); - _node = serd_node_new_uri(&uri._uri, nullptr, &_uri); - } - - return *this; } -URI::URI(URI&& uri) noexcept - : _uri(uri._uri) - , _node(uri._node) +URI::URI(const serd::NodeView& node) + : serd::Node{node} { - uri._node = SERD_NODE_NULL; - uri._uri = SERD_URI_NULL; + assert(cobj()); + assert(node.type() == serd::NodeType::URI); } -URI& -URI::operator=(URI&& uri) noexcept +URI::URI(const serd::Node& node) + : serd::Node{node} { - _node = uri._node; - _uri = uri._uri; - uri._node = SERD_NODE_NULL; - uri._uri = SERD_URI_NULL; - return *this; + assert(cobj()); + assert(node.type() == serd::NodeType::URI); } -URI::~URI() +URI::URI(const FilePath& path) + : serd::Node{serd::make_file_uri(path.string())} { - serd_node_free(&_node); } URI URI::make_relative(const URI& base) const { - SerdURI uri; - SerdNode node = serd_node_new_relative_uri(&_uri, &base._uri, nullptr, &uri); - return URI(node, uri); + return URI(serd::make_relative_uri(std::string(*this), base)); } } // namespace ingen |