diff options
Diffstat (limited to 'boost/log/attributes/clock.hpp')
-rw-r--r-- | boost/log/attributes/clock.hpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/boost/log/attributes/clock.hpp b/boost/log/attributes/clock.hpp new file mode 100644 index 0000000000..c28da5a877 --- /dev/null +++ b/boost/log/attributes/clock.hpp @@ -0,0 +1,95 @@ +/* + * Copyright Andrey Semashev 2007 - 2014. + * 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) + */ +/*! + * \file clock.hpp + * \author Andrey Semashev + * \date 01.12.2007 + * + * The header contains wall clock attribute implementation and typedefs. + */ + +#ifndef BOOST_LOG_ATTRIBUTES_CLOCK_HPP_INCLUDED_ +#define BOOST_LOG_ATTRIBUTES_CLOCK_HPP_INCLUDED_ + +#include <boost/log/detail/config.hpp> +#include <boost/log/attributes/attribute.hpp> +#include <boost/log/attributes/attribute_value.hpp> +#include <boost/log/attributes/attribute_cast.hpp> +#include <boost/log/attributes/attribute_value_impl.hpp> +#include <boost/log/attributes/time_traits.hpp> +#include <boost/log/detail/header.hpp> + +#ifdef BOOST_HAS_PRAGMA_ONCE +#pragma once +#endif + +namespace boost { + +BOOST_LOG_OPEN_NAMESPACE + +namespace attributes { + +/*! + * \brief A class of an attribute that makes an attribute value of the current date and time + * + * The attribute generates current time stamp as a value. The type of the attribute value + * is determined with time traits passed to the class template as a template parameter. + * The time traits provided by the library use \c boost::posix_time::ptime as the time type. + * + * Time traits also determine the way time is acquired. There are two types of time traits + * provided by the library: \c utc_time_traits and \c local_time_traits. The first returns UTC time, + * the second returns local time. + */ +template< typename TimeTraitsT > +class basic_clock : + public attribute +{ +public: + //! Generated value type + typedef typename TimeTraitsT::time_type value_type; + +protected: + //! Attribute factory implementation + struct BOOST_SYMBOL_VISIBLE impl : + public attribute::impl + { + attribute_value get_value() + { + typedef attribute_value_impl< value_type > result_value; + return attribute_value(new result_value(TimeTraitsT::get_clock())); + } + }; + +public: + /*! + * Default constructor + */ + basic_clock() : attribute(new impl()) + { + } + /*! + * Constructor for casting support + */ + explicit basic_clock(cast_source const& source) : attribute(source.as< impl >()) + { + } +}; + +//! Attribute that returns current UTC time +typedef basic_clock< utc_time_traits > utc_clock; +//! Attribute that returns current local time +typedef basic_clock< local_time_traits > local_clock; + +} // namespace attributes + +BOOST_LOG_CLOSE_NAMESPACE // namespace log + +} // namespace boost + +#include <boost/log/detail/footer.hpp> + +#endif // BOOST_LOG_ATTRIBUTES_CLOCK_HPP_INCLUDED_ |