/////////////////////////////////////////////////////////////////////////////// | |
// count.hpp | |
// | |
// Copyright 2005 Eric Niebler. Distributed under the Boost | |
// Software License, Version 1.0. (See accompanying file | |
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
#ifndef BOOST_ACCUMULATORS_STATISTICS_COUNT_HPP_EAN_28_10_2005 | |
#define BOOST_ACCUMULATORS_STATISTICS_COUNT_HPP_EAN_28_10_2005 | |
#include <boost/mpl/always.hpp> | |
#include <boost/accumulators/framework/accumulator_base.hpp> | |
#include <boost/accumulators/framework/extractor.hpp> | |
#include <boost/accumulators/framework/depends_on.hpp> | |
#include <boost/accumulators/statistics_fwd.hpp> | |
namespace boost { namespace accumulators | |
{ | |
namespace impl | |
{ | |
/////////////////////////////////////////////////////////////////////////////// | |
// count_impl | |
struct count_impl | |
: accumulator_base | |
{ | |
// for boost::result_of | |
typedef std::size_t result_type; | |
count_impl(dont_care) | |
: cnt(0) | |
{ | |
} | |
void operator ()(dont_care) | |
{ | |
++this->cnt; | |
} | |
result_type result(dont_care) const | |
{ | |
return this->cnt; | |
} | |
private: | |
std::size_t cnt; | |
}; | |
} // namespace impl | |
/////////////////////////////////////////////////////////////////////////////// | |
// tag::count | |
// | |
namespace tag | |
{ | |
struct count | |
: depends_on<> | |
{ | |
/// INTERNAL ONLY | |
/// | |
typedef mpl::always<accumulators::impl::count_impl> impl; | |
}; | |
} | |
/////////////////////////////////////////////////////////////////////////////// | |
// extract::count | |
// | |
namespace extract | |
{ | |
extractor<tag::count> const count = {}; | |
BOOST_ACCUMULATORS_IGNORE_GLOBAL(count) | |
} | |
using extract::count; | |
}} // namespace boost::accumulators | |
#endif |