16678 {
16679 const T* vec = v->vec()->vds().data();
16680 const std::size_t
vec_size = v->vec()->size();
16681
16683
16684 if (
vec_size <=
static_cast<std::size_t
>(
lud.batch_size))
16685 {
16688
16690 {
16691 #define case_stmt(N,fall_through) \
16692 case N : result *= vec[i++]; \
16693 fall_through \
16694
16695 #ifndef exprtk_disable_superscalar_unroll
16702 #endif
16705 }
16706
16707 #undef case_stmt
16708
16709 return result;
16710 }
16711
16713 T(1),
T(1),
T(1),
T(1),
T(1),
T(1),
T(1),
T(1),
16714 T(1),
T(1),
T(1),
T(1),
T(1),
T(1),
T(1),
T(1)
16715 };
16716
16717 const T* upper_bound = vec +
lud.upper_bound;
16718
16719 while (vec < upper_bound)
16720 {
16721 #define exprtk_loop(N) \
16722 r[N] *= vec[N]; \
16723
16726 #ifndef exprtk_disable_superscalar_unroll
16733 #endif
16734
16735 vec +=
lud.batch_size;
16736 }
16737
16739
16740 switch (
lud.remainder)
16741 {
16742 #define case_stmt(N,fall_through) \
16743 case N : r[0] *= vec[i++]; \
16744 fall_through \
16745
16746 #ifndef exprtk_disable_superscalar_unroll
16753 #endif
16756 }
16757
16758 #undef exprtk_loop
16759 #undef case_stmt
16760
16761 return (r[ 0] * r[ 1] * r[ 2] * r[ 3])
16762 #ifndef exprtk_disable_superscalar_unroll
16763 * (r[ 4] * r[ 5] * r[ 6] * r[ 7])
16764 * (r[ 8] * r[ 9] * r[10] * r[11])
16765 * (r[12] * r[13] * r[14] * r[15])
16767 ;
16768 }
#define exprtk_fallthrough
bool match_impl(const Iterator pattern_begin, const Iterator pattern_end, const Iterator data_begin, const Iterator data_end, const typename std::iterator_traits< Iterator >::value_type &zero_or_more, const typename std::iterator_traits< Iterator >::value_type &exactly_one)