X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=ETL%2FETL%2F_clock_base.h;fp=ETL%2FETL%2F_clock_base.h;h=32d87427d774ce1957c2dd97e0a3060090bf27b9;hb=a095981e18cc37a8ecc7cd237cc22b9c10329264;hp=0000000000000000000000000000000000000000;hpb=9459638ad6797b8139f1e9f0715c96076dbf0890;p=synfig.git diff --git a/ETL/ETL/_clock_base.h b/ETL/ETL/_clock_base.h new file mode 100644 index 0000000..32d8742 --- /dev/null +++ b/ETL/ETL/_clock_base.h @@ -0,0 +1,133 @@ +/*! ======================================================================== +** Extended Template and Library +** Clock Abstraction Implementation +** $Id$ +** +** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** +** This package 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. +** +** This package 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. +** +** === N O T E S =========================================================== +** +** This is an internal header file, included by other ETL headers. +** You should not attempt to use it directly. +** +** ========================================================================= */ + +/* === S T A R T =========================================================== */ + +#ifndef __ETL__CLOCK_H +#define __ETL__CLOCK_H + +/* === H E A D E R S ======================================================= */ + +#ifndef WIN32 +#include +#else +inline void sleep(int i) { Sleep(i*1000); } +#endif + +/* === M A C R O S ========================================================= */ + +/* === T Y P E D E F S ===================================================== */ + +/* === C L A S S E S & S T R U C T S ======================================= */ + +_ETL_BEGIN_NAMESPACE + +inline void yield() { sleep(0); } + +/*! ======================================================================== +** \class clock_base +** \brief clock abstraction +** +** A more detailed description needs to be written. +*/ +template +class clock_base : public DESC +{ +public: + typedef typename DESC::value_type value_type; + +private: + typedef clock_base _clock; + typedef typename DESC::timestamp timestamp; + + timestamp base_time; + + using DESC::get_current_time; + using DESC::realtime; + using DESC::one_second; +public: + + clock_base() { reset(); } + + void reset() + { get_current_time(base_time); } + + value_type operator()()const + { return timestamp_to_seconds(get_current_time()-base_time); } + + value_type pop_time() + { + // Grab the old base time + timestamp old_time=base_time; + + // Put the current time into base_time + get_current_time(base_time); + + return timestamp_to_seconds(base_time-old_time); + } + + static void + sleep(const value_type &length) + { + if(!realtime()) + ::sleep((int)(length+0.5)); + else + { + _clock timer; + timer.reset(); + value_type val; + for(val=timer();one_second()