| 204 | |
| 205 | template< typename InputIterator > |
| 206 | typename traits::enable_if< helpers::decays_to_ctype< typename std::iterator_traits< InputIterator >::value_type >::value, |
| 207 | typename helpers::ctype< typename std::iterator_traits< InputIterator >::value_type >::type >::type |
| 208 | sum(InputIterator begin, InputIterator end) { |
| 209 | |
| 210 | typedef typename helpers::ctype< typename std::iterator_traits< InputIterator >::value_type >::type value_type; |
| 211 | typedef typename helpers::rtype< value_type > rtype; |
| 212 | |
| 213 | if (begin != end) { |
| 214 | value_type start = rtype::ZERO(); |
| 215 | |
| 216 | while (begin != end) { |
| 217 | if (!Vector< rtype::RTYPE >::is_na(*begin)) { |
| 218 | start += *begin++; |
| 219 | } else { |
| 220 | return rtype::NA(); |
| 221 | } |
| 222 | } |
| 223 | |
| 224 | return start; |
| 225 | } |
| 226 | |
| 227 | return rtype::ZERO(); |
| 228 | } |
| 229 | |
| 230 | template< typename InputIterator > |
| 231 | typename traits::enable_if< helpers::decays_to_ctype< typename std::iterator_traits< InputIterator >::value_type >::value, |