switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Utils / Logger / TimeSource.hh
1 // $Id$
2 //
3 // Copyright (C) 2008
4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
5 //
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at 
9 // http://senf.berlios.de/license.html
10 //
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on, 
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
14 //
15 // Software distributed under the License is distributed on an "AS IS" basis, 
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
17 // for the specific language governing rights and limitations under the License.
18 //
19 // The Original Code is Fraunhofer FOKUS code.
20 //
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
24 //
25 // Contributor(s):
26 //   Stefan Bund <g0dil@berlios.de>
27
28 /** \file
29     \brief TimeSource public header */
30
31 #ifndef HH_SENF_Utils_Logger_TimeSource_
32 #define HH_SENF_Utils_Logger_TimeSource_ 1
33
34 // Custom includes
35 #include <boost/cstdint.hpp>
36 #include <memory>
37 #include <senf/config.hh>
38
39 //#include "TimeSource.mpp"
40 //-/////////////////////////////////////////////////////////////////////////////////////////////////
41
42 namespace senf {
43 namespace log {
44
45     typedef config::time_type time_type;
46
47     /** \brief Log message time source abstract base class
48
49         Instances derived from TimeSource provide the Logging library with the current date/time
50         value. The \c operator() member must be implemented to return the current universal time
51         (UTC).
52
53         A new TimeSource may be installed using \ref senf::log::timeSource().
54
55         \ingroup config
56      */
57     struct TimeSource
58     {
59         virtual ~TimeSource();
60         virtual time_type operator()() const = 0;
61
62         static time_type now();
63     };
64
65     /** \brief Default %log message time source
66
67         This time source is installed by default and uses gettimeofday() (via the Boost.DateTime
68         library) to get the current universal time.
69
70         \ingroup config
71      */
72     struct SystemTimeSource : public TimeSource
73     {
74         virtual time_type operator()() const;
75     };
76
77     /** \brief Change %log message time source
78
79         Set the %log message time source to \a source. The logging library will take ownership of \e
80         source and will take care to free it, if necessary.
81
82         Since the time source class will in almost all cases be default constructible, see the
83         template overload for a simpler interface.
84
85         \ingroup config
86      */
87     void timeSource(std::auto_ptr<TimeSource> source);
88
89     /** \brief Change %log message time source
90
91         Set the %log message time source to (an instance of) \a Source.  \a Source must be default
92         constructible, otherwise use the non-template senf::log::timeSource() overload.
93
94         \ingroup config
95      */
96     template <class Source> void timeSource();
97
98 }}
99
100 //-/////////////////////////////////////////////////////////////////////////////////////////////////
101 #include "TimeSource.cci"
102 //#include "TimeSource.ct"
103 #include "TimeSource.cti"
104 #endif
105
106 \f
107 // Local Variables:
108 // mode: c++
109 // fill-column: 100
110 // comment-column: 40
111 // c-file-style: "senf"
112 // indent-tabs-mode: nil
113 // ispell-local-dictionary: "american"
114 // compile-command: "scons -u test"
115 // End: