TableModel::axis functions return pointer

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-12-12 15:32:30 -07:00
parent 88c49f1ea7
commit 163d776afa
8 changed files with 57 additions and 57 deletions

View File

@ -92,11 +92,11 @@ protected:
float &axis_value1, float &axis_value1,
float &axis_value2, float &axis_value2,
float &axis_value3) const; float &axis_value3) const;
float axisValue(TableAxisPtr axis, float axisValue(const TableAxis *axis,
float in_slew, float in_slew,
float load_cap) const; float load_cap) const;
bool checkAxes(const TableModel *model); bool checkAxes(const TableModel *model);
bool checkAxis(TableAxisPtr axis); bool checkAxis(const TableAxis *axis);
TableModel *model_; TableModel *model_;
}; };

View File

@ -89,7 +89,7 @@ protected:
float &slew, float &slew,
float &cap) const; float &cap) const;
void setIsScaled(bool is_scaled) override; void setIsScaled(bool is_scaled) override;
float axisValue(TableAxisPtr axis, float axisValue(const TableAxis *axis,
float load_cap, float load_cap,
float in_slew, float in_slew,
float related_out_cap) const; float related_out_cap) const;
@ -113,7 +113,7 @@ protected:
float &axis_value1, float &axis_value1,
float &axis_value2, float &axis_value2,
float &axis_value3) const; float &axis_value3) const;
static bool checkAxis(TableAxisPtr axis); static bool checkAxis(const TableAxis *axis);
TableModel *delay_model_; TableModel *delay_model_;
TableModel *delay_sigma_models_[EarlyLate::index_count]; TableModel *delay_sigma_models_[EarlyLate::index_count];
@ -164,7 +164,7 @@ protected:
float &axis_value1, float &axis_value1,
float &axis_value2, float &axis_value2,
float &axis_value3) const; float &axis_value3) const;
float axisValue(TableAxisPtr axis, float axisValue(const TableAxis *axis,
float load_cap, float load_cap,
float in_slew, float in_slew,
float related_out_cap) const; float related_out_cap) const;
@ -176,7 +176,7 @@ protected:
float to_slew, float to_slew,
float related_out_cap, float related_out_cap,
int digits) const; int digits) const;
static bool checkAxis(TableAxisPtr axis); static bool checkAxis(const TableAxis *axis);
TableModel *model_; TableModel *model_;
TableModel *sigma_models_[EarlyLate::index_count]; TableModel *sigma_models_[EarlyLate::index_count];
@ -193,9 +193,9 @@ public:
void setScaleFactorType(ScaleFactorType type); void setScaleFactorType(ScaleFactorType type);
int order() const; int order() const;
TableTemplate *tblTemplate() const { return tbl_template_; } TableTemplate *tblTemplate() const { return tbl_template_; }
TableAxisPtr axis1() const; const TableAxis *axis1() const;
TableAxisPtr axis2() const; const TableAxis *axis2() const;
TableAxisPtr axis3() const; const TableAxis *axis3() const;
void setIsScaled(bool is_scaled); void setIsScaled(bool is_scaled);
float value(size_t index1, float value(size_t index1,
size_t index2, size_t index2,
@ -245,9 +245,9 @@ public:
virtual ~Table() {} virtual ~Table() {}
void setScaleFactorType(ScaleFactorType type); void setScaleFactorType(ScaleFactorType type);
virtual int order() const = 0; virtual int order() const = 0;
virtual TableAxisPtr axis1() const { return nullptr; } virtual const TableAxis *axis1() const { return nullptr; }
virtual TableAxisPtr axis2() const { return nullptr; } virtual const TableAxis *axis2() const { return nullptr; }
virtual TableAxisPtr axis3() const { return nullptr; } virtual const TableAxis *axis3() const { return nullptr; }
void setIsScaled(bool is_scaled); void setIsScaled(bool is_scaled);
virtual float value(size_t axis_idx1, virtual float value(size_t axis_idx1,
size_t axis_idx2, size_t axis_idx2,
@ -316,7 +316,7 @@ public:
Table1(Table1 &&table); Table1(Table1 &&table);
Table1 &operator= (Table1 &&table); Table1 &operator= (Table1 &&table);
int order() const override { return 1; } int order() const override { return 1; }
TableAxisPtr axis1() const override { return axis1_; } const TableAxis *axis1() const override { return axis1_.get(); }
float value(size_t axis_index1, float value(size_t axis_index1,
size_t axis_index2, size_t axis_index2,
size_t axis_index3) const override; size_t axis_index3) const override;
@ -361,8 +361,8 @@ public:
TableAxisPtr axis2); TableAxisPtr axis2);
virtual ~Table2(); virtual ~Table2();
int order() const override { return 2; } int order() const override { return 2; }
TableAxisPtr axis1() const override { return axis1_; } const TableAxis *axis1() const override { return axis1_.get(); }
TableAxisPtr axis2() const override { return axis2_; } const TableAxis *axis2() const override { return axis2_.get(); }
float value(size_t axis_index1, float value(size_t axis_index1,
size_t axis_index2, size_t axis_index2,
size_t axis_index3) const override; size_t axis_index3) const override;
@ -406,9 +406,9 @@ public:
TableAxisPtr axis3); TableAxisPtr axis3);
virtual ~Table3() {} virtual ~Table3() {}
int order() const override { return 3; } int order() const override { return 3; }
TableAxisPtr axis1() const override { return axis1_; } const TableAxis *axis1() const override { return axis1_.get(); }
TableAxisPtr axis2() const override { return axis2_; } const TableAxis *axis2() const override { return axis2_.get(); }
TableAxisPtr axis3() const override { return axis3_; } const TableAxis *axis3() const override { return axis3_.get(); }
float value(size_t axis_index1, float value(size_t axis_index1,
size_t axis_index2, size_t axis_index2,
size_t axis_index3) const override; size_t axis_index3) const override;

View File

@ -194,7 +194,7 @@ InternalPowerModel::findAxisValues(float in_slew,
} }
float float
InternalPowerModel::axisValue(TableAxisPtr axis, InternalPowerModel::axisValue(const TableAxis *axis,
float in_slew, float in_slew,
float load_cap) const float load_cap) const
{ {
@ -212,9 +212,9 @@ InternalPowerModel::axisValue(TableAxisPtr axis,
bool bool
InternalPowerModel::checkAxes(const TableModel *model) InternalPowerModel::checkAxes(const TableModel *model)
{ {
const TableAxisPtr axis1 = model->axis1(); const TableAxis *axis1 = model->axis1();
const TableAxisPtr axis2 = model->axis2(); const TableAxis *axis2 = model->axis2();
const TableAxisPtr axis3 = model->axis3(); const TableAxis *axis3 = model->axis3();
bool axis_ok = true; bool axis_ok = true;
if (axis1) if (axis1)
axis_ok &= checkAxis(model->axis1()); axis_ok &= checkAxis(model->axis1());
@ -225,7 +225,7 @@ InternalPowerModel::checkAxes(const TableModel *model)
} }
bool bool
InternalPowerModel::checkAxis(TableAxisPtr axis) InternalPowerModel::checkAxis(const TableAxis *axis)
{ {
TableAxisVariable var = axis->variable(); TableAxisVariable var = axis->variable();
return var == TableAxisVariable::constrained_pin_transition return var == TableAxisVariable::constrained_pin_transition

View File

@ -355,7 +355,7 @@ LibertyLibrary::degradeWireSlew(const TableModel *model,
case 0: case 0:
return model->findValue(0.0, 0.0, 0.0); return model->findValue(0.0, 0.0, 0.0);
case 1: { case 1: {
TableAxisPtr axis1 = model->axis1(); const TableAxis *axis1 = model->axis1();
TableAxisVariable var1 = axis1->variable(); TableAxisVariable var1 = axis1->variable();
if (var1 == TableAxisVariable::output_pin_transition) if (var1 == TableAxisVariable::output_pin_transition)
return model->findValue(in_slew, 0.0, 0.0); return model->findValue(in_slew, 0.0, 0.0);
@ -367,8 +367,8 @@ LibertyLibrary::degradeWireSlew(const TableModel *model,
} }
} }
case 2: { case 2: {
TableAxisPtr axis1 = model->axis1(); const TableAxis *axis1 = model->axis1();
TableAxisPtr axis2 = model->axis2(); const TableAxis * axis2 = model->axis2();
TableAxisVariable var1 = axis1->variable(); TableAxisVariable var1 = axis1->variable();
TableAxisVariable var2 = axis2->variable(); TableAxisVariable var2 = axis2->variable();
if (var1 == TableAxisVariable::output_pin_transition if (var1 == TableAxisVariable::output_pin_transition
@ -397,14 +397,14 @@ LibertyLibrary::checkSlewDegradationAxes(TablePtr table)
case 0: case 0:
return true; return true;
case 1: { case 1: {
TableAxisPtr axis1 = table->axis1(); const TableAxis *axis1 = table->axis1();
TableAxisVariable var1 = axis1->variable(); TableAxisVariable var1 = axis1->variable();
return var1 == TableAxisVariable::output_pin_transition return var1 == TableAxisVariable::output_pin_transition
|| var1 == TableAxisVariable::connect_delay; || var1 == TableAxisVariable::connect_delay;
} }
case 2: { case 2: {
TableAxisPtr axis1 = table->axis1(); const TableAxis *axis1 = table->axis1();
TableAxisPtr axis2 = table->axis2(); const TableAxis *axis2 = table->axis2();
TableAxisVariable var1 = axis1->variable(); TableAxisVariable var1 = axis1->variable();
TableAxisVariable var2 = axis2->variable(); TableAxisVariable var2 = axis2->variable();
return (var1 == TableAxisVariable::output_pin_transition return (var1 == TableAxisVariable::output_pin_transition

View File

@ -269,9 +269,9 @@ GateTableModel::maxCapSlew(float in_slew,
float &slew, float &slew,
float &cap) const float &cap) const
{ {
TableAxisPtr axis1 = slew_model_->axis1(); const TableAxis *axis1 = slew_model_->axis1();
TableAxisPtr axis2 = slew_model_->axis2(); const TableAxis *axis2 = slew_model_->axis2();
TableAxisPtr axis3 = slew_model_->axis3(); const TableAxis *axis3 = slew_model_->axis3();
if (axis1 if (axis1
&& axis1->variable() == TableAxisVariable::total_output_net_capacitance) { && axis1->variable() == TableAxisVariable::total_output_net_capacitance) {
cap = axis1->axisValue(axis1->size() - 1); cap = axis1->axisValue(axis1->size() - 1);
@ -298,7 +298,7 @@ GateTableModel::maxCapSlew(float in_slew,
} }
float float
GateTableModel::axisValue(TableAxisPtr axis, GateTableModel::axisValue(const TableAxis *axis,
float in_slew, float in_slew,
float load_cap, float load_cap,
float related_out_cap) const float related_out_cap) const
@ -320,9 +320,9 @@ GateTableModel::axisValue(TableAxisPtr axis,
bool bool
GateTableModel::checkAxes(const TablePtr table) GateTableModel::checkAxes(const TablePtr table)
{ {
TableAxisPtr axis1 = table->axis1(); const TableAxis *axis1 = table->axis1();
TableAxisPtr axis2 = table->axis2(); const TableAxis *axis2 = table->axis2();
TableAxisPtr axis3 = table->axis3(); const TableAxis *axis3 = table->axis3();
bool axis_ok = true; bool axis_ok = true;
if (axis1) if (axis1)
axis_ok &= checkAxis(axis1); axis_ok &= checkAxis(axis1);
@ -334,7 +334,7 @@ GateTableModel::checkAxes(const TablePtr table)
} }
bool bool
GateTableModel::checkAxis(TableAxisPtr axis) GateTableModel::checkAxis(const TableAxis *axis)
{ {
TableAxisVariable var = axis->variable(); TableAxisVariable var = axis->variable();
return var == TableAxisVariable::total_output_net_capacitance return var == TableAxisVariable::total_output_net_capacitance
@ -369,9 +369,9 @@ ReceiverModel::setCapacitanceModel(TableModel *table_model,
bool bool
ReceiverModel::checkAxes(TablePtr table) ReceiverModel::checkAxes(TablePtr table)
{ {
TableAxisPtr axis1 = table->axis1(); const TableAxis *axis1 = table->axis1();
TableAxisPtr axis2 = table->axis2(); const TableAxis *axis2 = table->axis2();
TableAxisPtr axis3 = table->axis3(); const TableAxis *axis3 = table->axis3();
return (axis1 && axis1->variable() == TableAxisVariable::input_net_transition return (axis1 && axis1->variable() == TableAxisVariable::input_net_transition
&& axis2 == nullptr && axis2 == nullptr
&& axis3 == nullptr) && axis3 == nullptr)
@ -540,7 +540,7 @@ CheckTableModel::findAxisValues(float from_slew,
} }
float float
CheckTableModel::axisValue(TableAxisPtr axis, CheckTableModel::axisValue(const TableAxis *axis,
float from_slew, float from_slew,
float to_slew, float to_slew,
float related_out_cap) const float related_out_cap) const
@ -561,9 +561,9 @@ CheckTableModel::axisValue(TableAxisPtr axis,
bool bool
CheckTableModel::checkAxes(const TablePtr table) CheckTableModel::checkAxes(const TablePtr table)
{ {
TableAxisPtr axis1 = table->axis1(); const TableAxis *axis1 = table->axis1();
TableAxisPtr axis2 = table->axis2(); const TableAxis *axis2 = table->axis2();
TableAxisPtr axis3 = table->axis3(); const TableAxis *axis3 = table->axis3();
bool axis_ok = true; bool axis_ok = true;
if (axis1) if (axis1)
axis_ok &= checkAxis(axis1); axis_ok &= checkAxis(axis1);
@ -575,7 +575,7 @@ CheckTableModel::checkAxes(const TablePtr table)
} }
bool bool
CheckTableModel::checkAxis(TableAxisPtr axis) CheckTableModel::checkAxis(const TableAxis *axis)
{ {
TableAxisVariable var = axis->variable(); TableAxisVariable var = axis->variable();
return var == TableAxisVariable::constrained_pin_transition return var == TableAxisVariable::constrained_pin_transition
@ -615,19 +615,19 @@ TableModel::setIsScaled(bool is_scaled)
is_scaled_ = is_scaled; is_scaled_ = is_scaled;
} }
TableAxisPtr const TableAxis *
TableModel::axis1() const TableModel::axis1() const
{ {
return table_->axis1(); return table_->axis1();
} }
TableAxisPtr const TableAxis *
TableModel::axis2() const TableModel::axis2() const
{ {
return table_->axis2(); return table_->axis2();
} }
TableAxisPtr const TableAxis *
TableModel::axis3() const TableModel::axis3() const
{ {
return table_->axis3(); return table_->axis3();
@ -1778,7 +1778,7 @@ OutputWaveforms::findVoltages(size_t wave_index,
// i = C dv/dt // i = C dv/dt
FloatSeq volts; FloatSeq volts;
Table1 *currents = current_waveforms_[wave_index]; Table1 *currents = current_waveforms_[wave_index];
TableAxisPtr time_axis = currents->axis1(); const TableAxis *time_axis = currents->axis1();
float prev_time = time_axis->axisValue(0); float prev_time = time_axis->axisValue(0);
float prev_current = currents->value(0); float prev_current = currents->value(0);
float voltage = 0.0; float voltage = 0.0;
@ -1901,7 +1901,7 @@ DriverWaveform::~DriverWaveform()
Table1 Table1
DriverWaveform::waveform(float slew) DriverWaveform::waveform(float slew)
{ {
TableAxisPtr volt_axis = waveforms_->axis2(); const TableAxis *volt_axis = waveforms_->axis2();
FloatSeq *time_values = new FloatSeq; FloatSeq *time_values = new FloatSeq;
FloatSeq *volt_values = new FloatSeq; FloatSeq *volt_values = new FloatSeq;
for (float volt : *volt_axis->values()) { for (float volt : *volt_axis->values()) {

View File

@ -660,7 +660,7 @@ MakeTimingModel::makeGateModelTable(const Pin *output_pin,
const TableModel *drvr_table = drvr_gate_model->delayModel(); const TableModel *drvr_table = drvr_gate_model->delayModel();
const TableTemplate *drvr_template = drvr_table->tblTemplate(); const TableTemplate *drvr_template = drvr_table->tblTemplate();
const TableAxisPtr drvr_load_axis = loadCapacitanceAxis(drvr_table); const TableAxis *drvr_load_axis = loadCapacitanceAxis(drvr_table);
if (drvr_load_axis) { if (drvr_load_axis) {
const FloatSeq *drvr_axis_values = drvr_load_axis->values(); const FloatSeq *drvr_axis_values = drvr_load_axis->values();
FloatSeq *load_values = new FloatSeq; FloatSeq *load_values = new FloatSeq;
@ -726,7 +726,7 @@ MakeTimingModel::ensureTableTemplate(const TableTemplate *drvr_template,
return model_template; return model_template;
} }
TableAxisPtr const TableAxis *
MakeTimingModel::loadCapacitanceAxis(const TableModel *table) MakeTimingModel::loadCapacitanceAxis(const TableModel *table)
{ {
if (table->axis1() if (table->axis1()

View File

@ -82,7 +82,7 @@ private:
const RiseFall *rf); const RiseFall *rf);
TableTemplate *ensureTableTemplate(const TableTemplate *drvr_template, TableTemplate *ensureTableTemplate(const TableTemplate *drvr_template,
TableAxisPtr load_axis); TableAxisPtr load_axis);
TableAxisPtr loadCapacitanceAxis(const TableModel *table); const TableAxis *loadCapacitanceAxis(const TableModel *table);
LibertyPort *modelPort(const Pin *pin); LibertyPort *modelPort(const Pin *pin);
void saveSdc(); void saveSdc();

View File

@ -584,7 +584,7 @@ WritePathSpice::writeWaveformVoltSource(const Pin *pin,
network_->pathName(pin)); network_->pathName(pin));
streamPrint(spice_stream_, "+%.3e %.3e\n", 0.0, volt0); streamPrint(spice_stream_, "+%.3e %.3e\n", 0.0, volt0);
Table1 waveform = drvr_waveform->waveform(slew); Table1 waveform = drvr_waveform->waveform(slew);
TableAxisPtr time_axis = waveform.axis1(); const TableAxis *time_axis = waveform.axis1();
for (size_t time_index = 0; time_index < time_axis->size(); time_index++) { for (size_t time_index = 0; time_index < time_axis->size(); time_index++) {
float time = time_axis->axisValue(time_index); float time = time_axis->axisValue(time_index);
float wave_volt = waveform.value(time_index); float wave_volt = waveform.value(time_index);
@ -705,19 +705,19 @@ WritePathSpice::slewAxisMinValue(TimingArc *arc)
GateTableModel *gate_model = dynamic_cast<GateTableModel*>(arc->model()); GateTableModel *gate_model = dynamic_cast<GateTableModel*>(arc->model());
if (gate_model) { if (gate_model) {
const TableModel *model = gate_model->delayModel(); const TableModel *model = gate_model->delayModel();
TableAxisPtr axis1 = model->axis1(); const TableAxis *axis1 = model->axis1();
TableAxisVariable var1 = axis1->variable(); TableAxisVariable var1 = axis1->variable();
if (var1 == TableAxisVariable::input_transition_time if (var1 == TableAxisVariable::input_transition_time
|| var1 == TableAxisVariable::input_net_transition) || var1 == TableAxisVariable::input_net_transition)
return axis1->axisValue(0); return axis1->axisValue(0);
TableAxisPtr axis2 = model->axis2(); const TableAxis *axis2 = model->axis2();
TableAxisVariable var2 = axis2->variable(); TableAxisVariable var2 = axis2->variable();
if (var2 == TableAxisVariable::input_transition_time if (var2 == TableAxisVariable::input_transition_time
|| var2 == TableAxisVariable::input_net_transition) || var2 == TableAxisVariable::input_net_transition)
return axis2->axisValue(0); return axis2->axisValue(0);
TableAxisPtr axis3 = model->axis3(); const TableAxis *axis3 = model->axis3();
TableAxisVariable var3 = axis3->variable(); TableAxisVariable var3 = axis3->variable();
if (var3 == TableAxisVariable::input_transition_time if (var3 == TableAxisVariable::input_transition_time
|| var3 == TableAxisVariable::input_net_transition) || var3 == TableAxisVariable::input_net_transition)