C++ Mathematical Expression Library (ExprTk) http://www.partow.net/programming/exprtk/index.html

This commit is contained in:
Arash Partow 2018-04-15 06:51:52 +10:00
parent 55759bb04c
commit 8d21318244
1 changed files with 20 additions and 35 deletions

View File

@ -586,55 +586,40 @@ namespace exprtk
const typename std::iterator_traits<Iterator>::value_type& zero_or_more,
const typename std::iterator_traits<Iterator>::value_type& zero_or_one)
{
if (0 == std::distance(data_begin,data_end))
{
return false;
}
Iterator d_itr = data_begin;
Iterator p_itr = pattern_begin;
Iterator c_itr = data_begin;
Iterator m_itr = data_begin;
while ((data_end != d_itr) && (zero_or_more != (*p_itr)))
while ((p_itr != pattern_end) && (d_itr != data_end))
{
if ((!Compare::cmp((*p_itr),(*d_itr))) && (zero_or_one != (*p_itr)))
if (zero_or_more == *p_itr)
{
return false;
}
++p_itr;
++d_itr;
}
while (data_end != d_itr)
{
if (zero_or_more == (*p_itr))
{
if (pattern_end == (++p_itr))
while ((p_itr != pattern_end) && (*p_itr == zero_or_more || *p_itr == zero_or_one))
{
return true;
++p_itr;
}
if (p_itr == pattern_end)
return true;
const typename std::iterator_traits<Iterator>::value_type c = *(p_itr++);
while ((d_itr != data_end) && !Compare::cmp(c,*d_itr))
{
++d_itr;
}
m_itr = p_itr;
c_itr = d_itr;
++c_itr;
}
else if ((Compare::cmp((*p_itr),(*d_itr))) || (zero_or_one == (*p_itr)))
{
++p_itr;
++d_itr;
}
else
else if ((*p_itr == zero_or_one) || Compare::cmp(*p_itr, *d_itr))
{
p_itr = m_itr;
d_itr = c_itr++;
++d_itr;
++p_itr;
}
else
return false;
}
while ((p_itr != pattern_end) && (zero_or_more == (*p_itr))) { ++p_itr; }
return (p_itr == pattern_end);
return (d_itr == data_end) && (p_itr == pattern_end);
}
inline bool wc_match(const std::string& wild_card,