MPD  0.20.18
StringPointer.hxx
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Max Kellermann <max.kellermann@gmail.com>
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * - Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * - Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the
14  * distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
19  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20  * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
25  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27  * OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 
30 #ifndef STRING_POINTER_HXX
31 #define STRING_POINTER_HXX
32 
36 template<typename T=char>
38 public:
39  typedef T value_type;
40  typedef T &reference_type;
41  typedef const T &const_reference_type;
42  typedef T *pointer_type;
43  typedef const T *const_pointer_type;
44 
45  static constexpr value_type SENTINEL = '\0';
46 
47 private:
48  const_pointer_type value;
49 
50 public:
51  StringPointer() = default;
52  constexpr StringPointer(const_pointer_type _value)
53  :value(_value) {}
54 
59  constexpr bool IsNull() const {
60  return value == nullptr;
61  }
62 
63  constexpr const_pointer_type c_str() const {
64  return value;
65  }
66 
67  bool empty() const {
68  return *value == SENTINEL;
69  }
70 };
71 
72 #endif
Simple OO wrapper for a const string pointer.
constexpr bool IsNull() const
Check if this is a "nulled" instance.
constexpr const_pointer_type c_str() const
static constexpr value_type SENTINEL
const T * const_pointer_type
bool empty() const
const T & const_reference_type
constexpr StringPointer(const_pointer_type _value)
StringPointer()=default