tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

match.h (4449B)


      1 //
      2 // Copyright 2017 The Abseil Authors.
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      https://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 // -----------------------------------------------------------------------------
     17 // File: match.h
     18 // -----------------------------------------------------------------------------
     19 //
     20 // This file contains simple utilities for performing string matching checks.
     21 // All of these function parameters are specified as `absl::string_view`,
     22 // meaning that these functions can accept `std::string`, `absl::string_view` or
     23 // NUL-terminated C-style strings.
     24 //
     25 // Examples:
     26 //   std::string s = "foo";
     27 //   absl::string_view sv = "f";
     28 //   assert(absl::StrContains(s, sv));
     29 //
     30 // Note: The order of parameters in these functions is designed to mimic the
     31 // order an equivalent member function would exhibit;
     32 // e.g. `s.Contains(x)` ==> `absl::StrContains(s, x).
     33 #ifndef ABSL_STRINGS_MATCH_H_
     34 #define ABSL_STRINGS_MATCH_H_
     35 
     36 #include <cstring>
     37 
     38 #include "absl/strings/string_view.h"
     39 
     40 namespace absl {
     41 ABSL_NAMESPACE_BEGIN
     42 
     43 // StrContains()
     44 //
     45 // Returns whether a given string `haystack` contains the substring `needle`.
     46 inline bool StrContains(absl::string_view haystack,
     47                        absl::string_view needle) noexcept {
     48  return haystack.find(needle, 0) != haystack.npos;
     49 }
     50 
     51 inline bool StrContains(absl::string_view haystack, char needle) noexcept {
     52  return haystack.find(needle) != haystack.npos;
     53 }
     54 
     55 // StartsWith()
     56 //
     57 // Returns whether a given string `text` begins with `prefix`.
     58 inline constexpr bool StartsWith(absl::string_view text,
     59                                 absl::string_view prefix) noexcept {
     60  if (prefix.empty()) {
     61    return true;
     62  }
     63  if (text.size() < prefix.size()) {
     64    return false;
     65  }
     66  absl::string_view possible_match = text.substr(0, prefix.size());
     67 
     68  return possible_match == prefix;
     69 }
     70 
     71 // EndsWith()
     72 //
     73 // Returns whether a given string `text` ends with `suffix`.
     74 inline constexpr bool EndsWith(absl::string_view text,
     75                               absl::string_view suffix) noexcept {
     76  if (suffix.empty()) {
     77    return true;
     78  }
     79  if (text.size() < suffix.size()) {
     80    return false;
     81  }
     82  absl::string_view possible_match = text.substr(text.size() - suffix.size());
     83  return possible_match == suffix;
     84 }
     85 // StrContainsIgnoreCase()
     86 //
     87 // Returns whether a given ASCII string `haystack` contains the ASCII substring
     88 // `needle`, ignoring case in the comparison.
     89 bool StrContainsIgnoreCase(absl::string_view haystack,
     90                           absl::string_view needle) noexcept;
     91 
     92 bool StrContainsIgnoreCase(absl::string_view haystack,
     93                           char needle) noexcept;
     94 
     95 // EqualsIgnoreCase()
     96 //
     97 // Returns whether given ASCII strings `piece1` and `piece2` are equal, ignoring
     98 // case in the comparison.
     99 bool EqualsIgnoreCase(absl::string_view piece1,
    100                      absl::string_view piece2) noexcept;
    101 
    102 // StartsWithIgnoreCase()
    103 //
    104 // Returns whether a given ASCII string `text` starts with `prefix`,
    105 // ignoring case in the comparison.
    106 bool StartsWithIgnoreCase(absl::string_view text,
    107                          absl::string_view prefix) noexcept;
    108 
    109 // EndsWithIgnoreCase()
    110 //
    111 // Returns whether a given ASCII string `text` ends with `suffix`, ignoring
    112 // case in the comparison.
    113 bool EndsWithIgnoreCase(absl::string_view text,
    114                        absl::string_view suffix) noexcept;
    115 
    116 // Yields the longest prefix in common between both input strings.
    117 // Pointer-wise, the returned result is a subset of input "a".
    118 absl::string_view FindLongestCommonPrefix(absl::string_view a,
    119                                          absl::string_view b);
    120 
    121 // Yields the longest suffix in common between both input strings.
    122 // Pointer-wise, the returned result is a subset of input "a".
    123 absl::string_view FindLongestCommonSuffix(absl::string_view a,
    124                                          absl::string_view b);
    125 
    126 ABSL_NAMESPACE_END
    127 }  // namespace absl
    128 
    129 #endif  // ABSL_STRINGS_MATCH_H_