16#include "ioss_export.h"
20 template <
class charT>
using String = std::basic_string<charT>;
22 template <
class charT>
class Automata;
24 class IOSS_EXPORT
Error :
public std::exception
27 explicit Error(std::string msg) :
msg_{std::move(msg)} {}
30 const char *
what() const noexcept
override {
return msg_.c_str(); }
24 class IOSS_EXPORT
Error :
public std::exception {
…};
48 template <
class T,
class U = T> T
exchange(T &obj, U &&new_value)
50 T old_value = std::move(obj);
51 obj = std::forward<U>(new_value);
48 template <
class T,
class U = T> T
exchange(T &obj, U &&new_value) {
…}
55 template <
class charT>
class State
55 template <
class charT>
class State {
…};
134 states_ = std::move(automata.states_);
164 auto r =
ExecAux(str, comp_end);
171 std::vector<String<charT>> vec;
176 vec.push_back(state->MatchedStr());
183 template <
class T,
typename... Args>
size_t NewState(Args &&...args)
185 size_t state_pos =
states_.size();
186 auto state = std::unique_ptr<State<charT>>(
new T(*
this, std::forward<Args>(args)...));
188 states_.push_back(std::move(state));
183 template <
class T,
typename... Args>
size_t NewState(Args &&...args) {
…}
197 size_t state_pos = 0;
203 std::tie(state_pos, str_pos) =
states_[state_pos]->Next(str, str_pos);
209 if ((state_pos ==
match_state_) && (str_pos == str.length())) {
210 return {
true, str_pos};
213 return {
false, str_pos};
227 std::vector<std::unique_ptr<State<charT>>>
states_;
245 if (
c_ == str[pos]) {
247 return std::tuple<size_t, size_t>(
GetNextStates()[0], pos + 1);
250 return std::tuple<size_t, size_t>(
GetAutomata().FailState(), pos + 1);
275 return std::tuple<size_t, size_t>(
GetNextStates()[0], pos + 1);
302 return std::tuple<size_t, size_t>(
GetNextStates()[1], str.length());
313 return std::tuple<size_t, size_t>(
GetNextStates()[0], pos + 1);
323 virtual bool Check(charT c)
const = 0;
331 bool Check(charT c)
const override {
return c ==
c_; }
341 :
start_{start < end ? start : end},
end_{start < end ? end : start}
367 for (
auto &item :
items_) {
369 if (item.get()->Check(str[pos])) {
388 if (
Check(str, pos)) {
390 return std::tuple<size_t, size_t>(
GetNextStates()[0], pos + 1);
393 return std::tuple<size_t, size_t>(
GetAutomata().FailState(), pos + 1);
397 std::vector<std::unique_ptr<SetItem<charT>>>
items_;
426 std::tie(r, str_pos) = automata->Exec(str_part,
false);
428 return {r, pos + str_pos};
432 return {
false, pos + str_pos};
445 std::tie(r, std::ignore) =
BasicCheck(str, pos);
488 return std::tuple<size_t, size_t>(
GetAutomata().FailState(), new_pos);
501 return std::tuple<size_t, size_t>(
GetNextStates()[1], new_pos);
504 return std::tuple<size_t, size_t>(
GetAutomata().FailState(), new_pos);
514 return std::tuple<size_t, size_t>(
GetNextStates()[1], new_pos);
528 new_pos == str.length()) {
529 return std::tuple<size_t, size_t>(
GetNextStates()[1], new_pos);
531 return std::tuple<size_t, size_t>(
GetNextStates()[0], new_pos);
549 new_pos == str.length()) {
550 return std::tuple<size_t, size_t>(
GetNextStates()[1], new_pos);
552 return std::tuple<size_t, size_t>(
GetNextStates()[0], new_pos);
565 return std::tuple<size_t, size_t>(
GetAutomata().FailState(), new_pos);
574#define TOKEN(X, Y) X,
581 TOKEN(LBRACKET,
"[")
TOKEN(RBRACKET,
"]")
TOKEN(NEGLBRACKET,
"[^") NUM_TOKENS
585#define TOKEN(X, Y) #X,
593 TOKEN(NEGLBRACKET,
"[^")
""};
614 template <
class charU>
621 template <
class charT>
624 stream << '[' << token_name_str[static_cast<int>(token.
kind_)] <<
']';
637 std::vector<Token<charT>> tokens;
643 tokens.push_back(
Select(TokenKind::QUESTLPAREN));
647 tokens.push_back(
Select(TokenKind::QUESTION));
655 tokens.push_back(
Select(TokenKind::STARLPAREN));
659 tokens.push_back(
Select(TokenKind::STAR));
667 tokens.push_back(
Select(TokenKind::PLUSLPAREN));
677 tokens.push_back(
Select(TokenKind::SUB));
683 tokens.push_back(
Select(TokenKind::UNION));
691 tokens.push_back(
Select(TokenKind::ATLPAREN));
703 tokens.push_back(
Select(TokenKind::NEGLPAREN));
713 tokens.push_back(
Select(TokenKind::LPAREN));
719 tokens.push_back(
Select(TokenKind::RPAREN));
727 tokens.push_back(
Select(TokenKind::NEGLBRACKET));
731 tokens.push_back(
Select(TokenKind::LBRACKET));
737 tokens.push_back(
Select(TokenKind::RBRACKET));
745 throw Error(
"No valid char after '\\'");
754 tokens.push_back(
Select(TokenKind::EOS));
784#define GLOB_AST_NODE_LIST(V) \
784#define GLOB_AST_NODE_LIST(V) \ …
797 template <
class charT>
class AstVisitor;
800#define DECLARE_TYPE_CLASS(type) template <class charT> class type;
803#undef DECLARE_TYPE_CLASS
837 template <
class charT>
using AstNodePtr = std::unique_ptr<AstNode<charT>>;
844#define DECLARE_VIRTUAL_FUNC(type) \
845 virtual void Visit##type(type<charT> * ) {}
844#define DECLARE_VIRTUAL_FUNC(type) \ …
847#undef DECLARE_VIRTUAL_FUNC
1031 throw Error(
"char expected");
1034 charT c = tk.
Value();
1043 if (tk != TokenKind::SUB) {
1044 throw Error(
"range expected");
1062 std::vector<AstNodePtr<charT>> items;
1066 }
while (
GetToken() != TokenKind::RBRACKET);
1077 if (tk == TokenKind::LBRACKET) {
1080 if (tk == TokenKind::NEGLBRACKET) {
1083 throw Error(
"set expected");
1090 switch (tk.
Kind()) {
1099 case TokenKind::LBRACKET:
1100 case TokenKind::NEGLBRACKET:
return ParserSet();
1102 case TokenKind::LPAREN:
1103 case TokenKind::QUESTLPAREN:
1104 case TokenKind::STARLPAREN:
1105 case TokenKind::PLUSLPAREN:
1106 case TokenKind::NEGLPAREN:
1109 default:
throw Error(
"basic glob expected");
1118 switch (tk.
Kind()) {
1131 default:
throw Error(
"Not valid group");
break;
1136 if (tk != TokenKind::RPAREN) {
1137 throw Error(
"Expected ')' at and of group");
1145 auto check_end = [&]() ->
bool {
1148 switch (tk.
Kind()) {
1149 case TokenKind::EOS:
1150 case TokenKind::RPAREN:
1151 case TokenKind::UNION:
return true;
1153 default:
return false;
1157 std::vector<AstNodePtr<charT>> parts;
1159 while (!check_end()) {
1168 std::vector<AstNodePtr<charT>> items;
1171 while (
GetToken() == TokenKind::UNION) {
1183 if (
GetToken() != TokenKind::EOS) {
1184 throw Error(
"Expected the end of glob");
1315 std::vector<std::unique_ptr<SetItem<charT>>> vec;
1316 auto &items = set_node->
GetItems();
1317 for (
auto &item : items) {
1333 auto *start_node =
static_cast<CharNode<charT> *
>(range_node->GetStart());
1334 auto *end_node =
static_cast<CharNode<charT> *
>(range_node->GetEnd());
1336 char start_char = start_node->GetValue();
1337 char end_char = end_node->GetValue();
1340 throw Error(
"Not valid set item");
1346 auto *union_node = group_node->
GetGlob();
1350 switch (group_node->GetGroupType()) {
1377 auto &items = union_node->
GetItems();
1378 std::vector<std::unique_ptr<Automata<charT>>> vec_automatas;
1379 for (
auto &item : items) {
1382 ast_consumer.
ExecConcat(item.get(), *automata_ptr);
1385 automata_ptr->GetState(ast_consumer.
preview_state_).AddNextState(match_state);
1386 automata_ptr->SetMatchState(match_state);
1389 automata_ptr->SetFailState(fail_state);
1391 vec_automatas.push_back(std::move(automata_ptr));
1394 return vec_automatas;
1416 std::vector<Token<charT>> tokens = l.
Scanner();
1438 std::tie(r, std::ignore) =
automata_.Exec(str);
1467 int preview_state = -1;
1469 while (pos < pattern.length()) {
1470 size_t current_state = 0;
1471 char c = pattern[pos];
1474 current_state =
automata_.template NewState<StateAny<charT>>();
1480 current_state =
automata_.template NewState<StateStar<charT>>();
1481 automata_.GetState(current_state).AddNextState(current_state);
1487 current_state =
automata_.template NewState<StateChar<charT>>(c);
1493 if (preview_state >= 0) {
1494 automata_.GetState(preview_state).AddNextState(current_state);
1496 preview_state = current_state;
1499 size_t match_state =
automata_.template NewState<StateMatch<charT>>();
1500 automata_.GetState(preview_state).AddNextState(match_state);
1503 size_t fail_state =
automata_.template NewState<StateFail<charT>>();
1510 std::tie(r, std::ignore) =
automata_.Exec(str);
1526 template <
class charT,
class globT = extended_glob<
charT>>
class BasicGlob
1547 template <
class charU,
class globU>
1550 template <
class charU,
class globU>
1553 template <
class charU,
class globU>
1557 template <
class charU,
class globU>
1526 template <
class charT,
class globT = extended_glob<
charT>>
class BasicGlob {
…};
1606 template <
class charU,
class globU>
1609 template <
class charU,
class globU>
1612 template <
class charU,
class globU>
1616 template <
class charU,
class globU>
1623 template <
class charT,
class globT = extended_glob<
charT>>
1626 return glob.Exec(str);
1629 template <
class charT,
class globT = extended_glob<
charT>>
1632 return glob.Exec(str);
1635 template <
class charT,
class globT = extended_glob<
charT>>
1638 bool r =
glob.Exec(str);
1643 template <
class charT,
class globT = extended_glob<
charT>>
1646 bool r =
glob.Exec(str);
1651 template <
class charT,
class globT = extended_glob<
charT>>
#define DECLARE_TYPE_CLASS(type)
Definition Ioss_Glob.h:800
#define GLOB_AST_NODE_LIST(V)
Definition Ioss_Glob.h:784
#define DECLARE_VIRTUAL_FUNC(type)
Definition Ioss_Glob.h:844
Definition Ioss_Glob.h:940
AnyNode()
Definition Ioss_Glob.h:942
void Accept(AstVisitor< charT > *visitor) override
Definition Ioss_Glob.h:944
Definition Ioss_Glob.h:1231
size_t current_state_
Definition Ioss_Glob.h:1407
void ExecStar(AstNode< charT > *, Automata< charT > &automata)
Definition Ioss_Glob.h:1290
std::vector< std::unique_ptr< SetItem< charT > > > ProcessSetItems(AstNode< charT > *node)
Definition Ioss_Glob.h:1312
int preview_state_
Definition Ioss_Glob.h:1406
void ExecConcat(AstNode< charT > *node, Automata< charT > &automata)
Definition Ioss_Glob.h:1249
void ExecAny(AstNode< charT > *, Automata< charT > &automata)
Definition Ioss_Glob.h:1285
void ExecBasicGlob(AstNode< charT > *node, Automata< charT > &automata)
Definition Ioss_Glob.h:1259
void NewState(Automata< charT > &automata, Args &&...args)
Definition Ioss_Glob.h:1397
std::vector< std::unique_ptr< Automata< charT > > > ExecUnion(AstNode< charT > *node)
Definition Ioss_Glob.h:1374
void ExecNegativeSet(AstNode< charT > *node, Automata< charT > &automata)
Definition Ioss_Glob.h:1304
void GenAutomata(AstNode< charT > *root_node, Automata< charT > &automata)
Definition Ioss_Glob.h:1235
void ExecChar(AstNode< charT > *node, Automata< charT > &automata)
Definition Ioss_Glob.h:1278
void ExecPositiveSet(AstNode< charT > *node, Automata< charT > &automata)
Definition Ioss_Glob.h:1296
void ExecGroup(AstNode< charT > *node, Automata< charT > &automata)
Definition Ioss_Glob.h:1343
std::unique_ptr< SetItem< charT > > ProcessSetItem(AstNode< charT > *node)
Definition Ioss_Glob.h:1324
Definition Ioss_Glob.h:806
Type
Definition Ioss_Glob.h:808
@ RANGE
Definition Ioss_Glob.h:810
@ CHAR
Definition Ioss_Glob.h:809
@ GLOB
Definition Ioss_Glob.h:821
@ POS_SET
Definition Ioss_Glob.h:813
@ CONCAT_GLOB
Definition Ioss_Glob.h:819
@ SET_ITEMS
Definition Ioss_Glob.h:812
@ NEG_SET
Definition Ioss_Glob.h:814
@ SET_ITEM
Definition Ioss_Glob.h:811
@ GROUP
Definition Ioss_Glob.h:818
@ STAR
Definition Ioss_Glob.h:816
@ SET
Definition Ioss_Glob.h:815
@ ANY
Definition Ioss_Glob.h:817
@ UNION
Definition Ioss_Glob.h:820
AstNode(Type type)
Definition Ioss_Glob.h:831
Type type_
Definition Ioss_Glob.h:834
virtual ~AstNode()=default
Type GetType() const
Definition Ioss_Glob.h:826
virtual void Accept(AstVisitor< charT > *visitor)=0
Definition Ioss_Glob.h:840
virtual ~AstVisitor()=default
Definition Ioss_Glob.h:117
Automata< charT > & SetMatchState(size_t state_pos)
Definition Ioss_Glob.h:154
size_t match_state_
Definition Ioss_Glob.h:228
std::vector< String< charT > > GetMatchedStrings() const
Definition Ioss_Glob.h:169
Automata< charT > & operator=(Automata< charT > &&automata)
Definition Ioss_Glob.h:132
const State< charT > & GetState(size_t pos) const
Definition Ioss_Glob.h:142
Automata(const Automata< charT > &)=delete
size_t fail_state_
Definition Ioss_Glob.h:192
void ResetStates()
Definition Ioss_Glob.h:220
size_t NewState(Args &&...args)
Definition Ioss_Glob.h:183
size_t FailState() const
Definition Ioss_Glob.h:146
std::tuple< bool, size_t > Exec(const String< charT > &str, bool comp_end=true)
Definition Ioss_Glob.h:162
Automata< charT > & operator=(const Automata< charT > &automata)=delete
std::tuple< bool, size_t > ExecAux(const String< charT > &str, bool comp_end=true) const
Definition Ioss_Glob.h:195
Automata(Automata< charT > &&automata)
Definition Ioss_Glob.h:125
size_t GetNumStates() const
Definition Ioss_Glob.h:160
std::vector< std::unique_ptr< State< charT > > > states_
Definition Ioss_Glob.h:227
Automata< charT > & SetFailState(size_t state_pos)
Definition Ioss_Glob.h:148
size_t start_state_
Definition Ioss_Glob.h:230
State< charT > & GetState(size_t pos)
Definition Ioss_Glob.h:144
Definition Ioss_Glob.h:1527
const Automata< charT > & GetAutomata() const
Definition Ioss_Glob.h:1542
BasicGlob(BasicGlob &&glob)
Definition Ioss_Glob.h:1534
globT glob_
Definition Ioss_Glob.h:1561
BasicGlob(const String< charT > &pattern)
Definition Ioss_Glob.h:1529
BasicGlob & operator=(BasicGlob &)=delete
friend bool glob_match(const String< charU > &str, BasicGlob< charU, globU > &glob)
friend bool glob_match(const String< charU > &str, MatchResults< charU > &res, BasicGlob< charU, globU > &glob)
friend bool glob_match(const charU *str, MatchResults< charU > &res, BasicGlob< charU, globU > &glob)
BasicGlob(const BasicGlob &)=delete
friend bool glob_match(const charU *str, BasicGlob< charU, globU > &glob)
bool Exec(const String< charT > &str)
Definition Ioss_Glob.h:1545
BasicGlob & operator=(BasicGlob &&glob)
Definition Ioss_Glob.h:1536
Definition Ioss_Glob.h:851
CharNode(charT c)
Definition Ioss_Glob.h:853
char GetValue() const
Definition Ioss_Glob.h:857
charT c_
Definition Ioss_Glob.h:860
void Accept(AstVisitor< charT > *visitor) override
Definition Ioss_Glob.h:855
Definition Ioss_Glob.h:970
ConcatNode(std::vector< AstNodePtr< charT > > &&basic_glob)
Definition Ioss_Glob.h:972
std::vector< AstNodePtr< charT > > basic_glob_
Definition Ioss_Glob.h:982
std::vector< AstNodePtr< charT > > & GetBasicGlobs()
Definition Ioss_Glob.h:979
void Accept(AstVisitor< charT > *visitor) override
Definition Ioss_Glob.h:977
Definition Ioss_Glob.h:25
std::string msg_
Definition Ioss_Glob.h:33
Error(std::string msg)
Definition Ioss_Glob.h:27
const char * what() const noexcept override
Definition Ioss_Glob.h:30
Definition Ioss_Glob.h:1411
Automata< charT > automata_
Definition Ioss_Glob.h:1445
ExtendedGlob & operator=(ExtendedGlob &)=delete
bool Exec(const String< charT > &str)
Definition Ioss_Glob.h:1435
ExtendedGlob(const ExtendedGlob &)=delete
const Automata< charT > & GetAutomata() const
Definition Ioss_Glob.h:1442
ExtendedGlob & operator=(ExtendedGlob &&glob)
Definition Ioss_Glob.h:1429
ExtendedGlob(const String< charT > &pattern)
Definition Ioss_Glob.h:1413
ExtendedGlob(ExtendedGlob &&glob)
Definition Ioss_Glob.h:1427
Definition Ioss_Glob.h:1002
AstNodePtr< charT > glob_
Definition Ioss_Glob.h:1014
GlobNode(AstNodePtr< charT > &&glob)
Definition Ioss_Glob.h:1004
void Accept(AstVisitor< charT > *visitor) override
Definition Ioss_Glob.h:1009
AstNode< charT > * GetConcat()
Definition Ioss_Glob.h:1011
Definition Ioss_Glob.h:948
AstNodePtr< charT > glob_
Definition Ioss_Glob.h:965
GroupType
Definition Ioss_Glob.h:950
@ NEG
Definition Ioss_Glob.h:950
@ PLUS
Definition Ioss_Glob.h:950
@ STAR
Definition Ioss_Glob.h:950
@ ANY
Definition Ioss_Glob.h:950
@ BASIC
Definition Ioss_Glob.h:950
@ AT
Definition Ioss_Glob.h:950
GroupType group_type_
Definition Ioss_Glob.h:966
void Accept(AstVisitor< charT > *visitor) override
Definition Ioss_Glob.h:958
GroupType GetGroupType() const
Definition Ioss_Glob.h:962
AstNode< charT > * GetGlob()
Definition Ioss_Glob.h:960
GroupNode(GroupType group_type, AstNodePtr< charT > &&glob)
Definition Ioss_Glob.h:952
Definition Ioss_Glob.h:629
std::vector< Token< charT > > Scanner()
Definition Ioss_Glob.h:635
String< charT > str_
Definition Ioss_Glob.h:779
charT c_
Definition Ioss_Glob.h:781
void Advance()
Definition Ioss_Glob.h:769
static const char kEndOfInput
Definition Ioss_Glob.h:631
Token< charT > Select(TokenKind k)
Definition Ioss_Glob.h:765
Token< charT > Select(TokenKind k, charT value)
Definition Ioss_Glob.h:767
Lexer(const String< charT > &str)
Definition Ioss_Glob.h:633
size_t pos_
Definition Ioss_Glob.h:780
Definition Ioss_Glob.h:1565
bool empty() const
Definition Ioss_Glob.h:1589
MatchResults(const MatchResults &m)
Definition Ioss_Glob.h:1571
String< charT > & operator[](size_t n) const
Definition Ioss_Glob.h:1601
friend bool glob_match(const String< charU > &str, BasicGlob< charU, globU > &glob)
std::vector< String< char > > results_
Definition Ioss_Glob.h:1620
friend bool glob_match(const String< charU > &str, MatchResults< charU > &res, BasicGlob< charU, globU > &glob)
const_iterator cbegin() const noexcept
Definition Ioss_Glob.h:1597
const_iterator begin() const noexcept
Definition Ioss_Glob.h:1593
MatchResults(MatchResults &&m)
Definition Ioss_Glob.h:1573
void SetResults(std::vector< String< charT > > &&results)
Definition Ioss_Glob.h:1604
const_iterator end() const noexcept
Definition Ioss_Glob.h:1595
friend bool glob_match(const charU *str, MatchResults< charU > &res, BasicGlob< charU, globU > &glob)
MatchResults & operator=(MatchResults &&m)
Definition Ioss_Glob.h:1582
MatchResults & operator=(const MatchResults &m)
Definition Ioss_Glob.h:1575
typename std::vector< String< charT > >::const_iterator const_iterator
Definition Ioss_Glob.h:1567
size_t size() const
Definition Ioss_Glob.h:1591
friend bool glob_match(const charU *str, BasicGlob< charU, globU > &glob)
const_iterator cend() const noexcept
Definition Ioss_Glob.h:1599
Definition Ioss_Glob.h:916
AstNode< charT > * GetSet()
Definition Ioss_Glob.h:925
NegativeSetNode(AstNodePtr< charT > &&set)
Definition Ioss_Glob.h:918
void Accept(AstVisitor< charT > *visitor) override
Definition Ioss_Glob.h:923
AstNodePtr< charT > set_
Definition Ioss_Glob.h:928
Definition Ioss_Glob.h:1018
AstNodePtr< charT > ParserRange()
Definition Ioss_Glob.h:1038
AstNodePtr< charT > ParserSet()
Definition Ioss_Glob.h:1073
AstNodePtr< charT > ParserConcat()
Definition Ioss_Glob.h:1143
AstNodePtr< charT > ParserChar()
Definition Ioss_Glob.h:1027
AstNodePtr< charT > ParserBasicGlob()
Definition Ioss_Glob.h:1086
AstNodePtr< charT > ParserSetItem()
Definition Ioss_Glob.h:1051
AstNodePtr< charT > ParserSetItems()
Definition Ioss_Glob.h:1060
Token< charT > & NextToken()
Definition Ioss_Glob.h:1203
Token< charT > & GetToken()
Definition Ioss_Glob.h:1192
size_t pos_
Definition Ioss_Glob.h:1227
Parser(std::vector< Token< charT > > &&tok_vec)
Definition Ioss_Glob.h:1022
AstNodePtr< charT > GenAst()
Definition Ioss_Glob.h:1024
AstNodePtr< charT > ParserGroup()
Definition Ioss_Glob.h:1113
const Token< charT > & GetToken() const
Definition Ioss_Glob.h:1190
AstNodePtr< charT > ParserGlob()
Definition Ioss_Glob.h:1179
std::vector< Token< charT > > tok_vec_
Definition Ioss_Glob.h:1226
const Token< charT > & PeekAhead() const
Definition Ioss_Glob.h:1194
bool Advance()
Definition Ioss_Glob.h:1214
AstNodePtr< charT > ParserUnion()
Definition Ioss_Glob.h:1166
size_t Size() const noexcept
Definition Ioss_Glob.h:1224
Definition Ioss_Glob.h:900
PositiveSetNode(AstNodePtr< charT > &&set)
Definition Ioss_Glob.h:902
AstNode< charT > * GetSet()
Definition Ioss_Glob.h:909
void Accept(AstVisitor< charT > *visitor) override
Definition Ioss_Glob.h:907
AstNodePtr< charT > set_
Definition Ioss_Glob.h:912
Definition Ioss_Glob.h:864
AstNodePtr< charT > end_
Definition Ioss_Glob.h:880
AstNodePtr< charT > start_
Definition Ioss_Glob.h:879
RangeNode(AstNodePtr< charT > &&start, AstNodePtr< charT > &&end)
Definition Ioss_Glob.h:866
AstNode< charT > * GetEnd() const
Definition Ioss_Glob.h:876
AstNode< charT > * GetStart() const
Definition Ioss_Glob.h:874
void Accept(AstVisitor< charT > *visitor) override
Definition Ioss_Glob.h:872
Definition Ioss_Glob.h:327
SetItemChar(charT c)
Definition Ioss_Glob.h:329
bool Check(charT c) const override
Definition Ioss_Glob.h:331
charT c_
Definition Ioss_Glob.h:334
Definition Ioss_Glob.h:338
charT end_
Definition Ioss_Glob.h:349
charT start_
Definition Ioss_Glob.h:348
SetItemRange(charT start, charT end)
Definition Ioss_Glob.h:340
bool Check(charT c) const override
Definition Ioss_Glob.h:345
Definition Ioss_Glob.h:318
virtual ~SetItem()=default
virtual bool Check(charT c) const =0
Definition Ioss_Glob.h:884
std::vector< AstNodePtr< charT > > & GetItems()
Definition Ioss_Glob.h:893
void Accept(AstVisitor< charT > *visitor) override
Definition Ioss_Glob.h:891
SetItemsNode(std::vector< AstNodePtr< charT > > &&items)
Definition Ioss_Glob.h:886
std::vector< AstNodePtr< charT > > items_
Definition Ioss_Glob.h:896
Definition Ioss_Glob.h:1449
SimpleGlob(const String< charT > &pattern)
Definition Ioss_Glob.h:1451
SimpleGlob(const SimpleGlob &)=delete
SimpleGlob(SimpleGlob &&glob)
Definition Ioss_Glob.h:1456
const Automata< charT > & GetAutomata() const
Definition Ioss_Glob.h:1514
SimpleGlob & operator=(SimpleGlob &&glob)
Definition Ioss_Glob.h:1458
SimpleGlob & operator=(SimpleGlob &)=delete
void Parser(const String< charT > &pattern)
Definition Ioss_Glob.h:1464
Automata< charT > automata_
Definition Ioss_Glob.h:1517
bool Exec(const String< charT > &str) const
Definition Ioss_Glob.h:1507
Definition Ioss_Glob.h:932
StarNode()
Definition Ioss_Glob.h:934
void Accept(AstVisitor< charT > *visitor) override
Definition Ioss_Glob.h:936
std::tuple< size_t, size_t > Next(const String< charT > &str, size_t pos) override
Definition Ioss_Glob.h:271
StateAny(Automata< charT > &states)
Definition Ioss_Glob.h:263
bool Check(const String< charT > &, size_t) override
Definition Ioss_Glob.h:265
bool Check(const String< charT > &str, size_t pos) override
Definition Ioss_Glob.h:241
StateChar(Automata< charT > &states, charT c)
Definition Ioss_Glob.h:239
charT c_
Definition Ioss_Glob.h:254
std::tuple< size_t, size_t > Next(const String< charT > &str, size_t pos) override
Definition Ioss_Glob.h:243
bool Check(const String< charT > &, size_t) override
Definition Ioss_Glob.h:95
StateFail(Automata< charT > &states)
Definition Ioss_Glob.h:93
std::tuple< size_t, size_t > Next(const String< charT > &, size_t pos) override
Definition Ioss_Glob.h:97
std::tuple< bool, size_t > BasicCheck(const String< charT > &str, size_t pos)
Definition Ioss_Glob.h:417
std::tuple< size_t, size_t > NextBasic(const String< charT > &str, size_t pos)
Definition Ioss_Glob.h:494
bool match_one_
Definition Ioss_Glob.h:571
std::tuple< size_t, size_t > NextAny(const String< charT > &str, size_t pos)
Definition Ioss_Glob.h:507
std::vector< std::unique_ptr< Automata< charT > > > automatas_
Definition Ioss_Glob.h:570
StateGroup(Automata< charT > &states, Type type, std::vector< std::unique_ptr< Automata< charT > > > &&automatas)
Definition Ioss_Glob.h:409
std::tuple< size_t, size_t > Next(const String< charT > &str, size_t pos) override
Definition Ioss_Glob.h:452
std::tuple< size_t, size_t > NextStar(const String< charT > &str, size_t pos)
Definition Ioss_Glob.h:520
Type
Definition Ioss_Glob.h:407
@ NEG
Definition Ioss_Glob.h:407
@ PLUS
Definition Ioss_Glob.h:407
@ STAR
Definition Ioss_Glob.h:407
@ ANY
Definition Ioss_Glob.h:407
@ BASIC
Definition Ioss_Glob.h:407
@ AT
Definition Ioss_Glob.h:407
std::tuple< size_t, size_t > NextNeg(const String< charT > &str, size_t pos)
Definition Ioss_Glob.h:481
void ResetState() override
Definition Ioss_Glob.h:415
bool Check(const String< charT > &str, size_t pos) override
Definition Ioss_Glob.h:435
Type type_
Definition Ioss_Glob.h:569
std::tuple< size_t, size_t > NextPlus(const String< charT > &str, size_t pos)
Definition Ioss_Glob.h:537
StateMatch(Automata< charT > &states)
Definition Ioss_Glob.h:106
bool Check(const String< charT > &, size_t) override
Definition Ioss_Glob.h:108
std::tuple< size_t, size_t > Next(const String< charT > &, size_t pos) override
Definition Ioss_Glob.h:110
bool Check(const String< charT > &str, size_t pos) override
Definition Ioss_Glob.h:377
bool neg_
Definition Ioss_Glob.h:398
std::tuple< size_t, size_t > Next(const String< charT > &str, size_t pos) override
Definition Ioss_Glob.h:386
StateSet(Automata< charT > &states, std::vector< std::unique_ptr< SetItem< charT > > > items, bool neg=false)
Definition Ioss_Glob.h:358
bool SetCheck(const String< charT > &str, size_t pos) const
Definition Ioss_Glob.h:364
std::vector< std::unique_ptr< SetItem< charT > > > items_
Definition Ioss_Glob.h:397
std::tuple< size_t, size_t > Next(const String< charT > &str, size_t pos) override
Definition Ioss_Glob.h:293
StateStar(Automata< charT > &states)
Definition Ioss_Glob.h:285
bool Check(const String< charT > &, size_t) override
Definition Ioss_Glob.h:287
Definition Ioss_Glob.h:56
StateType type_
Definition Ioss_Glob.h:84
State(StateType type, Automata< charT > &states)
Definition Ioss_Glob.h:58
const String< charT > & MatchedStr()
Definition Ioss_Glob.h:74
virtual std::tuple< size_t, size_t > Next(const String< charT > &str, size_t pos)=0
virtual void ResetState()
Definition Ioss_Glob.h:76
const std::vector< size_t > & GetNextStates() const
Definition Ioss_Glob.h:72
void AddNextState(size_t state_pos)
Definition Ioss_Glob.h:70
std::vector< size_t > next_states_
Definition Ioss_Glob.h:86
void SetMatchedStr(const String< charT > &str)
Definition Ioss_Glob.h:79
virtual bool Check(const String< charT > &str, size_t pos)=0
String< charT > matched_str_
Definition Ioss_Glob.h:87
Automata< charT > & states_
Definition Ioss_Glob.h:85
Automata< charT > & GetAutomata()
Definition Ioss_Glob.h:68
StateType Type() const
Definition Ioss_Glob.h:66
void SetMatchedStr(charT c)
Definition Ioss_Glob.h:81
Definition Ioss_Glob.h:597
friend std::ostream & operator<<(std::ostream &stream, const Token< charU > &token)
charT Value() const
Definition Ioss_Glob.h:603
Token(TokenKind kind)
Definition Ioss_Glob.h:599
bool operator!=(TokenKind kind) const
Definition Ioss_Glob.h:611
charT value_
Definition Ioss_Glob.h:618
Token(TokenKind kind, charT value)
Definition Ioss_Glob.h:600
bool operator==(TokenKind kind) const
Definition Ioss_Glob.h:607
TokenKind Kind() const
Definition Ioss_Glob.h:601
bool operator!=(TokenKind kind)
Definition Ioss_Glob.h:609
bool operator==(TokenKind kind)
Definition Ioss_Glob.h:605
TokenKind kind_
Definition Ioss_Glob.h:617
Definition Ioss_Glob.h:986
UnionNode(std::vector< AstNodePtr< charT > > &&items)
Definition Ioss_Glob.h:988
void Accept(AstVisitor< charT > *visitor) override
Definition Ioss_Glob.h:993
std::vector< AstNodePtr< charT > > items_
Definition Ioss_Glob.h:998
std::vector< AstNodePtr< charT > > & GetItems()
Definition Ioss_Glob.h:995
Definition Ioss_Glob.h:18
std::ostream & operator<<(std::ostream &stream, const Token< charT > &token)
Definition Ioss_Glob.h:622
std::basic_string< charT > String
Definition Ioss_Glob.h:20
ExtendedGlob< charT > extended_glob
Definition Ioss_Glob.h:1520
std::unique_ptr< AstNode< charT > > AstNodePtr
Definition Ioss_Glob.h:837
static const char * token_name_str[]
Definition Ioss_Glob.h:586
basic_glob< wchar_t, extended_glob< wchar_t > > wglob
Definition Ioss_Glob.h:1656
MatchResults< char > cmatch
Definition Ioss_Glob.h:1658
StateType
Definition Ioss_Glob.h:36
@ CHAR
Definition Ioss_Glob.h:39
@ QUESTION
Definition Ioss_Glob.h:40
@ MULT
Definition Ioss_Glob.h:41
@ MATCH
Definition Ioss_Glob.h:37
@ GROUP
Definition Ioss_Glob.h:43
@ SET
Definition Ioss_Glob.h:42
@ FAIL
Definition Ioss_Glob.h:38
@ UNION
Definition Ioss_Glob.h:44
basic_glob< char, extended_glob< char > > glob
Definition Ioss_Glob.h:1654
BasicGlob< charT, globT > basic_glob
Definition Ioss_Glob.h:1652
SimpleGlob< charT > no_extended_glob
Definition Ioss_Glob.h:1522
TokenKind
Definition Ioss_Glob.h:575
@ CHAR
Definition Ioss_Glob.h:577
@ UNKNOWN
Definition Ioss_Glob.h:576
@ TOKEN
Definition Ioss_Glob.h:578
bool glob_match(const String< charT > &str, BasicGlob< charT, globT > &glob)
Definition Ioss_Glob.h:1624
T exchange(T &obj, U &&new_value)
Definition Ioss_Glob.h:48
MatchResults< wchar_t > wmatch
Definition Ioss_Glob.h:1660