1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===-- GlobPattern.h - glob pattern matcher implementation -*- C++ -*-----===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file implements a glob pattern matcher. The glob pattern is the
- // rule used by the shell.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_SUPPORT_GLOBPATTERN_H
- #define LLVM_SUPPORT_GLOBPATTERN_H
- #include "llvm/ADT/BitVector.h"
- #include "llvm/ADT/Optional.h"
- #include "llvm/Support/Error.h"
- #include <vector>
- // This class represents a glob pattern. Supported metacharacters
- // are "*", "?", "\", "[<chars>]", "[^<chars>]", and "[!<chars>]".
- namespace llvm {
- template <typename T> class ArrayRef;
- class StringRef;
- class GlobPattern {
- public:
- static Expected<GlobPattern> create(StringRef Pat);
- bool match(StringRef S) const;
- // Returns true for glob pattern "*". Can be used to avoid expensive
- // preparation/acquisition of the input for match().
- bool isTrivialMatchAll() const {
- if (Prefix && Prefix->empty()) {
- assert(!Suffix);
- return true;
- }
- return false;
- }
- private:
- bool matchOne(ArrayRef<BitVector> Pat, StringRef S) const;
- // Parsed glob pattern.
- std::vector<BitVector> Tokens;
- // The following members are for optimization.
- Optional<StringRef> Exact;
- Optional<StringRef> Prefix;
- Optional<StringRef> Suffix;
- };
- }
- #endif // LLVM_SUPPORT_GLOBPATTERN_H
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|