#ifndef PYTHONIC_NUMPY_COUNT_NONZERO_HPP #define PYTHONIC_NUMPY_COUNT_NONZERO_HPP #include "pythonic/include/numpy/count_nonzero.hpp" #include "pythonic/utils/functor.hpp" #include "pythonic/types/ndarray.hpp" PYTHONIC_NS_BEGIN namespace numpy { template auto _count_nonzero(E begin, E end, long &count, utils::int_<1>) -> typename std::enable_if::value>::type { for (; begin != end; ++begin) // Behaviour defined in the standard count += *begin; } template auto _count_nonzero(E begin, E end, long &count, utils::int_<1>) -> typename std::enable_if::value>::type { for (; begin != end; ++begin) if (*begin != static_cast(0)) ++count; } template void _count_nonzero(E begin, E end, long &count, utils::int_) { for (; begin != end; ++begin) _count_nonzero((*begin).begin(), (*begin).end(), count, utils::int_()); } template long count_nonzero(E const &array) { long count(0); _count_nonzero(array.begin(), array.end(), count, utils::int_()); return count; } } PYTHONIC_NS_END #endif