| 342 | |
| 343 | template< typename InputIterator > |
| 344 | typename traits::enable_if< helpers::decays_to_ctype< typename std::iterator_traits< InputIterator >::value_type >::value, |
| 345 | typename helpers::ctype< typename std::iterator_traits< InputIterator >::value_type >::type >::type |
| 346 | min(InputIterator begin, InputIterator end) { |
| 347 | |
| 348 | typedef typename helpers::ctype< typename std::iterator_traits< InputIterator >::value_type >::type value_type; |
| 349 | typedef typename helpers::rtype< value_type > rtype; |
| 350 | |
| 351 | if (begin != end) { |
| 352 | value_type min = *begin; |
| 353 | |
| 354 | while (begin != end) { |
| 355 | if (!Vector< rtype::RTYPE >::is_na(*begin)) { |
| 356 | min = std::min(min, *begin++); |
| 357 | } else { |
| 358 | return rtype::NA(); |
| 359 | } |
| 360 | } |
| 361 | |
| 362 | return min; |
| 363 | } |
| 364 | |
| 365 | return std::numeric_limits< typename rtype::type >::infinity(); |
| 366 | } |
| 367 | |
| 368 | template< typename InputIterator > |
| 369 | typename traits::enable_if< helpers::decays_to_ctype< typename std::iterator_traits< InputIterator >::value_type >::value, |