blob: 937cabdd45966dabb3009b6970eedd9d368c5c59 [file] [log] [blame]
// boost/chrono/stopwatches/reporters/stopclock.hpp
// Copyright 2011 Vicente J. Botet Escriba
// 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)
// See http://www.boost.org/libs/chrono/stopwatches for documentation.
#ifndef BOOST_CHRONO_STOPWATCHES_REPORTERS_LAPS_STOPCLOCK_HPP
#define BOOST_CHRONO_STOPWATCHES_REPORTERS_LAPS_STOPCLOCK_HPP
#include <boost/chrono/config.hpp>
#if !defined(BOOST_ENABLE_WARNINGS) && !defined(BOOST_CHRONO_ENABLE_WARNINGS)
#if defined __GNUC__
#pragma GCC system_header
#elif defined __SUNPRO_CC
#pragma disable_warn
#elif defined _MSC_VER
#pragma warning(push, 1)
#endif
#endif
#include <boost/chrono/stopwatches/reporters/laps_accumulator_set_stopwatch_default_formatter.hpp>
#include <boost/chrono/stopwatches/reporters/stopwatch_reporter_default_formatter.hpp>
#include <boost/chrono/stopwatches/reporters/stopwatch_reporter.hpp>
#include <boost/chrono/stopwatches/stopwatch_scoped.hpp>
#include <boost/chrono/stopwatches/stopwatch.hpp>
#include <boost/chrono/stopwatches/dont_start.hpp>
#include <boost/chrono/chrono.hpp>
#include <boost/chrono/detail/system.hpp>
#include <boost/cstdint.hpp>
#include <cassert>
namespace boost
{
namespace chrono
{
template<class CharT, typename Clock, typename LapsCollector, class Formatter>
class basic_stopclock: public basic_stopwatch_reporter<CharT, stopwatch<Clock, LapsCollector>, Formatter>
{
public:
typedef basic_stopwatch_reporter<CharT, stopwatch<Clock, LapsCollector>, Formatter> base_type;
typedef Clock clock;
typedef stopwatch<Clock, LapsCollector> stopwatch_type;
typedef Formatter formatter_type;
basic_stopclock()
{
}
#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
explicit basic_stopclock(system::error_code & ec) :
base_type(ec)
{
}
#endif
explicit basic_stopclock(
const dont_start_t& tag
) BOOST_NOEXCEPT :
base_type(tag)
{
}
explicit basic_stopclock(formatter_type const& fmt) :
base_type(fmt)
{
}
explicit basic_stopclock(const typename Formatter::char_type* fmt) :
base_type(fmt)
{
}
explicit basic_stopclock(typename Formatter::string_type const& fmt) :
base_type(fmt)
{
}
typedef stopwatch_runner<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
scoped_run;
typedef stopwatch_stopper<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
scoped_stop;
typedef stopwatch_suspender<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
scoped_suspend;
typedef stopwatch_resumer<basic_stopclock<CharT,Clock, LapsCollector, Formatter> >
scoped_resume;
protected:
basic_stopclock(const basic_stopclock&); // = delete;
basic_stopclock& operator=(const basic_stopclock&); // = delete;
};
template<typename Clock=high_resolution_clock, typename LapsCollector=no_memory<typename Clock::duration>,
class Formatter = typename basic_stopwatch_reporter_default_formatter<char, stopwatch<Clock, LapsCollector> >::type>
class stopclock;
template<class Stopwatch, class Formatter>
struct basic_stopwatch_reporter_default_formatter<char, stopclock<Stopwatch,
Formatter> >
{
typedef Formatter type;
};
template<typename Clock, typename LapsCollector, class Formatter>
class stopclock: public basic_stopclock<char, Clock, LapsCollector, Formatter>
{
typedef basic_stopclock<char, Clock, LapsCollector, Formatter> base_type;
public:
typedef Clock clock;
typedef typename base_type::stopwatch_type stopwatch_type;
typedef Formatter formatter_type;
stopclock()
{
}
#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
explicit stopclock(system::error_code & ec) :
base_type(ec)
{
}
#endif
explicit stopclock(
const dont_start_t& tag
) BOOST_NOEXCEPT :
base_type(tag)
{
}
explicit stopclock(formatter_type const& fmt) :
base_type(fmt)
{
}
explicit stopclock(const typename Formatter::char_type* fmt) :
base_type(fmt)
{
}
explicit stopclock(typename Formatter::string_type const& fmt) :
base_type(fmt)
{
}
typedef stopwatch_runner<stopclock<Clock, LapsCollector, Formatter> >
scoped_run;
typedef stopwatch_stopper<stopclock<Clock, LapsCollector, Formatter> >
scoped_stop;
typedef stopwatch_suspender<stopclock<Clock, LapsCollector, Formatter> >
scoped_suspend;
typedef stopwatch_resumer<stopclock<Clock, LapsCollector, Formatter> >
scoped_resume;
protected:
stopclock(const stopclock&); // = delete;
stopclock& operator=(const stopclock&); // = delete;
};
} // namespace chrono
} // namespace boost
#if !defined(BOOST_ENABLE_WARNINGS) && !defined(BOOST_CHRONO_ENABLE_WARNINGS)
#if defined __SUNPRO_CC
#pragma enable_warn
#elif defined _MSC_VER
#pragma warning(pop)
#endif
#endif
#endif