#include <sc_time.h>
Public メソッド | |
sc_time () | |
sc_time (double, sc_time_unit) | |
sc_time (double, sc_time_unit, sc_simcontext *) | |
sc_time (double, bool scale) | |
sc_time (sc_dt::uint64, bool scale) | |
sc_time (const sc_time &) | |
sc_time & | operator= (const sc_time &) |
sc_dt::uint64 | value () const |
double | to_double () const |
double | to_default_time_units () const |
double | to_seconds () const |
const std::string | to_string () const |
bool | operator== (const sc_time &) const |
bool | operator!= (const sc_time &) const |
bool | operator< (const sc_time &) const |
bool | operator<= (const sc_time &) const |
bool | operator> (const sc_time &) const |
bool | operator>= (const sc_time &) const |
sc_time & | operator+= (const sc_time &) |
sc_time & | operator-= (const sc_time &) |
sc_time & | operator*= (double) |
sc_time & | operator/= (double) |
void | print (::std::ostream &os=std::cout) const |
Private 変数 | |
sc_dt::uint64 | m_value |
フレンド | |
const sc_time | operator+ (const sc_time &, const sc_time &) |
const sc_time | operator- (const sc_time &, const sc_time &) |
const sc_time | operator* (const sc_time &, double) |
const sc_time | operator* (double, const sc_time &) |
const sc_time | operator/ (const sc_time &, double) |
double | operator/ (const sc_time &, const sc_time &) |
sc_core::sc_time::sc_time | ( | double | v, | |
sc_time_unit | tu | |||
) |
sc_time.cpp の 95 行で定義されています。
00096 : m_value( 0 ) 00097 { 00098 if( v != 0 ) { 00099 sc_time_params* time_params = sc_get_curr_simcontext()->m_time_params; 00100 double scale_fac = time_values[tu] / time_params->time_resolution; 00101 // linux bug workaround; don't change next two lines 00102 volatile double tmp = v * scale_fac + 0.5; 00103 m_value = SCAST<sc_dt::int64>( tmp ); 00104 time_params->time_resolution_fixed = true; 00105 } 00106 }
sc_core::sc_time::sc_time | ( | double | v, | |
sc_time_unit | tu, | |||
sc_simcontext * | simc | |||
) |
sc_time.cpp の 108 行で定義されています。
00109 : m_value( 0 ) 00110 { 00111 if( v != 0 ) { 00112 sc_time_params* time_params = simc->m_time_params; 00113 double scale_fac = time_values[tu] / time_params->time_resolution; 00114 // linux bug workaround; don't change next two lines 00115 volatile double tmp = v * scale_fac + 0.5; 00116 m_value = SCAST<sc_dt::int64>( tmp ); 00117 time_params->time_resolution_fixed = true; 00118 } 00119 }
sc_core::sc_time::sc_time | ( | double | v, | |
bool | scale | |||
) |
sc_time.cpp の 121 行で定義されています。
00122 : m_value( 0 ) 00123 { 00124 if( v != 0 ) { 00125 sc_time_params* time_params = sc_get_curr_simcontext()->m_time_params; 00126 if( scale ) { 00127 double scale_fac = sc_dt::uint64_to_double( 00128 time_params->default_time_unit ); 00129 // linux bug workaround; don't change next two lines 00130 volatile double tmp = v * scale_fac + 0.5; 00131 m_value = SCAST<sc_dt::int64>( tmp ); 00132 } else { 00133 // linux bug workaround; don't change next two lines 00134 volatile double tmp = v + 0.5; 00135 m_value = SCAST<sc_dt::int64>( tmp ); 00136 } 00137 time_params->time_resolution_fixed = true; 00138 } 00139 }
sc_core::sc_time::sc_time | ( | sc_dt::uint64 | v, | |
bool | scale | |||
) |
sc_time.cpp の 141 行で定義されています。
00142 : m_value( 0 ) 00143 { 00144 if( v != 0 ) { 00145 sc_time_params* time_params = sc_get_curr_simcontext()->m_time_params; 00146 if( scale ) { 00147 double scale_fac = sc_dt::uint64_to_double( 00148 time_params->default_time_unit ); 00149 // linux bug workaround; don't change next two lines 00150 volatile double tmp = sc_dt::uint64_to_double( v ) * 00151 scale_fac + 0.5; 00152 m_value = SCAST<sc_dt::int64>( tmp ); 00153 } else { 00154 m_value = v; 00155 } 00156 time_params->time_resolution_fixed = true; 00157 } 00158 }
sc_core::sc_time::sc_time | ( | const sc_time & | t | ) | [inline] |
sc_dt::uint64 sc_core::sc_time::value | ( | ) | const [inline] |
double sc_core::sc_time::to_double | ( | ) | const [inline] |
double sc_core::sc_time::to_default_time_units | ( | ) | const |
sc_time.cpp の 164 行で定義されています。
00165 { 00166 sc_time_params* time_params = sc_get_curr_simcontext()->m_time_params; 00167 return ( sc_dt::uint64_to_double( m_value ) / 00168 sc_dt::uint64_to_double( time_params->default_time_unit ) ); 00169 }
double sc_core::sc_time::to_seconds | ( | ) | const |
sc_time.cpp の 172 行で定義されています。
00173 { 00174 sc_time_params* time_params = sc_get_curr_simcontext()->m_time_params; 00175 return ( sc_dt::uint64_to_double( m_value ) * 00176 time_params->time_resolution * 1e-15 ); 00177 }
const std::string sc_core::sc_time::to_string | ( | ) | const |
sc_time.cpp の 180 行で定義されています。
00181 { 00182 sc_dt::uint64 val = m_value; 00183 if( val == 0 ) { 00184 return std::string( "0 s" ); 00185 } 00186 sc_time_params* time_params = sc_get_curr_simcontext()->m_time_params; 00187 sc_dt::uint64 tr = SCAST<sc_dt::int64>( time_params->time_resolution ); 00188 int n = 0; 00189 while( ( tr % 10 ) == 0 ) { 00190 tr /= 10; 00191 n ++; 00192 } 00193 assert( tr == 1 ); 00194 while( ( val % 10 ) == 0 ) { 00195 val /= 10; 00196 n ++; 00197 } 00198 char buf[BUFSIZ]; 00199 #if !defined( _MSC_VER ) 00200 std::sprintf( buf, "%llu", val ); 00201 #else 00202 std::sprintf( buf, "%I64u", val ); 00203 #endif 00204 std::string result( buf ); 00205 if( n >= 15 ) { 00206 for( int i = n - 15; i > 0; -- i ) { 00207 result += "0"; 00208 } 00209 result += " s"; 00210 } else { 00211 for( int i = n % 3; i > 0; -- i ) { 00212 result += "0"; 00213 } 00214 result += " "; 00215 result += time_units[n / 3]; 00216 } 00217 return result; 00218 }
bool sc_core::sc_time::operator== | ( | const sc_time & | t | ) | const [inline] |
bool sc_core::sc_time::operator!= | ( | const sc_time & | t | ) | const [inline] |
bool sc_core::sc_time::operator< | ( | const sc_time & | t | ) | const [inline] |
bool sc_core::sc_time::operator<= | ( | const sc_time & | t | ) | const [inline] |
bool sc_core::sc_time::operator> | ( | const sc_time & | t | ) | const [inline] |
bool sc_core::sc_time::operator>= | ( | const sc_time & | t | ) | const [inline] |
sc_time & sc_core::sc_time::operator*= | ( | double | d | ) | [inline] |
00286 { 00287 // linux bug workaround; don't change next two lines 00288 volatile double tmp = sc_dt::uint64_to_double( m_value ) * d + 0.5; 00289 m_value = SCAST<sc_dt::int64>( tmp ); 00290 return *this; 00291 }
sc_time & sc_core::sc_time::operator/= | ( | double | d | ) | [inline] |
00296 { 00297 // linux bug workaround; don't change next two lines 00298 volatile double tmp = sc_dt::uint64_to_double( m_value ) / d + 0.5; 00299 m_value = SCAST<sc_dt::int64>( tmp ); 00300 return *this; 00301 }
void sc_core::sc_time::print | ( | ::std::ostream & | os = std::cout |
) | const |
sc_dt::uint64 sc_core::sc_time::m_value [private] |