From eb279c6dbe2e9359e2c5eb5407b1ca1e23e2e04f Mon Sep 17 00:00:00 2001 From: Guillaume Horel Date: Fri, 28 Apr 2023 11:42:02 -0400 Subject: finish packing format for spread curve --- pyisda/curve.pyx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pyisda/curve.pyx b/pyisda/curve.pyx index 02bf22a..1322c9e 100644 --- a/pyisda/curve.pyx +++ b/pyisda/curve.pyx @@ -96,7 +96,7 @@ cdef class Curve(object): elif fmt == 0: r = self.buf.get()[:self.buf_size] elif fmt == 2: - packed_size = sizeof(TCurve) + curve.fNumItems * (sizeof(double) + sizeof(uint16_t)) + packed_size = size - curve.fNumItems * (sizeof(TDate) - sizeof(uint16_t)) r = PyBytes_FromStringAndSize(NULL, packed_size) dst = PyBytes_AS_STRING(r) src = curve @@ -108,6 +108,11 @@ cdef class Curve(object): (dst)[i] = (src)[i].fDate - ref_date ref_date = (src)[i].fDate ((dst + curve.fNumItems * sizeof(uint16_t)))[i] = (src)[i].fRate + size -= sizeof(TCurve) + curve.fNumItems * sizeof(TRatePt) + if size > 0: + src += curve.fNumItems * sizeof(TRatePt) + dst += curve.fNumItems * (sizeof(double) + sizeof(uint16_t)) + memcpy(dst, src, size) return r def __getstate__(self): -- cgit v1.2.3-70-g09d2