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 <format>
6#include <iosfwd>
7#include <string_view>
8#include <string>
9
10namespace osc
11{
12 // represents a readonly view into a NUL-terminated C string
14 public:
15 using value_type = std::string_view::value_type;
17 using const_pointer = const value_type*;
19 using const_iterator = const value_type*;
20 using size_type = std::string_view::size_type;
21
22 constexpr CStringView() = default;
23
24 constexpr CStringView(const value_type* s) :
25 data_{s ? s : ""}
26 {}
27
28 constexpr CStringView(const value_type* s, size_type count) :
29 data_{s},
30 size_{count}
31 {}
32
33 constexpr CStringView(std::nullptr_t) :
35 {}
36
37 CStringView(const std::string& s) :
38 data_{s.c_str()},
39 size_{s.size()}
40 {}
41
42 constexpr CStringView(const CStringView&) = default;
47
49 {
50 return size_;
51 }
52
53 constexpr size_type length() const
54 {
55 return size_;
56 }
57
58 [[nodiscard]] constexpr bool empty() const
59 {
60 return size_ == 0;
61 }
62
63 constexpr const value_type* c_str() const
64 {
65 return data_;
66 }
67
68 constexpr operator std::string_view () const
69 {
70 return std::string_view{data_, size_};
71 }
72
73 constexpr const_iterator begin() const
74 {
75 return data_;
76 }
77
78 constexpr const_iterator end() const
79 {
80 return data_ + size_;
81 }
82
83 constexpr const_pointer data() const
84 {
85 return data_;
86 }
87
88 constexpr friend bool operator==(const CStringView& lhs, const CStringView& rhs)
89 {
90 return static_cast<std::string_view>(lhs) == static_cast<std::string_view>(rhs);
91 }
92 constexpr friend auto operator<=>(const CStringView& lhs, const CStringView& rhs)
93 {
94 return static_cast<std::string_view>(lhs) <=> static_cast<std::string_view>(rhs);
95 }
96 private:
97 const value_type* data_ = "";
98 size_type size_ = std::string_view{data_}.size();
99 };
100
101 namespace literals
102 {
103 constexpr CStringView operator""_cs(const char* str, size_t len)
104 {
105 return CStringView{str, len};
106 }
107 }
108
109 inline std::string to_string(const CStringView& cstring_view)
110 {
111 return std::string{cstring_view};
112 }
113
114 std::ostream& operator<<(std::ostream&, const CStringView&);
115 std::string operator+(const char*, const CStringView&);
116 std::string operator+(const std::string&, const CStringView&);
117}
118
119template<>
120struct std::hash<osc::CStringView> final {
121 size_t operator()(const osc::CStringView& cstring_view) const noexcept
122 {
123 return std::hash<std::string_view>{}(cstring_view);
124 }
125};
126
127template<>
128struct std::formatter<osc::CStringView> final : std::formatter<std::string_view> {};
Definition c_string_view.h:13
constexpr friend auto operator<=>(const CStringView &lhs, const CStringView &rhs)
Definition c_string_view.h:92
constexpr CStringView(const CStringView &)=default
constexpr friend bool operator==(const CStringView &lhs, const CStringView &rhs)
Definition c_string_view.h:88
value_type * pointer
Definition c_string_view.h:16
constexpr const_iterator begin() const
Definition c_string_view.h:73
CStringView(const std::string &s)
Definition c_string_view.h:37
std::string_view::value_type value_type
Definition c_string_view.h:15
constexpr CStringView(const value_type *s, size_type count)
Definition c_string_view.h:28
const value_type * const_iterator
Definition c_string_view.h:19
value_type * iterator
Definition c_string_view.h:18
std::string_view::size_type size_type
Definition c_string_view.h:20
const value_type * const_pointer
Definition c_string_view.h:17
constexpr CStringView(const value_type *s)
Definition c_string_view.h:24
constexpr CStringView(std::nullptr_t)
Definition c_string_view.h:33
constexpr CStringView(CStringView &&) noexcept=default
constexpr size_type length() const
Definition c_string_view.h:53
constexpr bool empty() const
Definition c_string_view.h:58
constexpr const value_type * c_str() const
Definition c_string_view.h:63
constexpr size_type size() const
Definition c_string_view.h:48
constexpr CStringView()=default
constexpr const_iterator end() const
Definition c_string_view.h:78
constexpr const_pointer data() const
Definition c_string_view.h:83
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:100
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:121