C++ Mathematical Expression Library (ExprTk) http://www.partow.net/programming/exprtk/index.html
This commit is contained in:
parent
55759bb04c
commit
8d21318244
55
exprtk.hpp
55
exprtk.hpp
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue