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
環境に合わせてnoexcept 又は同等の定義がされます。
static errno_t DecodePath(size_t *written, char(&buf)[N], const char *s) noexcept
DecodePath(written, buf, N, s)を呼び出します。
static errno_t DecodeUriComponent(size_t *written, char(&buf)[N], const char *s) noexcept
DecodeUriComponent(written, buf, N, s)を呼び出します。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
const char * GetHost() const noexcept
ホスト名を取得します。
const char * GetScheme() const noexcept
URIのスキーム(http, file等)の文字列を返します。
UniquePtrはポインタの所有権を保持し、UniquePtrがスコープから出るときにデストラクタでポインタをDELで指...
std::unique_ptrに相当するクラスが定義されています。
static errno_t EncodePath(size_t *written, char(&buf)[N], const char *s) noexcept
EncodePath(written, buf, N, s)を呼び出します。
const char * GetPort() const noexcept
ポート番号の文字列を取得します。
std::vectorに似ていますが、コピーできないオブジェクトを格納可能なクラスが定義されています。 ...
const char * GetUserInfo() const noexcept
指定した URI に関連付けられているユーザー名、パスワードなどのユーザー固有の情報を取得します。 ...
const char * GetPath() const noexcept
パスを取得します。
static errno_t EncodeUriComponent(size_t *written, char(&buf)[N], const char *s, bool fragment_mode) noexcept
EncodeUriComponent(written, buf, N, s, fragment_mode)を呼び出します。
一般的なURIをパースしたり構築したりするためのクラスです。
const char * GetFragment() const noexcept
フラグメント文字列を取得します
const char * GetQuery() const noexcept
クエリ文字列を取得します
出力ストリームの基底クラスです。このクラスを実体化することはできません。