Skip to content

Commit cc500ee

Browse files
committed
report field lookup
Signed-off-by: James Cherry <cherry@parallaxsw.com>
1 parent 6226cd7 commit cc500ee

6 files changed

Lines changed: 50 additions & 31 deletions

File tree

include/sta/Sta.hh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,7 @@ public:
987987
ReportField *findReportPathField(std::string_view name);
988988
ReportField *findReportPathFieldAbrev(std::string_view name);
989989
void makeReportPathField(std::string_view name,
990+
std::string_view name_abrev,
990991
std::string_view title,
991992
size_t width,
992993
bool left_justify,

search/ReportPath.cc

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,14 @@ hierPinsThruEdge(const Edge *edge,
8181
const Graph *graph);
8282

8383
ReportField::ReportField(std::string_view name,
84+
std::string_view name_abrev,
8485
std::string_view title,
8586
size_t width,
8687
bool left_justify,
8788
Unit *unit,
8889
ReportFieldGetValue get_value) :
8990
name_(name),
91+
name_abrev_(name_abrev),
9092
title_(title),
9193
left_justify_(left_justify),
9294
unit_(unit),
@@ -95,9 +97,6 @@ ReportField::ReportField(std::string_view name,
9597
setWidth(width);
9698
}
9799

98-
ReportField::~ReportField()
99-
= default;
100-
101100
void
102101
ReportField::setProperties(std::string_view title,
103102
size_t width,
@@ -146,42 +145,44 @@ void
146145
ReportPath::makeFields()
147146
{
148147
// The order corresponds to the default field order.
149-
field_fanout_ = makeField("fanout", "Fanout", 6, false, nullptr);
150-
field_capacitance_ = makeField("capacitance", "Cap", 6, false,
148+
field_fanout_ = makeField("fanout", "fanout", "Fanout", 6, false, nullptr);
149+
field_capacitance_ = makeField("capacitance", "cap", "Cap", 6, false,
151150
units_->capacitanceUnit());
152-
field_slew_ = makeField("slew", "Slew", 6, false, units_->timeUnit());
153-
field_incr_ = makeField("incr", "Delay", 6, false, units_->timeUnit());
154-
field_variation_ = makeField("variation", "Variation", 6, false,
151+
field_slew_ = makeField("slew", "slew", "Slew", 6, false, units_->timeUnit());
152+
field_incr_ = makeField("incr", "incr", "Delay", 6, false, units_->timeUnit());
153+
field_variation_ = makeField("variation", "var", "Variation", 6, false,
155154
units_->timeUnit());
156-
field_total_ = makeField("total", "Time", 6, false, units_->timeUnit());
157-
field_edge_ = makeField("edge", "", 1, false, nullptr);
158-
field_case_ = makeField("case", "case", 11, false, nullptr);
159-
field_description_ = makeField("description", "Description", 36, true, nullptr);
160-
field_src_attr_ = makeField("src_attr", "Src Attr", 40, true, nullptr);
155+
field_total_ = makeField("total", "total", "Time", 6, false, units_->timeUnit());
156+
field_edge_ = makeField("edge", "edge", "", 1, false, nullptr);
157+
field_case_ = makeField("case", "case", "case", 11, false, nullptr);
158+
field_description_ = makeField("description", "desc", "Description", 36, true, nullptr);
159+
field_src_attr_ = makeField("src_attr", "src", "Src Attr", 40, true, nullptr);
161160
}
162161

163162
ReportField *
164163
ReportPath::makeField(std::string_view name,
164+
std::string_view name_abrev,
165165
std::string_view title,
166166
size_t width,
167167
bool left_justify,
168168
Unit *unit)
169169
{
170-
return makeField(name, title, width, left_justify, unit, nullptr);
170+
return makeField(name, name_abrev, title, width, left_justify, unit, nullptr);
171171
}
172172

173173
ReportField *
174174
ReportPath::makeField(std::string_view name,
175+
std::string_view name_abrev,
175176
std::string_view title,
176177
size_t width,
177178
bool left_justify,
178179
Unit *unit,
179180
ReportFieldGetValue get_value)
180181
{
181-
ReportField *field = new ReportField(name, title, width, left_justify, unit, get_value);
182+
ReportField *field = new ReportField(name, name_abrev, title, width, left_justify,
183+
unit, get_value);
182184
fields_.push_back(field);
183-
std::string sname(name);
184-
field_map_[sname] = field;
185+
field_map_[std::string(name)] = field;
185186
return field;
186187
}
187188

@@ -194,7 +195,12 @@ ReportPath::findField(std::string_view name)
194195
ReportField *
195196
ReportPath::findFieldAbrev(std::string_view name)
196197
{
197-
return findKeyValue(field_map_, std::string(name));
198+
for (ReportField *field : fields_) {
199+
const std::string &name_abrev = field->nameAbrev();
200+
if (name.substr(0, name_abrev.size()) == name_abrev)
201+
return field;
202+
}
203+
return nullptr;
198204
}
199205

200206
void

search/ReportPath.hh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,17 @@ class ReportField
5757
{
5858
public:
5959
ReportField(std::string_view name,
60+
std::string_view name_abrev,
6061
std::string_view title,
6162
size_t width,
6263
bool left_justify,
6364
Unit *unit,
6465
ReportFieldGetValue get_value);
65-
~ReportField();
6666
void setProperties(std::string_view title,
6767
size_t width,
6868
bool left_justify);
6969
const std::string &name() const { return name_; }
70+
const std::string &nameAbrev() const { return name_abrev_; }
7071
const std::string &title() const { return title_; }
7172
size_t width() const { return width_; }
7273
void setWidth(size_t width);
@@ -80,6 +81,7 @@ public:
8081

8182
protected:
8283
std::string name_;
84+
std::string name_abrev_;
8385
std::string title_;
8486
size_t width_;
8587
bool left_justify_;
@@ -200,6 +202,7 @@ public:
200202
const MinMax *min_max) const;
201203

202204
ReportField *makeField(std::string_view name,
205+
std::string_view name_abrev,
203206
std::string_view title,
204207
size_t width,
205208
bool left_justify,
@@ -214,6 +217,7 @@ public:
214217
protected:
215218
void makeFields();
216219
ReportField *makeField(std::string_view name,
220+
std::string_view name_abrev,
217221
std::string_view title,
218222
size_t width,
219223
bool left_justify,

search/Search.i

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,18 @@ set_report_path_fields(StringSeq fields)
412412
Sta::sta()->setReportPathFields(fields);
413413
}
414414

415+
void
416+
make_report_path_field(const char *name,
417+
const char *name_abrev,
418+
const char *title,
419+
int width,
420+
bool left_justify,
421+
Unit *unit)
422+
{
423+
Sta::sta()->makeReportPathField(name, name_abrev, title, width, left_justify,
424+
unit, ReportFieldGetValue());
425+
}
426+
415427
const char *
416428
find_report_path_field_abrev(const char *name)
417429
{

search/Search.tcl

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -725,18 +725,13 @@ proc parse_report_path_options { cmd args_var default_format
725725
lappend fields "hierarchical_pin"
726726
} elseif { [string match "net" $field] } {
727727
lappend fields "net"
728-
} elseif { [string match "cap*" $field] } {
729-
lappend fields "capacitance"
730-
} elseif { [string match "slew" $field] } {
731-
lappend fields "slew"
732-
} elseif { [string match "fanout" $field] } {
733-
lappend fields "fanout"
734-
} elseif { [string match "variation" $field] } {
735-
lappend fields "variation"
736-
} elseif { [string match "src*" $field] } {
737-
lappend fields "src_attr"
738728
} else {
739-
sta_warn 168 "unknown field $field."
729+
set field_name [find_report_path_field_abrev $field]
730+
if { $field_name != "" } {
731+
lappend fields $field_name
732+
} else {
733+
sta_warn 168 "unknown field $field."
734+
}
740735
}
741736
}
742737
}

search/Sta.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2835,13 +2835,14 @@ Sta::findReportPathFieldAbrev(std::string_view name)
28352835

28362836
void
28372837
Sta::makeReportPathField(std::string_view name,
2838+
std::string_view name_abrev,
28382839
std::string_view title,
28392840
size_t width,
28402841
bool left_justify,
28412842
Unit *unit,
28422843
const ReportFieldGetValue &get_value)
28432844
{
2844-
report_path_->makeField(name, title, width, left_justify, unit, get_value);
2845+
report_path_->makeField(name, name_abrev, title, width, left_justify, unit, get_value);
28452846
}
28462847

28472848
void

0 commit comments

Comments
 (0)