cx_string.h
Go to the documentation of this file.
1 #ifndef CX_STRING
2 #define CX_STRING
3 
4 // Inspired by constexpr_all_the_things by Jason Turner & Ben Deane
5 // github : https://github.com/lefticus/constexpr_all_the_things
6 // video : https://www.youtube.com/watch?v=HMB9oXFobJc
7 
8 #include <cstddef>
9 #include <string_view>
10 
11 namespace dnai
12 {
13  namespace utils
14  {
16  {
17  template <std::size_t N>
18  constexpr static_string(const char(&str)[N])
19  : m_size(N - 1), m_data(&str[0])
20  {
21  }
22  constexpr static_string(const char* str, std::size_t s)
23  : m_size(s), m_data(str)
24  {
25  }
26 
27  constexpr static_string() = default;
28 
29  constexpr size_t size() const {
30  return m_size;
31  }
32 
33  constexpr const char *c_str() const {
34  return m_data;
35  }
36 
37  constexpr const char *begin() const {
38  return m_data;
39  }
40 
41  constexpr const char *end() const {
42  return m_data + m_size;
43  }
44 
45  std::size_t m_size{ 0 };
46  const char *m_data = nullptr;
47  };
48 
49  constexpr bool operator==(const static_string &x, const static_string &y)
50  {
51  auto first1 = x.begin();
52  auto first2 = y.begin();
53  const auto last1 = x.begin();
54  const auto last2 = y.begin();
55  while (first1 != last1 && first2 != last2 && *first1 == *first2) {
56  ++first1, ++first2;
57  }
58  return first1 == last1 && first2 == last2;
59  }
60  }
61 }
62 
63 #endif //CX_STRING
constexpr bool operator==(const static_string &x, const static_string &y)
Definition: cx_string.h:49
Definition: cx_string.h:15
constexpr static_string()=default
constexpr const char * end() const
Definition: cx_string.h:41
constexpr size_t size() const
Definition: cx_string.h:29
constexpr static_string(const char *str, std::size_t s)
Definition: cx_string.h:22
constexpr static_string(const char(&str)[N])
Definition: cx_string.h:18
const char * m_data
Definition: cx_string.h:46
constexpr const char * c_str() const
Definition: cx_string.h:33
Definition: api.h:13
std::size_t m_size
Definition: cx_string.h:45
constexpr const char * begin() const
Definition: cx_string.h:37