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_more,
|
||||||
const typename std::iterator_traits<Iterator>::value_type& zero_or_one)
|
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 d_itr = data_begin;
|
||||||
Iterator p_itr = pattern_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;
|
while ((p_itr != pattern_end) && (*p_itr == zero_or_more || *p_itr == zero_or_one))
|
||||||
}
|
|
||||||
|
|
||||||
++p_itr;
|
|
||||||
++d_itr;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (data_end != d_itr)
|
|
||||||
{
|
|
||||||
if (zero_or_more == (*p_itr))
|
|
||||||
{
|
|
||||||
if (pattern_end == (++p_itr))
|
|
||||||
{
|
{
|
||||||
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;
|
++d_itr;
|
||||||
}
|
}
|
||||||
else
|
else if ((*p_itr == zero_or_one) || Compare::cmp(*p_itr, *d_itr))
|
||||||
{
|
{
|
||||||
p_itr = m_itr;
|
++d_itr;
|
||||||
d_itr = c_itr++;
|
++p_itr;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((p_itr != pattern_end) && (zero_or_more == (*p_itr))) { ++p_itr; }
|
return (d_itr == data_end) && (p_itr == pattern_end);
|
||||||
|
|
||||||
return (p_itr == pattern_end);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool wc_match(const std::string& wild_card,
|
inline bool wc_match(const std::string& wild_card,
|
||||||
|
|
Loading…
Reference in New Issue