sc_time.hh revision 12927:6be191c20575
112837Sgabeblack@google.com/* 212837Sgabeblack@google.com * Copyright 2018 Google, Inc. 312837Sgabeblack@google.com * 412837Sgabeblack@google.com * Redistribution and use in source and binary forms, with or without 512837Sgabeblack@google.com * modification, are permitted provided that the following conditions are 612837Sgabeblack@google.com * met: redistributions of source code must retain the above copyright 712837Sgabeblack@google.com * notice, this list of conditions and the following disclaimer; 812837Sgabeblack@google.com * redistributions in binary form must reproduce the above copyright 912837Sgabeblack@google.com * notice, this list of conditions and the following disclaimer in the 1012837Sgabeblack@google.com * documentation and/or other materials provided with the distribution; 1112837Sgabeblack@google.com * neither the name of the copyright holders nor the names of its 1212837Sgabeblack@google.com * contributors may be used to endorse or promote products derived from 1312837Sgabeblack@google.com * this software without specific prior written permission. 1412837Sgabeblack@google.com * 1512837Sgabeblack@google.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1612837Sgabeblack@google.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1712837Sgabeblack@google.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1812837Sgabeblack@google.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1912837Sgabeblack@google.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2012837Sgabeblack@google.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2112837Sgabeblack@google.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2212837Sgabeblack@google.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2312837Sgabeblack@google.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2412837Sgabeblack@google.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2512837Sgabeblack@google.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2612837Sgabeblack@google.com * 2712837Sgabeblack@google.com * Authors: Gabe Black 2812837Sgabeblack@google.com */ 2912837Sgabeblack@google.com 3013039Sgabeblack@google.com#ifndef __SYSTEMC_EXT_CORE_SC_TIME_HH__ 3113039Sgabeblack@google.com#define __SYSTEMC_EXT_CORE_SC_TIME_HH__ 3212837Sgabeblack@google.com 3312989Sgabeblack@google.com#include <stdint.h> 3412986Sgabeblack@google.com 3513039Sgabeblack@google.com#include <iostream> 3612837Sgabeblack@google.com 3712837Sgabeblack@google.com#include "../dt/int/sc_nbdefs.hh" 3812837Sgabeblack@google.com 3912837Sgabeblack@google.comnamespace sc_core 4012837Sgabeblack@google.com{ 4112983Sgabeblack@google.com 4212837Sgabeblack@google.comenum sc_time_unit { 4312983Sgabeblack@google.com SC_FS = 0, 4412983Sgabeblack@google.com SC_PS, 4512983Sgabeblack@google.com SC_NS, 4612983Sgabeblack@google.com SC_US, 4712983Sgabeblack@google.com SC_MS, 4812983Sgabeblack@google.com SC_SEC 4912983Sgabeblack@google.com}; 5012983Sgabeblack@google.com 5112983Sgabeblack@google.comclass sc_time 5212983Sgabeblack@google.com{ 5312983Sgabeblack@google.com public: 5412983Sgabeblack@google.com sc_time(); 5512983Sgabeblack@google.com sc_time(double, sc_time_unit); 5612983Sgabeblack@google.com sc_time(const sc_time &); 5712983Sgabeblack@google.com 5812983Sgabeblack@google.com // Deprecated 5912983Sgabeblack@google.com sc_time(double, bool); 6012983Sgabeblack@google.com sc_time(sc_dt::uint64, bool); 6112983Sgabeblack@google.com 6213039Sgabeblack@google.com sc_time &operator = (const sc_time &); 6313039Sgabeblack@google.com 6413039Sgabeblack@google.com sc_dt::uint64 value() const; 6513039Sgabeblack@google.com double to_double() const; 6613039Sgabeblack@google.com double to_seconds() const; 6713039Sgabeblack@google.com const std::string to_string() const; 6813039Sgabeblack@google.com 6913039Sgabeblack@google.com bool operator == (const sc_time &) const; 7013039Sgabeblack@google.com bool operator != (const sc_time &) const; 7113039Sgabeblack@google.com bool operator < (const sc_time &) const; 7213039Sgabeblack@google.com bool operator <= (const sc_time &) const; 7313039Sgabeblack@google.com bool operator > (const sc_time &) const; 7413039Sgabeblack@google.com bool operator >= (const sc_time &) const; 7513039Sgabeblack@google.com 7613039Sgabeblack@google.com sc_time &operator += (const sc_time &); 7712986Sgabeblack@google.com sc_time &operator -= (const sc_time &); 7813039Sgabeblack@google.com sc_time &operator *= (double); 7912986Sgabeblack@google.com sc_time &operator /= (double); 8013039Sgabeblack@google.com 8113039Sgabeblack@google.com void print(std::ostream & =std::cout) const; 8213039Sgabeblack@google.com 8313039Sgabeblack@google.com // Deprecated 8413039Sgabeblack@google.com static sc_time from_value(sc_dt::uint64); 8513039Sgabeblack@google.com static sc_time from_seconds(double); 8613039Sgabeblack@google.com static sc_time from_string(const char *str); 8712986Sgabeblack@google.com}; 8813039Sgabeblack@google.com 8913039Sgabeblack@google.comconst sc_time operator + (const sc_time &, const sc_time &); 9013039Sgabeblack@google.comconst sc_time operator - (const sc_time &, const sc_time &); 9112986Sgabeblack@google.com 9212986Sgabeblack@google.comconst sc_time operator * (const sc_time &, double); 9312986Sgabeblack@google.comconst sc_time operator * (double, const sc_time &); 9413039Sgabeblack@google.comconst sc_time operator / (const sc_time &, double); 9513039Sgabeblack@google.comdouble operator / (const sc_time &, const sc_time &); 9613039Sgabeblack@google.com 9713039Sgabeblack@google.comstd::ostream &operator << (std::ostream &, const sc_time &); 9812986Sgabeblack@google.com 9912986Sgabeblack@google.comextern const sc_time SC_ZERO_TIME; 10013039Sgabeblack@google.com 10113039Sgabeblack@google.comvoid sc_set_time_resolution(double, sc_time_unit); 10213039Sgabeblack@google.comsc_time sc_get_time_resolution(); 10313039Sgabeblack@google.comconst sc_time &sc_max_time(); 10413039Sgabeblack@google.com 10513039Sgabeblack@google.com// Deprecated 10613039Sgabeblack@google.comvoid sc_set_default_time_unit(double, sc_time_unit); 10713039Sgabeblack@google.comsc_time sc_get_default_time_unit(); 10813039Sgabeblack@google.com 10913039Sgabeblack@google.com// Nonstandard 11013039Sgabeblack@google.comclass sc_time_tuple 11113039Sgabeblack@google.com{ 11213039Sgabeblack@google.com public: 11313039Sgabeblack@google.com sc_time_tuple() : _value(), _unit(SC_SEC), _offset(1) {} 11413039Sgabeblack@google.com sc_time_tuple(const sc_time &); 11513039Sgabeblack@google.com 11613039Sgabeblack@google.com bool has_value() const; 11713039Sgabeblack@google.com sc_dt::uint64 value() const; 11813039Sgabeblack@google.com // Normalized unit. 11913039Sgabeblack@google.com sc_time_unit unit() const { return _unit; } 12013039Sgabeblack@google.com // Normalized unit symbol. 12113039Sgabeblack@google.com const char *unit_symbol() const; 12213039Sgabeblack@google.com 12313039Sgabeblack@google.com operator sc_time() const { return sc_time(to_double(), _unit); } 12413039Sgabeblack@google.com 12513039Sgabeblack@google.com double to_double() const; // Relative to the normalized unit. 12613039Sgabeblack@google.com std::string to_string() const; 12713039Sgabeblack@google.com 12813039Sgabeblack@google.com private: 12913039Sgabeblack@google.com sc_dt::uint64 _value; 13013039Sgabeblack@google.com sc_time_unit _unit; 13113039Sgabeblack@google.com unsigned _offset; 13213039Sgabeblack@google.com}; 13313039Sgabeblack@google.com 13413039Sgabeblack@google.com} // namespace sc_core 13513039Sgabeblack@google.com 13613039Sgabeblack@google.com#endif //__SYSTEMC_EXT_CORE_SC_TIME_HH__ 13713124Sgabeblack@google.com