opynsim
Unofficial C++ Documentation
Loading...
Searching...
No Matches
c_string_view.h
Go to the documentation of this file.
1#pragma once
2
3#include <compare>
4#include <cstddef>
5#include <iosfwd>
6#include <string_view>
7#include <string>
8
9namespace osc
10{
11 // represents a readonly view into a NUL-terminated C string
13 public:
14 using value_type = std::string_view::value_type;
16 using const_pointer = const value_type*;
18 using const_iterator = const value_type*;
19 using size_type = std::string_view::size_type;
20
21 constexpr CStringView() = default;
22
23 constexpr CStringView(const value_type* s) :
24 data_{s ? s : ""}
25 {}
26
27 constexpr CStringView(const value_type* s, size_type count) :
28 data_{s},
29 size_{count}
30 {}
31
32 constexpr CStringView(std::nullptr_t) :
34 {}
35
36 CStringView(const std::string& s) :
37 data_{s.c_str()},
38 size_{s.size()}
39 {}
40
41 constexpr CStringView(const CStringView&) = default;
46
48 {
49 return size_;
50 }
51
52 constexpr size_type length() const
53 {
54 return size_;
55 }
56
57 [[nodiscard]] constexpr bool empty() const
58 {
59 return size_ == 0;
60 }
61
62 constexpr const value_type* c_str() const
63 {
64 return data_;
65 }
66
67 constexpr operator std::string_view () const
68 {
69 return std::string_view{data_, size_};
70 }
71
72 constexpr const_iterator begin() const
73 {
74 return data_;
75 }
76
77 constexpr const_iterator end() const
78 {
79 return data_ + size_;
80 }
81
82 constexpr const_pointer data() const
83 {
84 return data_;
85 }
86
87 constexpr friend bool operator==(const CStringView& lhs, const CStringView& rhs)
88 {
89 return static_cast<std::string_view>(lhs) == static_cast<std::string_view>(rhs);
90 }
91 constexpr friend auto operator<=>(const CStringView& lhs, const CStringView& rhs)
92 {
93 return static_cast<std::string_view>(lhs) <=> static_cast<std::string_view>(rhs);
94 }
95 private:
96 const value_type* data_ = "";
97 size_type size_ = std::string_view{data_}.size();
98 };
99
100 namespace literals
101 {
102 constexpr CStringView operator""_cs(const char* str, size_t len)
103 {
104 return CStringView{str, len};
105 }
106 }
107
108 inline std::string to_string(const CStringView& cstring_view)
109 {
110 return std::string{cstring_view};
111 }
112
113 std::ostream& operator<<(std::ostream&, const CStringView&);
114 std::string operator+(const char*, const CStringView&);
115 std::string operator+(const std::string&, const CStringView&);
116}
117
118template<>
119struct std::hash<osc::CStringView> final {
120 size_t operator()(const osc::CStringView& cstring_view) const noexcept
121 {
122 return std::hash<std::string_view>{}(cstring_view);
123 }
124};
Definition c_string_view.h:12
constexpr friend auto operator<=>(const CStringView &lhs, const CStringView &rhs)
Definition c_string_view.h:91
constexpr CStringView(const CStringView &)=default
constexpr friend bool operator==(const CStringView &lhs, const CStringView &rhs)
Definition c_string_view.h:87
value_type * pointer
Definition c_string_view.h:15
constexpr const_iterator begin() const
Definition c_string_view.h:72
CStringView(const std::string &s)
Definition c_string_view.h:36
std::string_view::value_type value_type
Definition c_string_view.h:14
constexpr CStringView(const value_type *s, size_type count)
Definition c_string_view.h:27
const value_type * const_iterator
Definition c_string_view.h:18
value_type * iterator
Definition c_string_view.h:17
std::string_view::size_type size_type
Definition c_string_view.h:19
const value_type * const_pointer
Definition c_string_view.h:16
constexpr CStringView(const value_type *s)
Definition c_string_view.h:23
constexpr CStringView(std::nullptr_t)
Definition c_string_view.h:32
constexpr CStringView(CStringView &&) noexcept=default
constexpr size_type length() const
Definition c_string_view.h:52
constexpr bool empty() const
Definition c_string_view.h:57
constexpr const value_type * c_str() const
Definition c_string_view.h:62
constexpr size_type size() const
Definition c_string_view.h:47
constexpr CStringView()=default
constexpr const_iterator end() const
Definition c_string_view.h:77
constexpr const_pointer data() const
Definition c_string_view.h:82
Definition custom_decoration_generator.h:5
std::ostream & operator<<(std::ostream &, const Object &)
constexpr std::common_type_t< Angle< Rep1, Units1 >, Angle< Rep2, Units2 > > operator+(const Angle< Rep1, Units1 > &lhs, const Angle< Rep2, Units2 > &rhs)
Definition angle.h:99
std::string to_string(const Matrix< T, C, R > &m)
Definition matrix.h:32
constexpr U to(T &&value)
Definition conversion.h:56
size_t operator()(const osc::CStringView &cstring_view) const noexcept
Definition c_string_view.h:120