Edit

kc3-lang/angle/src/common/string_utils.h

Branch :

  • Show log

    Commit

  • Author : John Plate
    Date : 2021-06-11 19:12:11
    Hash : 69562546
    Message : CL: Refactor info structs and fix conformance bug - Remove variable name prefix from Info structs to be more consistent with other ANGLE structs. - Fix CL object validation check with magics, since the Mesa solution doesn't work without RTTI. - Add support for some extensions required by OpenCL 1.1 and for some optional extensions. - Fix more conformance bugs. Bug: angleproject:6015 Change-Id: I41b1c45d95059a9994f5dc78bf9b74476cc6f2d4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2956349 Commit-Queue: John Plate <jplate@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/common/string_utils.h
  • //
    // Copyright 2015 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // string_utils:
    //   String helper functions.
    //
    
    #ifndef LIBANGLE_STRING_UTILS_H_
    #define LIBANGLE_STRING_UTILS_H_
    
    #include <string>
    #include <vector>
    
    #include "common/Optional.h"
    
    namespace angle
    {
    
    extern const char kWhitespaceASCII[];
    
    enum WhitespaceHandling
    {
        KEEP_WHITESPACE,
        TRIM_WHITESPACE,
    };
    
    enum SplitResult
    {
        SPLIT_WANT_ALL,
        SPLIT_WANT_NONEMPTY,
    };
    
    std::vector<std::string> SplitString(const std::string &input,
                                         const std::string &delimiters,
                                         WhitespaceHandling whitespace,
                                         SplitResult resultType);
    
    void SplitStringAlongWhitespace(const std::string &input, std::vector<std::string> *tokensOut);
    
    std::string TrimString(const std::string &input, const std::string &trimChars);
    
    // Return the substring starting at offset and up to the first occurance of the |delimeter|.
    std::string GetPrefix(const std::string &input, size_t offset, const char *delimiter);
    std::string GetPrefix(const std::string &input, size_t offset, char delimiter);
    
    bool HexStringToUInt(const std::string &input, unsigned int *uintOut);
    
    bool ReadFileToString(const std::string &path, std::string *stringOut);
    
    // Check if the string str begins with the given prefix.
    // The comparison is case sensitive.
    bool BeginsWith(const std::string &str, const std::string &prefix);
    
    // Check if the string str begins with the given prefix.
    // Prefix may not be NULL and needs to be NULL terminated.
    // The comparison is case sensitive.
    bool BeginsWith(const std::string &str, const char *prefix);
    
    // Check if the string str begins with the given prefix.
    // str and prefix may not be NULL and need to be NULL terminated.
    // The comparison is case sensitive.
    bool BeginsWith(const char *str, const char *prefix);
    
    // Check if the string str begins with the first prefixLength characters of the given prefix.
    // The length of the prefix string should be greater than or equal to prefixLength.
    // The comparison is case sensitive.
    bool BeginsWith(const std::string &str, const std::string &prefix, const size_t prefixLength);
    
    // Check if the string str ends with the given suffix.
    // The comparison is case sensitive.
    bool EndsWith(const std::string &str, const std::string &suffix);
    
    // Check if the string str ends with the given suffix.
    // Suffix may not be NULL and needs to be NULL terminated.
    // The comparison is case sensitive.
    bool EndsWith(const std::string &str, const char *suffix);
    
    // Check if the string str ends with the given suffix.
    // str and suffix may not be NULL and need to be NULL terminated.
    // The comparison is case sensitive.
    bool EndsWith(const char *str, const char *suffix);
    
    // Check if the given token string contains the given token.
    // The tokens are separated by the given delimiter.
    // The comparison is case sensitive.
    bool ContainsToken(const std::string &tokenStr, char delimiter, const std::string &token);
    
    // Convert to lower-case.
    void ToLower(std::string *str);
    
    // Convert to upper-case.
    void ToUpper(std::string *str);
    
    // Replaces the substring 'substring' in 'str' with 'replacement'. Returns true if successful.
    bool ReplaceSubstring(std::string *str,
                          const std::string &substring,
                          const std::string &replacement);
    
    // Split up a string parsed from an environment variable.
    std::vector<std::string> GetStringsFromEnvironmentVarOrAndroidProperty(const char *varName,
                                                                           const char *propertyName,
                                                                           const char *separator);
    
    // Split up a string parsed from environment variable or via Android property, use cached result if
    // available.
    std::vector<std::string> GetCachedStringsFromEnvironmentVarOrAndroidProperty(
        const char *varName,
        const char *propertyName,
        const char *separator);
    
    // reference name can have *.
    bool NamesMatchWithWildcard(const char *ref, const char *testName);
    }  // namespace angle
    
    #endif  // LIBANGLE_STRING_UTILS_H_