mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
dc5cf0feeb
GlobPattern::isTrivialMatchAll() returns true for the GlobPattern "*" which will match all inputs. This can be used to avoid performing expensive preparation of the input for match() when the result of the match will always be true. Differential Revision: https://reviews.llvm.org/D87468
58 lines
1.6 KiB
C++
58 lines
1.6 KiB
C++
//===-- 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_GLOB_PATTERN_H
|
|
#define LLVM_SUPPORT_GLOB_PATTERN_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_GLOB_PATTERN_H
|