//
// Copyright (C) 2007
// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-// Stefan Bund <g0dil@berlios.de>
//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
+// The contents of this file are subject to the Fraunhofer FOKUS Public License
+// Version 1.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+// http://senf.berlios.de/license.html
//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
+// The Fraunhofer FOKUS Public License Version 1.0 is based on,
+// but modifies the Mozilla Public License Version 1.1.
+// See the full license text for the amendments.
//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the
-// Free Software Foundation, Inc.,
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+// Software distributed under the License is distributed on an "AS IS" basis,
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+// for the specific language governing rights and limitations under the License.
+//
+// The Original Code is Fraunhofer FOKUS code.
+//
+// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V.
+// (registered association), Hansastraße 27 c, 80686 Munich, Germany.
+// All Rights Reserved.
+//
+// Contributor(s):
+// Stefan Bund <g0dil@berlios.de>
/** \file
\brief ClockService public header */
#define HH_SENF_Scheduler_ClockService_ 1
// Custom includes
-#include <sys/time.h>
+#include <sys/time.h>
#include <boost/utility.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/scoped_ptr.hpp>
#include <senf/config.hh>
#include <senf/Utils/singleton.hh>
#include <senf/Utils/Console/Parse.hh>
+#include <senf/Utils/RestrictedInt.hh>
//#include "ClockService.mpp"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
namespace senf {
// To allow conversion between clock value and absolute time, the ClockService samples the
// absolute current time and the clock value when the conversion is performed. This is done at
// most once per second on a if-needed basis.
-
+
/** \brief Reliable high precision monotonous clock source
The ClockService provides a highly accurate monotonous clock source based on
: singleton<ClockService>
{
public:
- ///////////////////////////////////////////////////////////////////////////
+ //-////////////////////////////////////////////////////////////////////////
// Types
/** \brief ClockService timer data type
-
+
Unsigned integer type representing scheduler time. Scheduler time is measured in
nanoseconds relative to some implementation defined reference time.
*/
+#ifdef SENF_DEBUG
+ struct ClockTypeTag {};
+ typedef senf::RestrictedInt<config::time_type, ClockTypeTag> clock_type;
+#else
typedef config::time_type clock_type;
-
+#endif
/** \brief Supplementary integer type
This type is used to represent varies supplementary values (e.g. number of microseconds)
/** \brief Absolute time data type
- Boost.DateTime datatype used to represent absolute date/time values.
+ <a href="http://www.boost.org/doc/libs/release/libs/date_time/index.html">Boost.DateTime</a>
+ datatype used to represent absolute date/time values.
*/
typedef boost::posix_time::ptime abstime_type;
/** \brief Relative time data type
- Boost.DateTime datatype used to represent time intervals
+ <a href="http://www.boost.org/doc/libs/release/libs/date_time/index.html">Boost.DateTime</a>
+ datatype used to represent time intervals
*/
typedef boost::posix_time::time_duration reltime_type;
- ///////////////////////////////////////////////////////////////////////////
+ //-////////////////////////////////////////////////////////////////////////
static clock_type now(); ///< Return current clock value
-
+
static abstime_type abstime(clock_type clock); ///< Convert clock to absolute time
/**< This member converts a clock value into an absolute
- Boost.DateTime value.
+ <a href="http://www.boost.org/doc/libs/release/libs/date_time/index.html">Boost.DateTime</a>
+ value.
\note You should not base timeout calculations on this
absolute time value. Clock time is guaranteed to be
monotonous, absolute time may be non-monotonous if
static reltime_type reltime(clock_type clock); ///< Convert clock to relative time
/**< This member converts a clock value into a relative
- Boost.DateTime time interval
+ <a href="http://www.boost.org/doc/libs/release/libs/date_time/index.html">Boost.DateTime</a>
+ time interval
\note The resolution of reltime_type might be smaller
than the clock_type resolution */
corresponding clock value.
\see abstime */
- static clock_type from_time_t(time_t const & time);
+ static clock_type from_time_t(time_t const & time);
///< Convert legacy time_t to clock value
- /**< This member converts an absolute time value
+ /**< This member converts an absolute time value
represented as a time_t value into a clock value */
- static clock_type from_timeval(timeval const & time);
+ static clock_type from_timeval(timeval const & time);
///< Convert legacy timeval to clock value
/**< This member converts an absolute time value
represented as a timeval value into a clock value */
<tr><td><code>2md</code></td><td>(very unusual) 2 milli-days</td></tr>
</table>
*/
- void parseClockServiceInterval(console::ParseCommandInfo::TokensRange const & tokens,
+ void parseClockServiceInterval(console::ParseCommandInfo::TokensRange const & tokens,
ClockService::clock_type & out);
void formatClockServiceInterval(ClockService::clock_type interval, std::ostream & os);
}
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
#include "ClockService.cci"
//#include "ClockService.ct"
//#include "ClockService.cti"