diff --git a/include/sta/Liberty.hh b/include/sta/Liberty.hh index 5f10462c..38bcfa39 100644 --- a/include/sta/Liberty.hh +++ b/include/sta/Liberty.hh @@ -179,7 +179,7 @@ public: float wire_delay) const; // Check for supported axis variables. // Return true if axes are supported. - static bool checkSlewDegradationAxes(TablePtr table); + static bool checkSlewDegradationAxes(const TablePtr &table); float defaultInputPinCap() const { return default_input_pin_cap_; } void setDefaultInputPinCap(float cap); @@ -788,7 +788,7 @@ public: void setRelatedGroundPin(const char *related_ground_pin); const char *relatedPowerPin() const { return related_power_pin_; } void setRelatedPowerPin(const char *related_power_pin); - ReceiverModelPtr receiverModel() const { return receiver_model_; } + const ReceiverModel *receiverModel() const { return receiver_model_.get(); } void setReceiverModel(ReceiverModelPtr receiver_model); DriverWaveform *driverWaveform(const RiseFall *rf) const; void setDriverWaveform(DriverWaveform *driver_waveform, @@ -1017,11 +1017,14 @@ public: ~TableTemplate(); const char *name() const { return name_; } void setName(const char *name); - TableAxisPtr axis1() const { return axis1_; } + const TableAxis *axis1() const { return axis1_.get(); } + TableAxisPtr axis1ptr() const { return axis1_; } void setAxis1(TableAxisPtr axis); - TableAxisPtr axis2() const { return axis2_; } + const TableAxis *axis2() const { return axis2_.get(); } + TableAxisPtr axis2ptr() const { return axis2_; } void setAxis2(TableAxisPtr axis); - TableAxisPtr axis3() const { return axis3_; } + const TableAxis *axis3() const { return axis3_.get(); } + TableAxisPtr axis3ptr() const { return axis3_; } void setAxis3(TableAxisPtr axis); protected: @@ -1065,9 +1068,9 @@ public: OcvDerate(const char *name); ~OcvDerate(); const char *name() const { return name_; } - TablePtr derateTable(const RiseFall *rf, - const EarlyLate *early_late, - PathType path_type); + const Table *derateTable(const RiseFall *rf, + const EarlyLate *early_late, + PathType path_type); void setDerateTable(const RiseFall *rf, const EarlyLate *early_late, PathType path_type, diff --git a/include/sta/TableModel.hh b/include/sta/TableModel.hh index 0202dd46..b7d91e6b 100644 --- a/include/sta/TableModel.hh +++ b/include/sta/TableModel.hh @@ -77,11 +77,11 @@ public: const TableModel *delayModel() const { return delay_model_; } const TableModel *slewModel() const { return slew_model_; } - ReceiverModelPtr receiverModel() const { return receiver_model_; } + const ReceiverModel *receiverModel() const { return receiver_model_.get(); } OutputWaveforms *outputWaveforms() const { return output_waveforms_; } // Check the axes before making the model. // Return true if the model axes are supported. - static bool checkAxes(const TablePtr table); + static bool checkAxes(const TablePtr &table); protected: void maxCapSlew(float in_slew, @@ -317,6 +317,7 @@ public: Table1 &operator= (Table1 &&table); int order() const override { return 1; } const TableAxis *axis1() const override { return axis1_.get(); } + const TableAxisPtr axis1ptr() const { return axis1_; } float value(size_t axis_index1, size_t axis_index2, size_t axis_index3) const override; @@ -486,8 +487,8 @@ public: Table1 *ref_times); ~OutputWaveforms(); const RiseFall *rf() const { return rf_; } - TableAxisPtr slewAxis() const { return slew_axis_; } - TableAxisPtr capAxis() const { return cap_axis_; } + const TableAxis *slewAxis() const { return slew_axis_.get(); } + const TableAxis *capAxis() const { return cap_axis_.get(); } Table1 voltageWaveform(float in_slew, float load_cap); float voltageTime(float in_slew, @@ -503,7 +504,7 @@ public: float volt); float referenceTime(float slew); void setVdd(float vdd); - static bool checkAxes(TableTemplate *tbl_template); + static bool checkAxes(const TableTemplate *tbl_template); private: float voltageTime1(float voltage, diff --git a/liberty/Liberty.cc b/liberty/Liberty.cc index 8f5283b3..b9125ab5 100644 --- a/liberty/Liberty.cc +++ b/liberty/Liberty.cc @@ -391,7 +391,7 @@ LibertyLibrary::degradeWireSlew(const TableModel *model, // Check for supported axis variables. // Return true if axes are supported. bool -LibertyLibrary::checkSlewDegradationAxes(TablePtr table) +LibertyLibrary::checkSlewDegradationAxes(const TablePtr &table) { switch (table->order()) { case 0: @@ -3064,12 +3064,12 @@ OcvDerate::~OcvDerate() stringDelete(name_); } -TablePtr +const Table * OcvDerate::derateTable(const RiseFall *rf, const EarlyLate *early_late, PathType path_type) { - return derate_[rf->index()][early_late->index()][int(path_type)]; + return derate_[rf->index()][early_late->index()][int(path_type)].get(); } void diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index f25cc79f..f0b026aa 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -4217,13 +4217,15 @@ LibertyReader::beginTable(LibertyGroup *group, if (library_ && template_name) { tbl_template_ = library_->findTableTemplate(template_name, type); if (tbl_template_) { - axis_[0] = tbl_template_->axis1(); - axis_[1] = tbl_template_->axis2(); - axis_[2] = tbl_template_->axis3(); + axis_[0] = tbl_template_->axis1ptr(); + axis_[1] = tbl_template_->axis2ptr(); + axis_[2] = tbl_template_->axis3ptr(); } else { libWarn(122, group, "table template %s not found.", template_name); - axis_[0] = axis_[1] = axis_[2] = nullptr; + axis_[0] = nullptr; + axis_[1] = nullptr; + axis_[2] = nullptr; } clearAxisValues(); table_ = nullptr; @@ -4236,6 +4238,9 @@ LibertyReader::endTable() { table_ = nullptr; tbl_template_ = nullptr; + axis_[0] = nullptr; + axis_[1] = nullptr; + axis_[2] = nullptr; } void diff --git a/liberty/LibertyWriter.cc b/liberty/LibertyWriter.cc index 48bdce86..2a05a59c 100644 --- a/liberty/LibertyWriter.cc +++ b/liberty/LibertyWriter.cc @@ -46,7 +46,7 @@ protected: void writeHeader(); void writeFooter(); void writeTableTemplates(); - void writeTableTemplate(TableTemplate *tbl_template); + void writeTableTemplate(const TableTemplate *tbl_template); void writeBusDcls(); void writeCells(); void writeCell(const LibertyCell *cell); @@ -60,7 +60,7 @@ protected: void writeTableModel0(const TableModel *model); void writeTableModel1(const TableModel *model); void writeTableModel2(const TableModel *model); - void writeTableAxis(TableAxisPtr axis, + void writeTableAxis(const TableAxis *axis, int index); const char *asString(bool value); @@ -197,11 +197,11 @@ LibertyWriter::writeTableTemplates() } void -LibertyWriter::writeTableTemplate(TableTemplate *tbl_template) +LibertyWriter::writeTableTemplate(const TableTemplate *tbl_template) { - TableAxisPtr axis1 = tbl_template->axis1(); - TableAxisPtr axis2 = tbl_template->axis2(); - TableAxisPtr axis3 = tbl_template->axis3(); + const TableAxis *axis1 = tbl_template->axis1(); + const TableAxis *axis2 = tbl_template->axis2(); + const TableAxis *axis3 = tbl_template->axis3(); // skip scalar templates if (axis1) { fprintf(stream_, " lu_table_template(%s) {\n", tbl_template->name()); @@ -224,7 +224,7 @@ LibertyWriter::writeTableTemplate(TableTemplate *tbl_template) } void -LibertyWriter::writeTableAxis(TableAxisPtr axis, +LibertyWriter::writeTableAxis(const TableAxis *axis, int index) { fprintf(stream_, " index_%d (\"", index); diff --git a/liberty/TableModel.cc b/liberty/TableModel.cc index 42e30724..4d7fe4df 100644 --- a/liberty/TableModel.cc +++ b/liberty/TableModel.cc @@ -318,7 +318,7 @@ GateTableModel::axisValue(const TableAxis *axis, } bool -GateTableModel::checkAxes(const TablePtr table) +GateTableModel::checkAxes(const TablePtr &table) { const TableAxis *axis1 = table->axis1(); const TableAxis *axis2 = table->axis2(); @@ -1606,11 +1606,11 @@ OutputWaveforms::~OutputWaveforms() } bool -OutputWaveforms::checkAxes(TableTemplate *tbl_template) +OutputWaveforms::checkAxes(const TableTemplate *tbl_template) { - TableAxisPtr axis1 = tbl_template->axis1(); - TableAxisPtr axis2 = tbl_template->axis2(); - TableAxisPtr axis3 = tbl_template->axis3(); + const TableAxis *axis1 = tbl_template->axis1(); + const TableAxis *axis2 = tbl_template->axis2(); + const TableAxis *axis3 = tbl_template->axis3(); return (axis1 && axis1->variable() == TableAxisVariable::input_net_transition && axis2->variable() == TableAxisVariable::time && axis3 == nullptr)