From 9065d915db21f2ffde324a05b6f51f5086764eb7 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Tue, 5 May 2026 17:25:09 -0700 Subject: [PATCH] copy() use copy constructors Signed-off-by: James Cherry --- dcalc/ArnoldiDelayCalc.cc | 13 ++++++++++++- dcalc/CcsCeffDelayCalc.cc | 15 +++++++++++++-- dcalc/CcsCeffDelayCalc.hh | 1 + dcalc/LumpedCapDelayCalc.cc | 2 +- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/dcalc/ArnoldiDelayCalc.cc b/dcalc/ArnoldiDelayCalc.cc index 502a73eb..0fda825f 100644 --- a/dcalc/ArnoldiDelayCalc.cc +++ b/dcalc/ArnoldiDelayCalc.cc @@ -127,6 +127,7 @@ class ArnoldiDelayCalc : public LumpedCapDelayCalc { public: ArnoldiDelayCalc(StaState *sta); + ArnoldiDelayCalc(const ArnoldiDelayCalc &dcalc); ~ArnoldiDelayCalc() override; ArcDelayCalc *copy() override; std::string_view name() const override { return "arnoldi"; } @@ -262,10 +263,20 @@ ArnoldiDelayCalc::ArnoldiDelayCalc(StaState *sta) : _slewV = (double*)malloc(_pinNmax * sizeof(double)); } +ArnoldiDelayCalc::ArnoldiDelayCalc(const ArnoldiDelayCalc &dcalc) : + LumpedCapDelayCalc(dcalc), + reduce_(new ArnoldiReduce(this)), + delay_work_(delay_work_create()) +{ + _pinNmax = dcalc._pinNmax; + _delayV = (double*)malloc(_pinNmax * sizeof(double)); + _slewV = (double*)malloc(_pinNmax * sizeof(double)); +} + ArcDelayCalc * ArnoldiDelayCalc::copy() { - return new ArnoldiDelayCalc(this); + return new ArnoldiDelayCalc(*this); } ArnoldiDelayCalc::~ArnoldiDelayCalc() diff --git a/dcalc/CcsCeffDelayCalc.cc b/dcalc/CcsCeffDelayCalc.cc index 848ac227..9de98d81 100644 --- a/dcalc/CcsCeffDelayCalc.cc +++ b/dcalc/CcsCeffDelayCalc.cc @@ -60,12 +60,23 @@ CcsCeffDelayCalc::CcsCeffDelayCalc(StaState *sta) : { } -CcsCeffDelayCalc::~CcsCeffDelayCalc() { delete table_dcalc_; } +CcsCeffDelayCalc::CcsCeffDelayCalc(const CcsCeffDelayCalc &dcalc) : + LumpedCapDelayCalc(dcalc), + watch_pin_values_(dcalc.network_), + capacitance_unit_(dcalc.capacitance_unit_), + table_dcalc_(makeDmpCeffElmoreDelayCalc(this)) +{ +} + +CcsCeffDelayCalc::~CcsCeffDelayCalc() +{ + delete table_dcalc_; +} ArcDelayCalc * CcsCeffDelayCalc::copy() { - return new CcsCeffDelayCalc(this); + return new CcsCeffDelayCalc(*this); } ArcDcalcResult diff --git a/dcalc/CcsCeffDelayCalc.hh b/dcalc/CcsCeffDelayCalc.hh index 07a659b9..90f27561 100644 --- a/dcalc/CcsCeffDelayCalc.hh +++ b/dcalc/CcsCeffDelayCalc.hh @@ -39,6 +39,7 @@ class CcsCeffDelayCalc : public LumpedCapDelayCalc, { public: CcsCeffDelayCalc(StaState *sta); + CcsCeffDelayCalc(const CcsCeffDelayCalc &dcalc); ~CcsCeffDelayCalc() override; ArcDelayCalc *copy() override; std::string_view name() const override { return "ccs_ceff"; } diff --git a/dcalc/LumpedCapDelayCalc.cc b/dcalc/LumpedCapDelayCalc.cc index 41ef4250..3e8c989b 100644 --- a/dcalc/LumpedCapDelayCalc.cc +++ b/dcalc/LumpedCapDelayCalc.cc @@ -54,7 +54,7 @@ LumpedCapDelayCalc::LumpedCapDelayCalc(StaState *sta) : ArcDelayCalc * LumpedCapDelayCalc::copy() { - return new LumpedCapDelayCalc(this); + return new LumpedCapDelayCalc(*this); } Parasitic *