Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[clang-tidy] Extract string header from redundant-string-cstr checker
In preparation for using the implementation of basic_string and basic_string_view from redundant-string-cstr.cpp in other checks, let's extract it to a header. Using the existing <string.h> to provide size_t, using that to define size_type and using it rather than the previous "size" type makes it easier to provide the size() method later and makes the implementation closer to the standard. Reviewed By: carlosgalvezp Differential Revision: https://reviews.llvm.org/D144216
- Loading branch information
1 parent
ad00239
commit ae25e2f
Showing
2 changed files
with
76 additions
and
68 deletions.
There are no files selected for viewing
74 changes: 74 additions & 0 deletions
74
clang-tools-extra/test/clang-tidy/checkers/Inputs/Headers/string
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
#ifndef _STRING_ | ||
#define _STRING_ | ||
|
||
// For size_t | ||
#include <string.h> | ||
|
||
typedef unsigned __INT16_TYPE__ char16; | ||
typedef unsigned __INT32_TYPE__ char32; | ||
|
||
namespace std { | ||
template <typename T> | ||
class allocator {}; | ||
template <typename T> | ||
class char_traits {}; | ||
template <typename C, typename T, typename A> | ||
struct basic_string { | ||
typedef size_t size_type; | ||
typedef basic_string<C, T, A> _Type; | ||
basic_string(); | ||
basic_string(const C *p, const A &a = A()); | ||
|
||
~basic_string(); | ||
|
||
const C *c_str() const; | ||
const C *data() const; | ||
|
||
_Type& append(const C *s); | ||
_Type& append(const C *s, size_type n); | ||
_Type& assign(const C *s); | ||
_Type& assign(const C *s, size_type n); | ||
|
||
int compare(const _Type&) const; | ||
int compare(const C* s) const; | ||
int compare(size_type pos, size_type len, const _Type&) const; | ||
int compare(size_type pos, size_type len, const C* s) const; | ||
|
||
size_type find(const _Type& str, size_type pos = 0) const; | ||
size_type find(const C* s, size_type pos = 0) const; | ||
size_type find(const C* s, size_type pos, size_type n) const; | ||
|
||
_Type& insert(size_type pos, const _Type& str); | ||
_Type& insert(size_type pos, const C* s); | ||
_Type& insert(size_type pos, const C* s, size_type n); | ||
|
||
_Type& operator+=(const _Type& str); | ||
_Type& operator+=(const C* s); | ||
_Type& operator=(const _Type& str); | ||
_Type& operator=(const C* s); | ||
}; | ||
|
||
typedef basic_string<char, std::char_traits<char>, std::allocator<char>> string; | ||
typedef basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>> wstring; | ||
typedef basic_string<char16, std::char_traits<char16>, std::allocator<char16>> u16string; | ||
typedef basic_string<char32, std::char_traits<char32>, std::allocator<char32>> u32string; | ||
|
||
template <typename C, typename T> | ||
struct basic_string_view { | ||
basic_string_view(const C* s); | ||
}; | ||
typedef basic_string_view<char, std::char_traits<char>> string_view; | ||
typedef basic_string_view<wchar_t, std::char_traits<wchar_t>> wstring_view; | ||
typedef basic_string_view<char16, std::char_traits<char16>> u16string_view; | ||
typedef basic_string_view<char32, std::char_traits<char32>> u32string_view; | ||
|
||
std::string operator+(const std::string&, const std::string&); | ||
std::string operator+(const std::string&, const char*); | ||
std::string operator+(const char*, const std::string&); | ||
|
||
bool operator==(const std::string&, const std::string&); | ||
bool operator==(const std::string&, const char*); | ||
bool operator==(const char*, const std::string&); | ||
} | ||
|
||
#endif // _STRING_ |
70 changes: 2 additions & 68 deletions
70
clang-tools-extra/test/clang-tidy/checkers/readability/redundant-string-cstr.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters