val = t.val;
}
+sc_time::sc_time(double d, const char *unit)
+{
+ sc_time_unit tu;
+ for (tu = SC_FS; tu <= SC_SEC; tu = (sc_time_unit)(tu + 1)) {
+ if (strcmp(unit, sc_gem5::TimeUnitNames[tu]) == 0 ||
+ strcmp(unit, sc_gem5::TimeUnitConstantNames[tu]) == 0) {
+ break;
+ }
+ }
+
+ if (tu > SC_SEC) {
+ SC_REPORT_ERROR("(E567) sc_time conversion failed",
+ "invalid unit given");
+ val = 0;
+ return;
+ }
+ set(this, d, tu);
+}
+
sc_time::sc_time(double d, bool scale)
{
double scaler = scale ? defaultUnit : SimClock::Float::Hz;
sc_time
sc_time::from_string(const char *str)
{
- warn("%s not implemented.\n", __PRETTY_FUNCTION__);
- return sc_time();
+ char *end = nullptr;
+
+ double d = str ? std::strtod(str, &end) : 0.0;
+ if (str == end || d < 0.0) {
+ SC_REPORT_ERROR("(E567) sc_time conversion failed",
+ "invalid value given");
+ return SC_ZERO_TIME;
+ }
+
+ while (*end && std::isspace(*end))
+ end++;
+
+ return sc_time(d, end);
}
const sc_time
[::sc_core::SC_SEC] = "s"
};
+const char *TimeUnitConstantNames[] = {
+ [::sc_core::SC_FS] = "SC_FS",
+ [::sc_core::SC_PS] = "SC_PS",
+ [::sc_core::SC_NS] = "SC_NS",
+ [::sc_core::SC_US] = "SC_US",
+ [::sc_core::SC_MS] = "SC_MS",
+ [::sc_core::SC_SEC] = "SC_SEC"
+};
+
double TimeUnitScale[] = {
[::sc_core::SC_FS] = 1.0e-15,
[::sc_core::SC_PS] = 1.0e-12,
{
extern const char *TimeUnitNames[];
+extern const char *TimeUnitConstantNames[];
extern double TimeUnitScale[];
extern Tick TimeUnitFrequency[];
sc_time(double, sc_time_unit);
sc_time(const sc_time &);
+ // Nonstandard
+ sc_time(double, const char *);
+
// Deprecated
sc_time(double, bool);
sc_time(sc_dt::uint64, bool);