Skip to content

Commit 5b58038

Browse files
committed
Updates to ExprTk
1 parent f838009 commit 5b58038

File tree

1 file changed

+17
-32
lines changed

1 file changed

+17
-32
lines changed

exprtk/exprtk.hpp

Lines changed: 17 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -586,55 +586,40 @@ namespace exprtk
586586
const typename std::iterator_traits<Iterator>::value_type& zero_or_more,
587587
const typename std::iterator_traits<Iterator>::value_type& zero_or_one)
588588
{
589-
if (0 == std::distance(data_begin,data_end))
590-
{
591-
return false;
592-
}
593-
594589
Iterator d_itr = data_begin;
595590
Iterator p_itr = pattern_begin;
596-
Iterator c_itr = data_begin;
597-
Iterator m_itr = data_begin;
598591

599-
while ((data_end != d_itr) && (zero_or_more != (*p_itr)))
592+
while ((p_itr != pattern_end) && (d_itr != data_end))
600593
{
601-
if ((!Compare::cmp((*p_itr),(*d_itr))) && (zero_or_one != (*p_itr)))
594+
if (zero_or_more == *p_itr)
602595
{
603-
return false;
604-
}
596+
while ((p_itr != pattern_end) && (*p_itr == zero_or_more || *p_itr == zero_or_one))
597+
{
598+
++p_itr;
599+
}
605600

606-
++p_itr;
607-
++d_itr;
608-
}
601+
if (p_itr == pattern_end)
602+
return true;
609603

610-
while (data_end != d_itr)
611-
{
612-
if (zero_or_more == (*p_itr))
613-
{
614-
if (pattern_end == (++p_itr))
604+
const typename std::iterator_traits<Iterator>::value_type c = *(p_itr++);
605+
606+
while ((d_itr != data_end) && !Compare::cmp(c,*d_itr))
615607
{
616-
return true;
608+
++d_itr;
617609
}
618610

619-
m_itr = p_itr;
620-
c_itr = d_itr;
621-
++c_itr;
611+
++d_itr;
622612
}
623-
else if ((Compare::cmp((*p_itr),(*d_itr))) || (zero_or_one == (*p_itr)))
613+
else if ((*p_itr == zero_or_one) || Compare::cmp(*p_itr, *d_itr))
624614
{
625-
++p_itr;
626615
++d_itr;
616+
++p_itr;
627617
}
628618
else
629-
{
630-
p_itr = m_itr;
631-
d_itr = c_itr++;
632-
}
619+
return false;
633620
}
634621

635-
while ((p_itr != pattern_end) && (zero_or_more == (*p_itr))) { ++p_itr; }
636-
637-
return (p_itr == pattern_end);
622+
return (d_itr == data_end) && (p_itr == pattern_end);
638623
}
639624

640625
inline bool wc_match(const std::string& wild_card,

0 commit comments

Comments
 (0)