96 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			96 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | /*
 | ||
|  |  *          Copyright Andrey Semashev 2007 - 2015. | ||
|  |  * 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_
 |