クラス sc_core::sc_time

#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_timeoperator= (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_timeoperator+= (const sc_time &)
sc_timeoperator-= (const sc_time &)
sc_timeoperator*= (double)
sc_timeoperator/= (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_time.h90 行で定義されています。


コンストラクタとデストラクタ

sc_core::sc_time::sc_time (  )  [inline]

sc_time.h165 行で定義されています。

00166 : m_value( 0 )
00167 {}

sc_core::sc_time::sc_time ( double  v,
sc_time_unit  tu 
)

sc_time.cpp95 行で定義されています。

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.cpp108 行で定義されています。

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.cpp121 行で定義されています。

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.cpp141 行で定義されています。

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_time.h170 行で定義されています。

00171 : m_value( t.m_value )
00172 {}


関数

sc_time & sc_core::sc_time::operator= ( const sc_time t  )  [inline]

sc_time.h179 行で定義されています。

00180 {
00181     m_value = t.m_value;
00182     return *this;
00183 }

sc_dt::uint64 sc_core::sc_time::value (  )  const [inline]

sc_time.h190 行で定義されています。

00191 {
00192     return m_value;
00193 }

double sc_core::sc_time::to_double (  )  const [inline]

sc_time.h198 行で定義されています。

00199 {
00200     return sc_dt::uint64_to_double( m_value );
00201 }

double sc_core::sc_time::to_default_time_units (  )  const

sc_time.cpp164 行で定義されています。

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.cpp172 行で定義されています。

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.cpp180 行で定義されています。

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]

sc_time.h208 行で定義されています。

00209 {
00210     return ( m_value == t.m_value );
00211 }

bool sc_core::sc_time::operator!= ( const sc_time t  )  const [inline]

sc_time.h215 行で定義されています。

00216 {
00217     return ( m_value != t.m_value );
00218 }

bool sc_core::sc_time::operator< ( const sc_time t  )  const [inline]

sc_time.h222 行で定義されています。

00223 {
00224     return ( m_value < t.m_value );
00225 }

bool sc_core::sc_time::operator<= ( const sc_time t  )  const [inline]

sc_time.h229 行で定義されています。

00230 {
00231     return ( m_value <= t.m_value );
00232 }

bool sc_core::sc_time::operator> ( const sc_time t  )  const [inline]

sc_time.h236 行で定義されています。

00237 {
00238     return ( m_value > t.m_value );
00239 }

bool sc_core::sc_time::operator>= ( const sc_time t  )  const [inline]

sc_time.h243 行で定義されています。

00244 {
00245     return ( m_value >= t.m_value );
00246 }

sc_time & sc_core::sc_time::operator+= ( const sc_time t  )  [inline]

sc_time.h253 行で定義されています。

00254 {
00255     m_value += t.m_value;
00256     return *this;
00257 }

sc_time & sc_core::sc_time::operator-= ( const sc_time t  )  [inline]

sc_time.h261 行で定義されています。

00262 {
00263     m_value -= t.m_value;
00264     return *this;
00265 }

sc_time & sc_core::sc_time::operator*= ( double  d  )  [inline]

sc_time.h285 行で定義されています。

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]

sc_time.h295 行で定義されています。

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_time.cpp224 行で定義されています。

00225 {
00226     os << to_string();
00227 }


フレンドと関連する関数

const sc_time operator+ ( const sc_time t1,
const sc_time t2 
) [friend]

const sc_time operator- ( const sc_time t1,
const sc_time t2 
) [friend]

const sc_time operator* ( const sc_time t,
double  d 
) [friend]

const sc_time operator* ( double  d,
const sc_time t 
) [friend]

const sc_time operator/ ( const sc_time t,
double  d 
) [friend]

double operator/ ( const sc_time t1,
const sc_time t2 
) [friend]


変数

sc_time.h151 行で定義されています。


このクラスの説明は次のファイルから生成されました:

SystemCに対してFri Jun 6 20:12:04 2008に生成されました。  doxygen 1.5.6