1 /////////////////////////////////////////////////////////////////////////////// 2 // count.hpp 3 // 4 // Copyright 2005 Eric Niebler. Distributed under the Boost 5 // Software License, Version 1.0. (See accompanying file 6 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 8 #ifndef BOOST_ACCUMULATORS_STATISTICS_COUNT_HPP_EAN_28_10_2005 9 #define BOOST_ACCUMULATORS_STATISTICS_COUNT_HPP_EAN_28_10_2005 10 11 #include <boost/mpl/always.hpp> 12 #include <boost/accumulators/framework/accumulator_base.hpp> 13 #include <boost/accumulators/framework/extractor.hpp> 14 #include <boost/accumulators/framework/depends_on.hpp> 15 #include <boost/accumulators/statistics_fwd.hpp> 16 17 namespace boost { namespace accumulators 18 { 19 20 namespace impl 21 { 22 23 /////////////////////////////////////////////////////////////////////////////// 24 // count_impl 25 struct count_impl 26 : accumulator_base 27 { 28 // for boost::result_of 29 typedef std::size_t result_type; 30 count_implboost::accumulators::impl::count_impl31 count_impl(dont_care) 32 : cnt(0) 33 { 34 } 35 operator ()boost::accumulators::impl::count_impl36 void operator ()(dont_care) 37 { 38 ++this->cnt; 39 } 40 resultboost::accumulators::impl::count_impl41 result_type result(dont_care) const 42 { 43 return this->cnt; 44 } 45 46 // make this accumulator serializeable 47 template<class Archive> serializeboost::accumulators::impl::count_impl48 void serialize(Archive & ar, const unsigned int file_version) 49 { 50 ar & cnt; 51 } 52 53 private: 54 std::size_t cnt; 55 }; 56 57 } // namespace impl 58 59 /////////////////////////////////////////////////////////////////////////////// 60 // tag::count 61 // 62 namespace tag 63 { 64 struct count 65 : depends_on<> 66 { 67 /// INTERNAL ONLY 68 /// 69 typedef mpl::always<accumulators::impl::count_impl> impl; 70 }; 71 } 72 73 /////////////////////////////////////////////////////////////////////////////// 74 // extract::count 75 // 76 namespace extract 77 { 78 extractor<tag::count> const count = {}; 79 80 BOOST_ACCUMULATORS_IGNORE_GLOBAL(count) 81 } 82 83 using extract::count; 84 85 }} // namespace boost::accumulators 86 87 #endif 88