nlib
HttpStyleUri.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_HTTPSTYLEURI_H_
4 #define INCLUDE_NN_NLIB_HTTPSTYLEURI_H_
5 
6 #include <utility>
7 
8 #include "nn/nlib/UniquePtr.h"
9 #include "nn/nlib/Uri.h"
10 
11 NLIB_NAMESPACE_BEGIN
12 
14  public:
15  typedef std::pair<const char*, const char*> KeyValue;
16  // cppcheck-suppress uninitMemberVar
17  HttpStyleUri() NLIB_NOEXCEPT { this->Reset(); }
19  NLIB_VIS_PUBLIC bool FromUri(const Uri& uri) NLIB_NOEXCEPT;
20  NLIB_VIS_PUBLIC bool ToUri(Uri* uri) const NLIB_NOEXCEPT;
21  NLIB_VIS_PUBLIC bool Parse(const char* str) NLIB_NOEXCEPT;
22  NLIB_VIS_PUBLIC bool ComposeString(char* buf, size_t size) const NLIB_NOEXCEPT;
23  template <size_t N>
24  bool ComposeString(char (&buf)[N]) const NLIB_NOEXCEPT {
25  return this->ComposeString(buf, N);
26  }
27  NLIB_VIS_PUBLIC bool SetScheme(const char* scheme) NLIB_NOEXCEPT;
28  NLIB_VIS_PUBLIC bool SetUserInfo(const char* userinfo) NLIB_NOEXCEPT;
29  NLIB_VIS_PUBLIC bool SetHost(const char* host) NLIB_NOEXCEPT;
30  NLIB_VIS_PUBLIC bool SetPort(int port) NLIB_NOEXCEPT;
31  NLIB_VIS_PUBLIC bool SetPath(const char* path) NLIB_NOEXCEPT;
32  bool SetQuery(const char* query) NLIB_NOEXCEPT { return m_Query.Set(query); }
33  NLIB_VIS_PUBLIC bool SetFragment(const char* fragment) NLIB_NOEXCEPT;
34  bool AddQuery(const char* key, const char* value) NLIB_NOEXCEPT {
35  return m_Query.Add(key, value);
36  }
37  const char* GetScheme() const NLIB_NOEXCEPT {
38  return m_IsSchemeHttps ? "https" : "http";
39  }
40  const char* GetUserInfo() const NLIB_NOEXCEPT { return m_UserInfo.get(); }
41  const char* GetHost() const NLIB_NOEXCEPT { return m_Host.get(); }
42  int GetPort() const NLIB_NOEXCEPT { return m_Port; }
43  size_t GetNumSegment() const NLIB_NOEXCEPT {
44  return m_Segments.GetNumSegment();
45  }
46  const char* GetSegment(size_t i) const NLIB_NOEXCEPT {
47  return m_Segments.GetSegment(i);
48  }
49  bool IsPathDirectory() const NLIB_NOEXCEPT {
50  return m_Segments.IsDirectory();
51  }
52  const char* GetQueryValue(const char* key) const NLIB_NOEXCEPT {
53  return m_Query.GetValue(key);
54  }
55  size_t GetNumQuery() const NLIB_NOEXCEPT { return m_Query.GetNumQuery(); }
56  const KeyValue* GetQueryKeyValue(size_t i) const NLIB_NOEXCEPT {
57  return m_Query.GetKeyValue(i);
58  }
59  const char* GetFragment() const NLIB_NOEXCEPT { return m_Fragment.get(); }
60  NLIB_VIS_PUBLIC bool AddBaseUri(const Uri& relative, const HttpStyleUri& base) NLIB_NOEXCEPT;
61  NLIB_VIS_PUBLIC void Reset() NLIB_NOEXCEPT;
62 
63  private:
64  bool ComposeQuery(char* first, char* last) const NLIB_NOEXCEPT {
65  return m_Query.Compose(&first, last);
66  }
67 
68  private:
69  bool m_IsSchemeHttps;
70  int m_Port;
71  UniquePtr<char[]> m_UserInfo;
72  UniquePtr<char[]> m_Host;
73  UniquePtr<char[]> m_Fragment;
74  detail::Segments m_Segments;
75  detail::Query m_Query;
76 };
77 
78 NLIB_NAMESPACE_END
79 #endif // INCLUDE_NN_NLIB_HTTPSTYLEURI_H_
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Platform.h:2151
const KeyValue * GetQueryKeyValue(size_t i) const noexcept
インデックスを指定してキーと値のペアを取得します。見つからなかった場合はNULLを返します。 ...
Definition: HttpStyleUri.h:56
bool AddQuery(const char *key, const char *value) noexcept
クエリにキーと値を追加します。
Definition: HttpStyleUri.h:34
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
bool SetQuery(const char *query) noexcept
クエリ文字列からクエリを設定します。
Definition: HttpStyleUri.h:32
std::unique_ptrに相当するクラスが定義されています。
http/httpsスキームを用いたURIをパースしたりURI文字列を構築したりするためのクラスです。 ...
Definition: HttpStyleUri.h:13
size_t GetNumQuery() const noexcept
キーに対応する値を取得します。見つからなかった場合はNULLを返します。
Definition: HttpStyleUri.h:55
const char * GetScheme() const noexcept
スキーム名を取得します。"http"か"https"のどちらかです。
Definition: HttpStyleUri.h:37
std::pair< const char *, const char * > KeyValue
クエリのキーと値を格納する型です。
Definition: HttpStyleUri.h:15
HttpStyleUri() noexcept
デフォルトコンストラクタです。オブジェクトを初期化します。
Definition: HttpStyleUri.h:17
int GetPort() const noexcept
ポート番号を取得します。
Definition: HttpStyleUri.h:42
const char * GetSegment(size_t i) const noexcept
インデックスを指定してセグメントを取得します。
Definition: HttpStyleUri.h:46
const char * GetUserInfo() const noexcept
ユーザー情報を取得します。
Definition: HttpStyleUri.h:40
const char * GetHost() const noexcept
ホスト名を取得します。
Definition: HttpStyleUri.h:41
bool IsPathDirectory() const noexcept
パスがディレクトリ形式かどうかを取得します。
Definition: HttpStyleUri.h:49
一般的なURIをパースしたり構築したりするためのクラスです。
Definition: Uri.h:18
size_t GetNumSegment() const noexcept
格納されているセグメントの数を取得します。
Definition: HttpStyleUri.h:43
URIを扱うためのクラスを定義しています。
const char * GetFragment() const noexcept
フラグメント文字列を取得します。
Definition: HttpStyleUri.h:59
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:51
const char * GetQueryValue(const char *key) const noexcept
キーを指定して値を取得します。見つからなかった場合はNULLを返します。
Definition: HttpStyleUri.h:52