HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
patternMatcher.h
Go to the documentation of this file.
1 //
2 // Copyright 2016 Pixar
3 //
4 // Licensed under the Apache License, Version 2.0 (the "Apache License")
5 // with the following modification; you may not use this file except in
6 // compliance with the Apache License and the following modification to it:
7 // Section 6. Trademarks. is deleted and replaced with:
8 //
9 // 6. Trademarks. This License does not grant permission to use the trade
10 // names, trademarks, service marks, or product names of the Licensor
11 // and its affiliates, except as required to comply with Section 4(c) of
12 // the License and to reproduce the content of the NOTICE file.
13 //
14 // You may obtain a copy of the Apache License at
15 //
16 // http://www.apache.org/licenses/LICENSE-2.0
17 //
18 // Unless required by applicable law or agreed to in writing, software
19 // distributed under the Apache License with the above modification is
20 // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21 // KIND, either express or implied. See the Apache License for the specific
22 // language governing permissions and limitations under the Apache License.
23 //
24 #ifndef PXR_BASE_TF_PATTERN_MATCHER_H
25 #define PXR_BASE_TF_PATTERN_MATCHER_H
26 
27 /// \file tf/patternMatcher.h
28 /// \ingroup group_tf_String
29 /// A simple glob and regex matching utility.
30 
31 #include "pxr/pxr.h"
32 #include "pxr/base/tf/api.h"
33 #include "pxr/base/arch/regex.h"
34 
35 #include <string>
36 
38 
39 /// \class TfPatternMatcher
40 /// \ingroup group_tf_String
41 ///
42 /// Class for matching regular expressions.
43 ///
44 /// A matcher is good to use when you have many strings to match against one
45 /// pattern. This is because the matcher will only compile the regular
46 /// expression once.
47 ///
49 {
50 
51  public:
52 
53  /// Construct an empty (invalid) TfPatternMatcher.
55 
56  TF_API TfPatternMatcher(TfPatternMatcher &&) noexcept = default;
57  TF_API TfPatternMatcher& operator=(TfPatternMatcher &&) = default;
58 
59  /// Construct a TfPatternMatcher with a default configuration. Note that
60  /// pattern compilation will not occur until the first call to \a Match()
61  /// or \a IsValid().
62  TF_API
64  bool caseSensitive = false,
65  bool isGlob = false );
66 
67  /// Destructor.
69 
70  /// If \a IsValid() returns true, this will return the reason why (if any).
72 
73  /// Returns true if the matcher has been set to be case sensitive, false
74  /// otherwise.
75  bool IsCaseSensitive() const {
76  return _caseSensitive;
77  }
78 
79  /// Returns true if the matcher has been set to treat patterns as glob
80  /// patterns, false otherwise.
81  bool IsGlobPattern() const {
82  return _isGlob;
83  }
84 
85  /// Returns the matcher's pattern string.
86  TF_API const std::string& GetPattern() const {
87  return _pattern;
88  }
89 
90  /// Returns true if the matcher has a valid pattern. Note that empty
91  /// patterns are considered invalid. This will cause a compile of
92  TF_API bool IsValid() const;
93 
94  /// Returns true if \a query matches the matcher's pattern.
95  ///
96  /// If there is an error in matching and errorMsg is not NULL, it will be
97  /// set with the error message. If the matcher is not valid, this will
98  /// return false. Note that this will cause a compile of the matcher's
99  /// pattern if it was not already compiled.
100  ///
101  /// \warning Unlike 'match' functions in other regular expression
102  /// libraries, this method does not implicitly anchor the pattern. If a
103  /// partial match is not acceptable, it is necessary to anchor the pattern
104  /// passed to the constructor, e.g. "^mypattern$".
105  ///
106  TF_API bool Match( const std::string &query,
107  std::string *errorMsg = NULL ) const;
108 
109  /// Set this matcher to match case-sensitively or not.
110  TF_API void SetIsCaseSensitive( bool sensitive );
111 
112  /// Set this matcher to treat its pattern as a glob pattern. Currently,
113  /// this means that the pattern will be transformed by replacing all
114  /// instances of '.' with '\.', '*' with '.*', and '?' with '.', in that
115  /// order before being compiled as a normal regular expression.
116  TF_API void SetIsGlobPattern( bool isGlob );
117 
118  /// Set the pattern that this matcher will use to match against.
119  TF_API void SetPattern( const std::string &pattern );
120 
121  private:
122  void _Compile() const;
123 
124  bool _caseSensitive;
125  bool _isGlob;
126  std::string _pattern;
127  mutable bool _recompile;
128  mutable ArchRegex _regex;
129 
130 };
131 
133 
134 #endif // PXR_BASE_TF_PATTERN_MATCHER_H
TF_API TfPatternMatcher & operator=(TfPatternMatcher &&)=default
TF_API TfPatternMatcher()
Construct an empty (invalid) TfPatternMatcher.
GLenum query
Definition: glad.h:2772
TF_API std::string GetInvalidReason() const
If IsValid() returns true, this will return the reason why (if any).
TF_API void SetPattern(const std::string &pattern)
Set the pattern that this matcher will use to match against.
#define TF_API
Definition: api.h:40
TF_API const std::string & GetPattern() const
Returns the matcher's pattern string.
bool IsCaseSensitive() const
TF_API void SetIsCaseSensitive(bool sensitive)
Set this matcher to match case-sensitively or not.
GLsizei const GLchar *const * string
Definition: glcorearb.h:814
TF_API ~TfPatternMatcher()
Destructor.
bool IsGlobPattern() const
TF_API bool Match(const std::string &query, std::string *errorMsg=NULL) const
TF_API void SetIsGlobPattern(bool isGlob)
TF_API bool IsValid() const
GLushort pattern
Definition: glad.h:2583
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition: path.h:1432
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:91