report_units
This commit is contained in:
parent
b6e3ab889e
commit
07e1262186
BIN
doc/OpenSTA.odt
BIN
doc/OpenSTA.odt
Binary file not shown.
|
|
@ -21,7 +21,7 @@ namespace sta {
|
|||
class Unit
|
||||
{
|
||||
public:
|
||||
Unit();
|
||||
Unit(const char *suffix);
|
||||
~Unit();
|
||||
Unit(float scale,
|
||||
const char *suffix,
|
||||
|
|
@ -29,10 +29,12 @@ public:
|
|||
void operator=(const Unit &unit);
|
||||
float scale() const { return scale_; }
|
||||
void setScale(float scale);
|
||||
const char *scaleAbreviation();
|
||||
const char *suffix() const { return suffix_; }
|
||||
void setSuffix(const char *suffix);
|
||||
int digits() const { return digits_; }
|
||||
void setDigits(int digits);
|
||||
// Does not include suffix.
|
||||
int width() const;
|
||||
const char *asString(float value) const;
|
||||
const char *asString(double value) const;
|
||||
|
|
@ -50,7 +52,7 @@ private:
|
|||
class Units
|
||||
{
|
||||
public:
|
||||
Units() {}
|
||||
Units();
|
||||
Unit *find(const char *unit_name);
|
||||
void operator=(const Units &units);
|
||||
Unit *timeUnit() { return &time_unit_; }
|
||||
|
|
|
|||
|
|
@ -21,15 +21,17 @@
|
|||
|
||||
#include "StringUtil.hh"
|
||||
#include "MinMax.hh" // INF
|
||||
#include "Fuzzy.hh"
|
||||
|
||||
namespace sta {
|
||||
|
||||
using std::abs;
|
||||
|
||||
Unit::Unit() :
|
||||
|
||||
Unit::Unit(const char *suffix) :
|
||||
scale_(1.0),
|
||||
suffix_(stringCopy("")),
|
||||
digits_(4)
|
||||
suffix_(stringCopy(suffix)),
|
||||
digits_(3)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -62,6 +64,29 @@ Unit::setScale(float scale)
|
|||
scale_ = scale;
|
||||
}
|
||||
|
||||
const char *
|
||||
Unit::scaleAbreviation()
|
||||
{
|
||||
if (fuzzyEqual(scale_, 1E+6))
|
||||
return "M";
|
||||
else if (fuzzyEqual(scale_, 1E+3))
|
||||
return "k";
|
||||
if (fuzzyEqual(scale_, 1.0))
|
||||
return "";
|
||||
else if (fuzzyEqual(scale_, 1E-3))
|
||||
return "m";
|
||||
else if (fuzzyEqual(scale_, 1E-6))
|
||||
return "u";
|
||||
else if (fuzzyEqual(scale_, 1E-9))
|
||||
return "n";
|
||||
else if (fuzzyEqual(scale_, 1E-12))
|
||||
return "p";
|
||||
else if (fuzzyEqual(scale_, 1E-15))
|
||||
return "f";
|
||||
else
|
||||
return "?";
|
||||
}
|
||||
|
||||
void
|
||||
Unit::setSuffix(const char *suffix)
|
||||
{
|
||||
|
|
@ -78,7 +103,7 @@ Unit::setDigits(int digits)
|
|||
int
|
||||
Unit::width() const
|
||||
{
|
||||
return digits_ + (suffix_ ? strlen(suffix_) : 0) + 2;
|
||||
return digits_ + 2;
|
||||
}
|
||||
|
||||
const char *
|
||||
|
|
@ -105,12 +130,25 @@ Unit::asString(float value,
|
|||
// prevent "-0.00" on slowaris
|
||||
if (abs(scaled_value) < 1E-6)
|
||||
scaled_value = 0.0;
|
||||
return stringPrintTmp("%.*f%s", digits, scaled_value, suffix_);
|
||||
return stringPrintTmp("%.*f", digits, scaled_value);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
Units::Units() :
|
||||
time_unit_("s"),
|
||||
capacitance_unit_("F"),
|
||||
voltage_unit_("v"),
|
||||
resistance_unit_("ohm"),
|
||||
pulling_resistance_unit_("ohm"),
|
||||
current_unit_("A"),
|
||||
power_unit_("W"),
|
||||
distance_unit_("m"),
|
||||
scalar_unit_("")
|
||||
{
|
||||
}
|
||||
|
||||
Unit *
|
||||
Units::find(const char *unit_name)
|
||||
{
|
||||
|
|
|
|||
11
tcl/Sta.tcl
11
tcl/Sta.tcl
|
|
@ -1104,6 +1104,17 @@ proc report_object_names { args } {
|
|||
|
||||
################################################################
|
||||
|
||||
define_sta_cmd_args "report_units" {}
|
||||
|
||||
proc report_units { args } {
|
||||
check_argc_eq0 "report_units" $args
|
||||
foreach unit {"time" "capacitance" "resistance" "voltage" "current" "power" "distance"} {
|
||||
puts " $unit 1[unit_scale_abreviation $unit][unit_suffix $unit]"
|
||||
}
|
||||
}
|
||||
|
||||
################################################################
|
||||
|
||||
define_sta_cmd_args "with_output_to_variable" { var { cmds }}
|
||||
|
||||
# with_output_to_variable variable { command args... }
|
||||
|
|
|
|||
20
tcl/StaTcl.i
20
tcl/StaTcl.i
|
|
@ -3949,6 +3949,26 @@ set_cmd_unit_suffix(const char *unit_name,
|
|||
}
|
||||
}
|
||||
|
||||
const char *
|
||||
unit_scale_abreviation(const char *unit_name)
|
||||
{
|
||||
Unit *unit = Sta::sta()->units()->find(unit_name);
|
||||
if (unit)
|
||||
return unit->scaleAbreviation();
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *
|
||||
unit_suffix(const char *unit_name)
|
||||
{
|
||||
Unit *unit = Sta::sta()->units()->find(unit_name);
|
||||
if (unit)
|
||||
return unit->suffix();
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
VertexIterator *
|
||||
|
|
|
|||
Loading…
Reference in New Issue