tlx
Loading...
Searching...
No Matches
parse_uri.hpp
Go to the documentation of this file.
1/*******************************************************************************
2 * tlx/string/parse_uri.hpp
3 *
4 * Part of tlx - http://panthema.net/tlx
5 *
6 * Copyright (C) 2020 Timo Bingmann <tb@panthema.net>
7 *
8 * All rights reserved. Published under the Boost Software License, Version 1.0
9 ******************************************************************************/
10
11#ifndef TLX_STRING_PARSE_URI_HEADER
12#define TLX_STRING_PARSE_URI_HEADER
13
15
16namespace tlx {
17
18//! \addtogroup tlx_string
19//! \{
20
21/*!
22 * Parse a URI like "/path1/path2?query=string&submit=submit#fragment" into the
23 * parts path, query_string, and fragment. The parts are returned as
24 * tlx::string_views to avoid copying data.
25 */
26static inline
27void parse_uri(const char* uri, tlx::string_view* path,
28 tlx::string_view* query_string, tlx::string_view* fragment) {
29 const char* c = uri;
30
31 // find path part
32 const char* begin = c;
33 while (!(*c == '?' || *c == '#' || *c == 0)) {
34 ++c;
35 }
36 *path = tlx::string_view(begin, c - begin);
37
38 // find query string
39 begin = c;
40 if (*c == '?') {
41 begin = ++c;
42 while (!(*c == '#' || *c == 0)) {
43 ++c;
44 }
45 }
46 *query_string = tlx::string_view(begin, c - begin);
47
48 // find fragment
49 begin = c;
50 if (*c == '#') {
51 begin = ++c;
52 while (*c != 0) {
53 ++c;
54 }
55 }
56 *fragment = tlx::string_view(begin, c - begin);
57}
58
59/*!
60 * Parse a URI like "/path1/path2?query=string&submit=submit#fragment" into the
61 * parts path, query_string, and fragment. The parts are returned as
62 * tlx::string_views to avoid copying data.
63 */
64static inline
65void parse_uri(const std::string& uri, tlx::string_view* path,
66 tlx::string_view* query_string, tlx::string_view* fragment) {
67 return parse_uri(uri.c_str(), path, query_string, fragment);
68}
69
70//! \}
71
72} // namespace tlx
73
74#endif // !TLX_STRING_PARSE_URI_HEADER
75
76/******************************************************************************/
StringView is a reference to a part of a string, consisting of only a char pointer and a length.
StringView string_view
make alias due to STL similarity
static void parse_uri(const char *uri, tlx::string_view *path, tlx::string_view *query_string, tlx::string_view *fragment)
Parse a URI like "/path1/path2?query=string&submit=submit#fragment" into the parts path,...
Definition parse_uri.hpp:27