diff options
| -rw-r--r-- | pyisda/credit_index.pyx | 23 | ||||
| -rw-r--r-- | pyisda/curve.pyx | 2 |
2 files changed, 15 insertions, 10 deletions
diff --git a/pyisda/credit_index.pyx b/pyisda/credit_index.pyx index 0f76e6d..ea26d3d 100644 --- a/pyisda/credit_index.pyx +++ b/pyisda/credit_index.pyx @@ -14,8 +14,7 @@ from .legs cimport (JpmcdsCdsContingentLegMake, JpmcdsCdsFeeLegMake, from .curve cimport (SpreadCurve, JpmcdsCopyCurve, tweak_curve, YieldCurve, JpmcdsFreeTCurve, survival_prob, Hash64WithSeed, Hash64, uint64_t, CurveName, - Seniority, DocClause, JpmcdsCdsParSpreads, name_offset_from_buf, - buf_size) + Seniority, DocClause, JpmcdsCdsParSpreads, name_offset_from_buf) from .date cimport (pydate_to_TDate, TDate_to_pydate, JpmcdsDtFwdAny, TDateInterval, JpmcdsMakeDateInterval) from .cdsone cimport JpmcdsStringToStubMethod, TStubMethod @@ -223,14 +222,13 @@ cdef class CurveList: def __deepcopy__(self, memo): cdef: - size_t i = 0 CurveList copy = CurveList.__new__(CurveList) char* buf char* new_buf - int n TCurve* curve int size CurveName cn + uint16_t offset copy.base_date = self.base_date copy._weights = self._weights copy.base_date = self.base_date @@ -238,10 +236,13 @@ cdef class CurveList: copy.offset_recovery_rates = self.offset_recovery_rates for p in self.names: buf = self._curves[p.second].get() - size = buf_size((<TCurve*>buf).fNumItems, p.first.ticker.size()) + offset = p.first.name - buf + size = offset + p.first.size() new_buf = <char*>malloc(size) memcpy(new_buf, buf, size) - cn = CurveName(new_buf + name_offset_from_buf(new_buf)) + curve = <TCurve*>new_buf + curve.fArray = <TRatePt*>(new_buf + sizeof(TCurve)) + cn = CurveName(new_buf + offset) copy._curves[p.second] = shared_ptr[char](new_buf, char_free) copy.names[cn] = p.second copy.tickers = self.tickers @@ -326,11 +327,13 @@ cdef class CreditIndex(CurveList): pair[CurveName, size_t] p char* buf int n + uint16_t offset for p in self.names: buf = self._curves[p.second].get() n = (<TCurve*>buf).fNumItems - h ^= Hash64(<char*>buf, buf_size(n, p.first.ticker.size())) + offset = p.first.name - buf + h ^= Hash64(buf, offset + p.first.size()) h = Hash64WithSeed(<char*>&self._start_date, sizeof(TDate), h) h = Hash64WithSeed(<char*>&self.base_date, sizeof(TDate), h) @@ -605,6 +608,7 @@ cdef class CreditIndex(CurveList): char* newbuf size_t i CurveName cn + uint16_t offset if inplace: for i in range(self._curves.size()): sc_orig = <TCurve*>(self._curves[i].get()) @@ -613,8 +617,9 @@ cdef class CreditIndex(CurveList): else: for i in range(self._curves.size()): buf = self._curves[i].get() - cn = CurveName(buf + name_offset_from_buf(buf)) - buf_size = cn.size() + name_offset_from_buf(buf) + offset = name_offset_from_buf(buf) + cn = CurveName(buf + offset) + buf_size = cn.size() + offset new_buf = <char*>malloc(buf_size) memcpy(new_buf, buf, buf_size) sc_orig = <TCurve*>buf diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx index 5f6a125..5f98f4a 100644 --- a/pyisda/curve.pyx +++ b/pyisda/curve.pyx @@ -728,7 +728,7 @@ cdef class SpreadCurve(Curve): JpmcdsFreeTCurve(curve) else: self.buf_size = buf_size(curve.fNumItems, ticker_len) - buf = <char*>malloc(buf_size(curve.fNumItems, ticker_len)) + buf = <char*>malloc(self.buf_size) memcpy(buf, curve, sizeof(TCurve)) memcpy(buf + sizeof(TCurve), curve.fArray, curve.fNumItems * sizeof(TRatePt)) (<TCurve*>buf).fArray = <TRatePt*>(buf + sizeof(TCurve)) |
