100.00% Lines (6/6) 100.00% Functions (3/3)
TLA Baseline Branch
Line Hits Code Line Hits Code
1   // 1   //
2   // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) 2   // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
3   // 3   //
4   // Distributed under the Boost Software License, Version 1.0. (See accompanying 4   // Distributed under the Boost Software License, Version 1.0. (See accompanying
5   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6   // 6   //
7   // Official repository: https://github.com/boostorg/url 7   // Official repository: https://github.com/boostorg/url
8   // 8   //
9   9  
10   #ifndef BOOST_URL_IGNORE_CASE_HPP 10   #ifndef BOOST_URL_IGNORE_CASE_HPP
11   #define BOOST_URL_IGNORE_CASE_HPP 11   #define BOOST_URL_IGNORE_CASE_HPP
12   12  
13   #include <boost/url/detail/config.hpp> 13   #include <boost/url/detail/config.hpp>
14   14  
15   namespace boost { 15   namespace boost {
16   namespace urls { 16   namespace urls {
17   17  
18   namespace implementation_defined { 18   namespace implementation_defined {
19   struct ignore_case_t {}; 19   struct ignore_case_t {};
20   } 20   }
21   21  
22   /** Ignore case when comparing 22   /** Ignore case when comparing
23   23  
24   This value may be optionally passed to 24   This value may be optionally passed to
25   functions accepting a parameter of type 25   functions accepting a parameter of type
26   @ref ignore_case_param to indicate that 26   @ref ignore_case_param to indicate that
27   comparisons should be case-insensitive. 27   comparisons should be case-insensitive.
28   */ 28   */
29   BOOST_INLINE_CONSTEXPR 29   BOOST_INLINE_CONSTEXPR
30   implementation_defined::ignore_case_t 30   implementation_defined::ignore_case_t
31   ignore_case{}; 31   ignore_case{};
32   32  
33   /** An optional parameter to determine case-sensitivity 33   /** An optional parameter to determine case-sensitivity
34   34  
35   Functions may use parameters of this type 35   Functions may use parameters of this type
36   to allow the user to optionally indicate 36   to allow the user to optionally indicate
37   that comparisons should be case-insensitive 37   that comparisons should be case-insensitive
38   when the value @ref ignore_case is passed. 38   when the value @ref ignore_case is passed.
39   39  
40   @see 40   @see
41   @ref params_ref 41   @ref params_ref
42   */ 42   */
43   class ignore_case_param 43   class ignore_case_param
44   { 44   {
45   /** True if an algorithm should ignore case 45   /** True if an algorithm should ignore case
46   46  
47   Functions accepting a parameter of type 47   Functions accepting a parameter of type
48   `ignore_case_param` can check `value` 48   `ignore_case_param` can check `value`
49   to determine if the caller has indicated 49   to determine if the caller has indicated
50   that comparisons should ignore case. 50   that comparisons should ignore case.
51   */ 51   */
52   bool value_ = false; 52   bool value_ = false;
53   53  
54   public: 54   public:
55   /** Constructor 55   /** Constructor
56   56  
57   By default, comparisons are 57   By default, comparisons are
58   case-sensitive. 58   case-sensitive.
59   59  
60   @par Example 60   @par Example
61   This function performs case-sensitive 61   This function performs case-sensitive
62   comparisons when called with no 62   comparisons when called with no
63   arguments: 63   arguments:
64   @code 64   @code
65   void f( ignore_case_param = {} ); 65   void f( ignore_case_param = {} );
66   @endcode 66   @endcode
67   */ 67   */
68   constexpr 68   constexpr
HITCBC 69   263 ignore_case_param() noexcept = default; 69   265 ignore_case_param() noexcept = default;
70   70  
71   /** Constructor 71   /** Constructor
72   72  
73   Construction from @ref ignore_case 73   Construction from @ref ignore_case
74   indicates that comparisons should 74   indicates that comparisons should
75   be case-insensitive. 75   be case-insensitive.
76   76  
77   The first parameter to this function 77   The first parameter to this function
78   should be the variable 78   should be the variable
79   @ref ignore_case. 79   @ref ignore_case.
80   80  
81   @par Example 81   @par Example
82   When @ref ignore_case is passed as 82   When @ref ignore_case is passed as
83   an argument, this function ignores 83   an argument, this function ignores
84   case when performing comparisons: 84   case when performing comparisons:
85   @code 85   @code
86   void f( ignore_case_param(ignore_case) ); 86   void f( ignore_case_param(ignore_case) );
87   @endcode 87   @endcode
88   */ 88   */
89   constexpr 89   constexpr
HITCBC 90   56 ignore_case_param( 90   56 ignore_case_param(
91   implementation_defined::ignore_case_t) noexcept 91   implementation_defined::ignore_case_t) noexcept
HITCBC 92   56 : value_(true) 92   56 : value_(true)
93   { 93   {
HITCBC 94   56 } 94   56 }
95   95  
96   /** True if an algorithm should ignore case 96   /** True if an algorithm should ignore case
97   97  
98   Values of type `ignore_case_param` 98   Values of type `ignore_case_param`
99   evaluate to true when constructed 99   evaluate to true when constructed
100   with the constant @ref ignore_case. 100   with the constant @ref ignore_case.
101   Otherwise, they are default-constructed 101   Otherwise, they are default-constructed
102   and evaluate to `false`. 102   and evaluate to `false`.
103   103  
104   @return `true` if case should be ignored 104   @return `true` if case should be ignored
105   */ 105   */
HITCBC 106   392 operator 106   394 operator
107   bool() const noexcept 107   bool() const noexcept
108   { 108   {
HITCBC 109   392 return value_; 109   394 return value_;
110   } 110   }
111   }; 111   };
112   112  
113   } // urls 113   } // urls
114   } // boost 114   } // boost
115   115  
116   #endif 116   #endif