DART 6.10.1
Loading...
Searching...
No Matches
Uri.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011-2021, The DART development contributors
3 * All rights reserved.
4 *
5 * The list of contributors can be found at:
6 * https://github.com/dartsim/dart/blob/master/LICENSE
7 *
8 * This file is provided under the following "BSD-style" License:
9 * Redistribution and use in source and binary forms, with or
10 * without modification, are permitted provided that the following
11 * conditions are met:
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#ifndef DART_COMMON_URI_HPP_
34#define DART_COMMON_URI_HPP_
35
36#include <string>
37
38namespace dart {
39namespace common {
40
41class UriComponent final
42{
43public:
44 using value_type = std::string;
49
52
53 operator bool() const;
54
55 bool operator!() const;
56
58
61
64
65 void assign(reference_const_type _value);
66 void reset();
67
70
73
74private:
75 bool mExists;
76 std::string mValue;
77};
78
86struct Uri final
87{
90
93
96
99
102
104 Uri() = default;
105
112 Uri(const std::string& _input);
113
116 Uri(const char* _input);
117
119 void clear();
120
123 bool fromString(const std::string& _input);
124
128 bool fromPath(const std::string& _path);
129
133 bool fromStringOrPath(const std::string& _input);
134
137 bool fromRelativeUri(
138 const std::string& _base,
139 const std::string& _relative,
140 bool _strict = false);
141
144 bool fromRelativeUri(
145 const char* _base, const char* _relative, bool _strict = false);
146
149 bool fromRelativeUri(
150 const Uri& _base, const std::string& _relative, bool _strict = false);
151
154 bool fromRelativeUri(
155 const Uri& _base, const char* _relative, bool _strict = false);
156
159 bool fromRelativeUri(
160 const Uri& _base, const Uri& _relative, bool _strict = false);
161
163 std::string toString() const;
164
166 static Uri createFromString(const std::string& _input);
167
169 static Uri createFromPath(const std::string& _path);
170
173 static Uri createFromStringOrPath(const std::string& _input);
174
178 const std::string& _base,
179 const std::string& _relative,
180 bool _strict = false);
181
185 const Uri& _base, const std::string& _relative, bool _strict = false);
186
190 const Uri& _base, const Uri& _relative, bool _strict = false);
191
193 static std::string getUri(const std::string& _input);
194
196 static std::string getRelativeUri(
197 const std::string& _base,
198 const std::string& _relative,
199 bool _strict = false);
200
202 static std::string getRelativeUri(
203 const Uri& _base, const std::string& _relative, bool _strict = false);
204
206 static std::string getRelativeUri(
207 const Uri& _base, const Uri& _relative, bool _strict = false);
208
210 std::string getPath() const;
211
216 std::string getFilesystemPath() const;
217
218private:
220 static std::string mergePaths(const Uri& _base, const Uri& _relative);
221
223 static std::string removeDotSegments(const std::string& _path);
224};
225
226} // namespace common
227} // namespace dart
228
229#endif // ifndef DART_COMMON_URI_HPP_
Definition Uri.hpp:42
reference_type get()
Definition Uri.cpp:122
void reset()
Definition Uri.cpp:116
value_type & reference_type
Definition Uri.hpp:45
std::string mValue
Definition Uri.hpp:76
const value_type & reference_const_type
Definition Uri.hpp:46
reference_type get_value_or(reference_type _default)
Definition Uri.cpp:136
value_type * pointer_type
Definition Uri.hpp:47
pointer_type operator->()
Definition Uri.cpp:97
bool mExists
Definition Uri.hpp:75
UriComponent()
Definition Uri.cpp:54
reference_type operator*()
Definition Uri.cpp:85
bool operator!() const
Definition Uri.cpp:72
const value_type * pointer_const_type
Definition Uri.hpp:48
std::string value_type
Definition Uri.hpp:44
UriComponent & operator=(reference_const_type _value)
Definition Uri.cpp:78
void assign(reference_const_type _value)
Definition Uri.cpp:109
Definition BulletCollisionDetector.cpp:65
The Uri struct provides URI parsing and merging functionality based on RFC 3986.
Definition Uri.hpp:87
static Uri createFromRelativeUri(const std::string &_base, const std::string &_relative, bool _strict=false)
Create URI resolving a relative path reference; return an empty URI on failure.
Definition Uri.cpp:458
std::string getPath() const
Get the path component of the URI as a string.
Definition Uri.cpp:553
UriComponent mFragment
Fragment, e.g. the part of the URI after the #.
Definition Uri.hpp:101
static Uri createFromString(const std::string &_input)
Create URI from a string; return an empty URI on failure.
Definition Uri.cpp:410
std::string toString() const
Combine the parts of the URI into a string.
Definition Uri.cpp:387
bool fromStringOrPath(const std::string &_input)
Parse a URI or local path (i.e.
Definition Uri.cpp:254
UriComponent mAuthority
Authority, e.g. 'google.com', 'en.wikipedia.org'.
Definition Uri.hpp:92
void clear()
Clear the URI by reset()ing all components.
Definition Uri.cpp:179
static std::string getUri(const std::string &_input)
Parse a URI from a string; return an empty string on failure.
Definition Uri.cpp:510
bool fromRelativeUri(const std::string &_base, const std::string &_relative, bool _strict=false)
Resolve a relative path reference; return success.
Definition Uri.cpp:285
bool fromString(const std::string &_input)
Parse a URI from a string; return success.
Definition Uri.cpp:189
static Uri createFromStringOrPath(const std::string &_input)
Create general URI or file URI from a string; return an empty URI on failure.
Definition Uri.cpp:442
bool fromPath(const std::string &_path)
Parse a local path (i.e.
Definition Uri.cpp:236
static std::string removeDotSegments(const std::string &_path)
Implement section 5.2.4 of RFC 3986.
Definition Uri.cpp:594
UriComponent mPath
Path, e.g. '/index.html', '/foo/bar.txt'.
Definition Uri.hpp:95
static std::string getRelativeUri(const std::string &_base, const std::string &_relative, bool _strict=false)
Resolve a relative path reference; return an empty string on failure.
Definition Uri.cpp:520
Uri()=default
Constructor.
UriComponent mQuery
Query string, i.e. the part of the URI after the ?
Definition Uri.hpp:98
static std::string mergePaths(const Uri &_base, const Uri &_relative)
Implement section 5.2.3 of RFC 3986.
Definition Uri.cpp:575
std::string getFilesystemPath() const
Get the path in the local filesystem as a string.
Definition Uri.cpp:559
UriComponent mScheme
Scheme, e.g. 'http', 'file', 'package'.
Definition Uri.hpp:89
static Uri createFromPath(const std::string &_path)
Create file URI from a string; return an empty URI on failure.
Definition Uri.cpp:426