brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · 6cedda4 Raw
172 lines · plain
1#ifndef _STRING_2#define _STRING_3 4// For size_t5#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  size_type find(C ch, size_type pos = 0) const;54  template<class StringViewLike>55  size_type find(const StringViewLike& t, size_type pos = 0) const;56 57  size_type rfind(const _Type& str, size_type pos = npos) const;58  size_type rfind(const C* s, size_type pos, size_type count) const;59  size_type rfind(const C* s, size_type pos = npos) const;60  size_type rfind(C ch, size_type pos = npos) const;61 62  constexpr bool contains(std::basic_string_view<C, T> sv) const noexcept;63  constexpr bool contains(C ch) const noexcept;64  constexpr bool contains(const C* s) const;65 66  _Type& insert(size_type pos, const _Type& str);67  _Type& insert(size_type pos, const C* s);68  _Type& insert(size_type pos, const C* s, size_type n);69 70  _Type substr(size_type pos = 0, size_type count = npos) const;71 72  constexpr bool starts_with(std::basic_string_view<C, T> sv) const noexcept;73  constexpr bool starts_with(C ch) const noexcept;74  constexpr bool starts_with(const C* s) const;75 76  constexpr bool ends_with(std::basic_string_view<C, T> sv) const noexcept;77  constexpr bool ends_with(C ch) const noexcept;78  constexpr bool ends_with(const C* s) const;79 80  _Type& operator[](size_type);81  const _Type& operator[](size_type) const;82 83  _Type& operator+=(const _Type& str);84  _Type& operator+=(const C* s);85  _Type& operator=(const _Type& str);86  _Type& operator=(const C* s);87 88  static constexpr size_t npos = -1;89};90 91typedef basic_string<char> string;92typedef basic_string<wchar_t> wstring;93typedef basic_string<char16> u16string;94typedef basic_string<char32> u32string;95 96template <typename C, typename T>97struct basic_string_view {98  typedef size_t size_type;99  typedef basic_string_view<C, T> _Type;100 101  const C *str;102  constexpr basic_string_view(const C* s) : str(s) {}103 104  const C *data() const;105 106  bool empty() const;107  size_type size() const;108  size_type length() const;109 110  size_type find(_Type v, size_type pos = 0) const;111  size_type find(C ch, size_type pos = 0) const;112  size_type find(const C* s, size_type pos, size_type count) const;113  size_type find(const C* s, size_type pos = 0) const;114 115  size_type rfind(_Type v, size_type pos = npos) const;116  size_type rfind(C ch, size_type pos = npos) const;117  size_type rfind(const C* s, size_type pos, size_type count) const;118  size_type rfind(const C* s, size_type pos = npos) const;119 120  constexpr bool contains(basic_string_view sv) const noexcept;121  constexpr bool contains(C ch) const noexcept;122  constexpr bool contains(const C* s) const;123 124  constexpr bool starts_with(basic_string_view sv) const noexcept;125  constexpr bool starts_with(C ch) const noexcept;126  constexpr bool starts_with(const C* s) const;127 128  constexpr bool ends_with(basic_string_view sv) const noexcept;129  constexpr bool ends_with(C ch) const noexcept;130  constexpr bool ends_with(const C* s) const;131 132  constexpr int compare(basic_string_view sv) const noexcept;133 134  static constexpr size_t npos = -1;135};136 137typedef basic_string_view<char> string_view;138typedef basic_string_view<wchar_t> wstring_view;139typedef basic_string_view<char16> u16string_view;140typedef basic_string_view<char32> u32string_view;141 142std::string operator+(const std::string&, const std::string&);143std::string operator+(const std::string&, const char*);144std::string operator+(const char*, const std::string&);145 146bool operator==(const std::string&, const std::string&);147bool operator==(const std::string&, const char*);148bool operator==(const char*, const std::string&);149 150bool operator==(const std::wstring&, const std::wstring&);151bool operator==(const std::wstring&, const wchar_t*);152bool operator==(const wchar_t*, const std::wstring&);153 154bool operator==(const std::string_view&, const std::string_view&);155bool operator==(const std::string_view&, const char*);156bool operator==(const char*, const std::string_view&);157 158#if __cplusplus < 202002L159bool operator!=(const std::string&, const std::string&);160bool operator!=(const std::string&, const char*);161bool operator!=(const char*, const std::string&);162 163bool operator!=(const std::string_view&, const std::string_view&);164bool operator!=(const std::string_view&, const char*);165bool operator!=(const char*, const std::string_view&);166#endif167 168size_t strlen(const char* str);169}170 171#endif // _STRING_172