xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/string (revision 2f02b5af6ecb973d3a7faad9b0daff22646e724d)
1#ifndef _STRING_
2#define _STRING_
3
4// For size_t
5#include <string.h>
6
7typedef unsigned __INT16_TYPE__ char16;
8typedef unsigned __INT32_TYPE__ char32;
9
10namespace std {
11template <typename T>
12class allocator {};
13
14template <typename T>
15class char_traits {};
16
17template <typename C, typename T = char_traits<C>>
18struct basic_string_view;
19
20template <typename C, typename T = char_traits<C>, typename A = allocator<C>>
21struct basic_string {
22  typedef size_t size_type;
23  typedef basic_string<C, T, A> _Type;
24  basic_string();
25  basic_string(const C *p, const A &a = A());
26  basic_string(const C *p, size_type count);
27  basic_string(const C *b, const C *e);
28
29  ~basic_string();
30
31  const C *c_str() const;
32  const C *data() const;
33
34  bool empty() const;
35  size_type size() const;
36  size_type length() const;
37
38  _Type& append(const C *s);
39  _Type& append(const C *s, size_type n);
40  _Type& assign(const C *s);
41  _Type& assign(const C *s, size_type n);
42
43  int compare(const _Type&) const;
44  int compare(const C* s) const;
45  int compare(size_type pos, size_type len, const _Type&) const;
46  int compare(size_type pos, size_type len, const C* s) const;
47  template<class StringViewLike>
48  int compare(size_type pos1, size_type count1, const StringViewLike& t) const;
49
50  size_type find(const _Type& str, size_type pos = 0) const;
51  size_type find(const C* s, size_type pos = 0) const;
52  size_type find(const C* s, size_type pos, size_type n) const;
53
54  size_type rfind(const _Type& str, size_type pos = npos) const;
55  size_type rfind(const C* s, size_type pos, size_type count) const;
56  size_type rfind(const C* s, size_type pos = npos) const;
57  size_type rfind(C ch, size_type pos = npos) const;
58
59  _Type& insert(size_type pos, const _Type& str);
60  _Type& insert(size_type pos, const C* s);
61  _Type& insert(size_type pos, const C* s, size_type n);
62
63  _Type substr(size_type pos = 0, size_type count = npos) const;
64
65  constexpr bool starts_with(std::basic_string_view<C, T> sv) const noexcept;
66  constexpr bool starts_with(C ch) const noexcept;
67  constexpr bool starts_with(const C* s) const;
68
69  constexpr bool ends_with(std::basic_string_view<C, T> sv) const noexcept;
70  constexpr bool ends_with(C ch) const noexcept;
71  constexpr bool ends_with(const C* s) const;
72
73  _Type& operator[](size_type);
74  const _Type& operator[](size_type) const;
75
76  _Type& operator+=(const _Type& str);
77  _Type& operator+=(const C* s);
78  _Type& operator=(const _Type& str);
79  _Type& operator=(const C* s);
80
81  static constexpr size_t npos = -1;
82};
83
84typedef basic_string<char> string;
85typedef basic_string<wchar_t> wstring;
86typedef basic_string<char16> u16string;
87typedef basic_string<char32> u32string;
88
89template <typename C, typename T>
90struct basic_string_view {
91  typedef size_t size_type;
92  typedef basic_string_view<C, T> _Type;
93
94  const C *str;
95  constexpr basic_string_view(const C* s) : str(s) {}
96
97  const C *data() const;
98
99  bool empty() const;
100  size_type size() const;
101  size_type length() const;
102
103  size_type find(_Type v, size_type pos = 0) const;
104  size_type find(C ch, size_type pos = 0) const;
105  size_type find(const C* s, size_type pos, size_type count) const;
106  size_type find(const C* s, size_type pos = 0) const;
107
108  size_type rfind(_Type v, size_type pos = npos) const;
109  size_type rfind(C ch, size_type pos = npos) const;
110  size_type rfind(const C* s, size_type pos, size_type count) const;
111  size_type rfind(const C* s, size_type pos = npos) const;
112
113  constexpr bool starts_with(basic_string_view sv) const noexcept;
114  constexpr bool starts_with(C ch) const noexcept;
115  constexpr bool starts_with(const C* s) const;
116
117  constexpr bool ends_with(basic_string_view sv) const noexcept;
118  constexpr bool ends_with(C ch) const noexcept;
119  constexpr bool ends_with(const C* s) const;
120
121  constexpr int compare(basic_string_view sv) const noexcept;
122
123  static constexpr size_t npos = -1;
124};
125
126typedef basic_string_view<char> string_view;
127typedef basic_string_view<wchar_t> wstring_view;
128typedef basic_string_view<char16> u16string_view;
129typedef basic_string_view<char32> u32string_view;
130
131std::string operator+(const std::string&, const std::string&);
132std::string operator+(const std::string&, const char*);
133std::string operator+(const char*, const std::string&);
134
135bool operator==(const std::string&, const std::string&);
136bool operator==(const std::string&, const char*);
137bool operator==(const char*, const std::string&);
138
139bool operator==(const std::wstring&, const std::wstring&);
140bool operator==(const std::wstring&, const wchar_t*);
141bool operator==(const wchar_t*, const std::wstring&);
142
143bool operator==(const std::string_view&, const std::string_view&);
144bool operator==(const std::string_view&, const char*);
145bool operator==(const char*, const std::string_view&);
146
147#if __cplusplus < 202002L
148bool operator!=(const std::string&, const std::string&);
149bool operator!=(const std::string&, const char*);
150bool operator!=(const char*, const std::string&);
151
152bool operator!=(const std::string_view&, const std::string_view&);
153bool operator!=(const std::string_view&, const char*);
154bool operator!=(const char*, const std::string_view&);
155#endif
156
157size_t strlen(const char* str);
158}
159
160#endif // _STRING_
161