summaryrefslogtreecommitdiff
path: root/boost/log/attributes/clock.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/log/attributes/clock.hpp')
-rw-r--r--boost/log/attributes/clock.hpp95
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_