[pypy-svn] r50954 - pypy/dist/pypy/module/struct
fijal at codespeak.net
fijal at codespeak.net
Thu Jan 24 11:51:31 CET 2008
Author: fijal
Date: Thu Jan 24 11:51:30 2008
New Revision: 50954
Modified:
pypy/dist/pypy/module/struct/nativefmttable.py
Log:
Use single buffer instead of allocating one per-cast. (I want to have
cast_int_to_float operation anyway)
Modified: pypy/dist/pypy/module/struct/nativefmttable.py
==============================================================================
--- pypy/dist/pypy/module/struct/nativefmttable.py (original)
+++ pypy/dist/pypy/module/struct/nativefmttable.py Thu Jan 24 11:51:30 2008
@@ -16,51 +16,38 @@
# ____________________________________________________________
+double_buf = lltype.malloc(rffi.DOUBLEP.TO, 1, flavor='raw', immortal=True)
+float_buf = lltype.malloc(rffi.FLOATP.TO, 1, flavor='raw', immortal=True)
+
def pack_double(fmtiter):
doubleval = fmtiter.accept_float_arg()
- buf = lltype.malloc(rffi.DOUBLEP.TO, 1, flavor='raw')
- try:
- buf[0] = doubleval
- p = rffi.cast(rffi.CCHARP, buf)
- for i in range(sizeof_double):
- fmtiter.result.append(p[i])
- finally:
- lltype.free(buf, flavor='raw')
+ double_buf[0] = doubleval
+ p = rffi.cast(rffi.CCHARP, double_buf)
+ for i in range(sizeof_double):
+ fmtiter.result.append(p[i])
def unpack_double(fmtiter):
input = fmtiter.read(sizeof_double)
- buf = lltype.malloc(rffi.DOUBLEP.TO, 1, flavor='raw')
- try:
- p = rffi.cast(rffi.CCHARP, buf)
- for i in range(sizeof_double):
- p[i] = input[i]
- doubleval = buf[0]
- finally:
- lltype.free(buf, flavor='raw')
+ p = rffi.cast(rffi.CCHARP, double_buf)
+ for i in range(sizeof_double):
+ p[i] = input[i]
+ doubleval = double_buf[0]
fmtiter.appendobj(doubleval)
def pack_float(fmtiter):
doubleval = fmtiter.accept_float_arg()
floatval = r_singlefloat(doubleval)
- buf = lltype.malloc(rffi.FLOATP.TO, 1, flavor='raw')
- try:
- buf[0] = floatval
- p = rffi.cast(rffi.CCHARP, buf)
- for i in range(sizeof_float):
- fmtiter.result.append(p[i])
- finally:
- lltype.free(buf, flavor='raw')
+ float_buf[0] = floatval
+ p = rffi.cast(rffi.CCHARP, float_buf)
+ for i in range(sizeof_float):
+ fmtiter.result.append(p[i])
def unpack_float(fmtiter):
input = fmtiter.read(sizeof_float)
- buf = lltype.malloc(rffi.FLOATP.TO, 1, flavor='raw')
- try:
- p = rffi.cast(rffi.CCHARP, buf)
- for i in range(sizeof_float):
- p[i] = input[i]
- floatval = buf[0]
- finally:
- lltype.free(buf, flavor='raw')
+ p = rffi.cast(rffi.CCHARP, float_buf)
+ for i in range(sizeof_float):
+ p[i] = input[i]
+ floatval = float_buf[0]
doubleval = float(floatval)
fmtiter.appendobj(doubleval)
More information about the Pypy-commit
mailing list