3 #ifndef INCLUDE_NN_NLIB_URI_H_
4 #define INCLUDE_NN_NLIB_URI_H_
16 class MemoryOutputStream;
46 return DecodeUriComponent(written, buf, N, s);
51 bool fragment_mode) NLIB_NOEXCEPT {
52 return EncodeUriComponent(written, buf, N, s, fragment_mode);
56 DecodePath(
size_t* written,
char (&buf)[N],
const char* s) NLIB_NOEXCEPT {
57 return DecodePath(written, buf, N, s);
61 EncodePath(
size_t* written,
char (&buf)[N],
const char* s) NLIB_NOEXCEPT {
62 return EncodePath(written, buf, N, s);
78 NLIB_VIS_PUBLIC bool SetUri(const
char* scheme, const
char* userinfo, const
char* host,
79 const
char* port, const
char* path, const
char* query,
80 const
char* fragment) NLIB_NOEXCEPT;
83 NLIB_VIS_PUBLIC bool ComposeString(
char* buf,
size_t size) const NLIB_NOEXCEPT;
85 bool ComposeString(
char (&buf)[N]) const NLIB_NOEXCEPT {
86 return this->ComposeString(buf, N);
94 const char*
GetScheme() const NLIB_NOEXCEPT {
return m_Scheme.get(); }
96 const char*
GetUserInfo() const NLIB_NOEXCEPT {
return m_UserInfo.get(); }
98 const char*
GetHost() const NLIB_NOEXCEPT {
return m_Host.get(); }
100 const char*
GetPort() const NLIB_NOEXCEPT {
return m_Port.get(); }
102 const char*
GetPath() const NLIB_NOEXCEPT {
return m_Path.get(); }
104 const char*
GetQuery() const NLIB_NOEXCEPT {
return m_Query.get(); }
106 const char*
GetFragment() const NLIB_NOEXCEPT {
return m_Fragment.get(); }
107 void Reset() NLIB_NOEXCEPT;
110 NLIB_VIS_HIDDEN bool SetScheme_(const
char* first, const
char* last) NLIB_NOEXCEPT;
111 NLIB_VIS_HIDDEN bool SetUserInfo_(const
char* first, const
char* last) NLIB_NOEXCEPT;
112 NLIB_VIS_HIDDEN bool SetHost_(const
char* first, const
char* last) NLIB_NOEXCEPT;
113 NLIB_VIS_HIDDEN bool SetPort_(const
char* first, const
char* last) NLIB_NOEXCEPT;
114 NLIB_VIS_HIDDEN bool SetPath_(const
char* first, const
char* last) NLIB_NOEXCEPT;
115 NLIB_VIS_HIDDEN bool SetQuery_(const
char* first, const
char* last) NLIB_NOEXCEPT;
116 NLIB_VIS_HIDDEN bool SetFragment_(const
char* first, const
char* last) NLIB_NOEXCEPT;
118 NLIB_VIS_HIDDEN bool MergePath(const
char* base, const
char* relative) NLIB_NOEXCEPT;
119 NLIB_VIS_HIDDEN bool RemoveDotSegments(const
char* path) NLIB_NOEXCEPT;
138 typedef std::pair<const char*, const char*> KeyValue;
139 Query() NLIB_NOEXCEPT {}
142 NLIB_VIS_PUBLIC bool Add(const
char* key, const
char* value) NLIB_NOEXCEPT;
144 NLIB_VIS_PUBLIC const
char* GetValue(const
char* key) const NLIB_NOEXCEPT;
145 size_t GetNumQuery() const NLIB_NOEXCEPT {
return m_Query.size(); }
146 const KeyValue* GetKeyValue(
size_t i)
const NLIB_NOEXCEPT {
147 return (i < m_Query.size()) ? &m_Query[i] : NULL;
149 void Reset() NLIB_NOEXCEPT { m_Query.clear(); }
152 Nlist<KeyValue> m_Query;
164 NLIB_VIS_PUBLIC bool ComposePath(
char** p,
char* buf_end) const NLIB_NOEXCEPT;
165 bool IsAbsolutePath() const NLIB_NOEXCEPT {
return m_IsAbsolutePath; }
166 bool IsDirectory() const NLIB_NOEXCEPT {
return m_IsDirectory; }
167 bool IsEmpty() const NLIB_NOEXCEPT {
168 return m_Segment.empty() && !m_IsAbsolutePath && !m_IsDirectory;
170 const char* GetSegment(
size_t i)
const NLIB_NOEXCEPT {
171 return i < m_Segment.size() ? m_Segment[i].get() : NULL;
173 size_t GetNumSegment() const NLIB_NOEXCEPT {
return m_Segment.size(); }
176 bool m_IsAbsolutePath;
178 Nlist<UniquePtr<char[]> > m_Segment;
186 #endif // INCLUDE_NN_NLIB_URI_H_
#define NLIB_NOEXCEPT
Defines noexcept geared to the environment, or the equivalent.
static errno_t DecodePath(size_t *written, char(&buf)[N], const char *s) noexcept
Calls DecodePath(written, buf, N, s) .
static errno_t DecodeUriComponent(size_t *written, char(&buf)[N], const char *s) noexcept
Calls DecodeUriComponent(written, buf, N, s).
#define NLIB_FINAL
Defines final if it is available for use. If not, holds an empty string.
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
Prohibits use of the copy constructor and assignment operator for the class specified by TypeName...
const char * GetHost() const noexcept
Gets the hostname.
const char * GetScheme() const noexcept
Returns the string for the URI scheme (such as "http" or "file").
UniquePtr owns the pointer, and when it goes out of scope, the pointer is released by the destructor ...
Defines that class that is corresponding to std::unique_ptr.
static errno_t EncodePath(size_t *written, char(&buf)[N], const char *s) noexcept
Calls EncodePath(written, buf, N, s).
const char * GetPort() const noexcept
Gets the string that is the port number.
Defines the class that resembles std::vector but can store objects that cannot be copied...
const char * GetUserInfo() const noexcept
Gets user-specific information (like a user name and password) associated with the specified URI...
const char * GetPath() const noexcept
Gets a path.
static errno_t EncodeUriComponent(size_t *written, char(&buf)[N], const char *s, bool fragment_mode) noexcept
Calls EncodeUriComponent(written, buf, N, s, fragment_mode).
A file that contains the configuration information for each development environment.
The class for parsing and constructing regular URIs.
const char * GetFragment() const noexcept
Gets a fragment string.
const char * GetQuery() const noexcept
Gets a query string.
The base class for output streams. This class cannot be instantiated.