123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- #ifndef ABSL_STRINGS_ASCII_H_
- #define ABSL_STRINGS_ASCII_H_
- #include <algorithm>
- #include <string>
- #include "absl/base/attributes.h"
- #include "absl/base/config.h"
- #include "absl/strings/string_view.h"
- namespace absl {
- ABSL_NAMESPACE_BEGIN
- namespace ascii_internal {
- ABSL_DLL extern const unsigned char kPropertyBits[256];
- ABSL_DLL extern const char kToUpper[256];
- ABSL_DLL extern const char kToLower[256];
- }
- inline bool ascii_isalpha(unsigned char c) {
- return (ascii_internal::kPropertyBits[c] & 0x01) != 0;
- }
- inline bool ascii_isalnum(unsigned char c) {
- return (ascii_internal::kPropertyBits[c] & 0x04) != 0;
- }
- inline bool ascii_isspace(unsigned char c) {
- return (ascii_internal::kPropertyBits[c] & 0x08) != 0;
- }
- inline bool ascii_ispunct(unsigned char c) {
- return (ascii_internal::kPropertyBits[c] & 0x10) != 0;
- }
- inline bool ascii_isblank(unsigned char c) {
- return (ascii_internal::kPropertyBits[c] & 0x20) != 0;
- }
- inline bool ascii_iscntrl(unsigned char c) {
- return (ascii_internal::kPropertyBits[c] & 0x40) != 0;
- }
- inline bool ascii_isxdigit(unsigned char c) {
- return (ascii_internal::kPropertyBits[c] & 0x80) != 0;
- }
- inline bool ascii_isdigit(unsigned char c) { return c >= '0' && c <= '9'; }
- inline bool ascii_isprint(unsigned char c) { return c >= 32 && c < 127; }
- inline bool ascii_isgraph(unsigned char c) { return c > 32 && c < 127; }
- inline bool ascii_isupper(unsigned char c) { return c >= 'A' && c <= 'Z'; }
- inline bool ascii_islower(unsigned char c) { return c >= 'a' && c <= 'z'; }
- inline bool ascii_isascii(unsigned char c) { return c < 128; }
- inline char ascii_tolower(unsigned char c) {
- return ascii_internal::kToLower[c];
- }
- void AsciiStrToLower(std::string* s);
- ABSL_MUST_USE_RESULT inline std::string AsciiStrToLower(absl::string_view s) {
- std::string result(s);
- absl::AsciiStrToLower(&result);
- return result;
- }
- inline char ascii_toupper(unsigned char c) {
- return ascii_internal::kToUpper[c];
- }
- void AsciiStrToUpper(std::string* s);
- ABSL_MUST_USE_RESULT inline std::string AsciiStrToUpper(absl::string_view s) {
- std::string result(s);
- absl::AsciiStrToUpper(&result);
- return result;
- }
- ABSL_MUST_USE_RESULT inline absl::string_view StripLeadingAsciiWhitespace(
- absl::string_view str) {
- auto it = std::find_if_not(str.begin(), str.end(), absl::ascii_isspace);
- return str.substr(it - str.begin());
- }
- inline void StripLeadingAsciiWhitespace(std::string* str) {
- auto it = std::find_if_not(str->begin(), str->end(), absl::ascii_isspace);
- str->erase(str->begin(), it);
- }
- ABSL_MUST_USE_RESULT inline absl::string_view StripTrailingAsciiWhitespace(
- absl::string_view str) {
- auto it = std::find_if_not(str.rbegin(), str.rend(), absl::ascii_isspace);
- return str.substr(0, str.rend() - it);
- }
- inline void StripTrailingAsciiWhitespace(std::string* str) {
- auto it = std::find_if_not(str->rbegin(), str->rend(), absl::ascii_isspace);
- str->erase(str->rend() - it);
- }
- ABSL_MUST_USE_RESULT inline absl::string_view StripAsciiWhitespace(
- absl::string_view str) {
- return StripTrailingAsciiWhitespace(StripLeadingAsciiWhitespace(str));
- }
- inline void StripAsciiWhitespace(std::string* str) {
- StripTrailingAsciiWhitespace(str);
- StripLeadingAsciiWhitespace(str);
- }
- void RemoveExtraAsciiWhitespace(std::string*);
- ABSL_NAMESPACE_END
- }
- #endif
|