Report patch name instead of index in debug
[foam-extend-3.2.git] / src / foam / primitives / strings / wordRe / wordReI.H
blob2b2c79d603720a5037d5c948474ba470c1582a53
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 // * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * * //
28 inline bool Foam::wordRe::meta(char c)
30     return regExp::meta(c);
34 inline bool Foam::wordRe::isPattern(const string& str)
36     return string::meta<regExp>(str);
40 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
42 inline Foam::wordRe::wordRe()
44     word(),
45     re_()
49 inline Foam::wordRe::wordRe(const wordRe& str)
51     word(str),
52     re_()
54     if (str.isPattern())
55     {
56         compile();
57     }
61 inline Foam::wordRe::wordRe(const word& str)
63     word(str),
64     re_()
68 inline Foam::wordRe::wordRe(const char* str, const compOption opt)
70     word(str, false),
71     re_()
73     compile(opt);
77 inline Foam::wordRe::wordRe(const string& str, const compOption opt)
79     word(str, false),
80     re_()
82     compile(opt);
86 inline Foam::wordRe::wordRe(const std::string& str, const compOption opt)
88     word(str, false),
89     re_()
91     compile(opt);
95 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
97 inline bool Foam::wordRe::isPattern() const
99     return re_.exists();
103 inline bool Foam::wordRe::compile(const compOption opt) const
105     bool doCompile = false;
107     if (opt & wordRe::REGEXP)
108     {
109         doCompile = true;
110     }
111     else if (opt & wordRe::DETECT)
112     {
113         if (string::meta<regExp>(*this) || !string::valid<word>(*this))
114         {
115             doCompile = true;
116         }
117     }
118     else if (opt & wordRe::NOCASE)
119     {
120         doCompile = true;
121     }
124     if (doCompile)
125     {
126         re_.set(*this, (opt & wordRe::NOCASE));
127     }
128     else
129     {
130         re_.clear();
131     }
133     return re_.exists();
137 inline bool Foam::wordRe::compile() const
139     re_ = *this;
140     return re_.exists();
144 inline bool Foam::wordRe::recompile() const
146     if (re_.exists())
147     {
148         re_ = *this;
149     }
151     return re_.exists();
155 inline void Foam::wordRe::uncompile(const bool doStripInvalid) const
157     if (re_.clear())
158     {
159         // skip stripping unless debug is active to avoid costly operations
160         if (word::debug && doStripInvalid)
161         {
162             string::stripInvalid<word>
163             (
164                 const_cast<word&>(static_cast<const word&>(*this))
165             );
166         }
167     }
171 inline void Foam::wordRe::clear()
173     word::clear();
174     re_.clear();
178 inline bool Foam::wordRe::match(const string& str, bool literalMatch) const
180     if (literalMatch || !re_.exists())
181     {
182         // check as string
183         return (*this == str);
184     }
185     else
186     {
187         // check as regex
188         return re_.match(str);
189     }
193 inline Foam::string Foam::wordRe::quotemeta() const
195     return string::quotemeta<regExp>(*this);
199 inline void Foam::wordRe::set(const std::string& str, const compOption opt)
201     string::operator=(str);
202     compile(opt);
206 inline void Foam::wordRe::set(const char* str, const compOption opt)
208     string::operator=(str);
209     compile(opt);
213 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
215 inline const Foam::wordRe& Foam::wordRe::operator=(const wordRe& str)
217     string::operator=(str);
219     if (str.isPattern())
220     {
221         compile();
222     }
223     else
224     {
225         re_.clear();
226     }
227     return *this;
231 inline const Foam::wordRe& Foam::wordRe::operator=(const word& str)
233     word::operator=(str);
234     re_.clear();
235     return *this;
239 inline const Foam::wordRe& Foam::wordRe::operator=(const string& str)
241     string::operator=(str);
242     compile(DETECT);  // auto-detect regex
243     return *this;
247 inline const Foam::wordRe& Foam::wordRe::operator=(const std::string& str)
249     string::operator=(str);
250     compile(DETECT);  // auto-detect regex
251     return *this;
255 inline const Foam::wordRe& Foam::wordRe::operator=(const char* str)
257     string::operator=(str);
258     compile(DETECT);  // auto-detect regex
259     return *this;
263 // ************************************************************************* //