Skip to content

Commit 7b1e714

Browse files
committed
Limit python overhead in bufsize determination
1 parent 96a37cd commit 7b1e714

File tree

1 file changed

+29
-28
lines changed

1 file changed

+29
-28
lines changed

src/isal/isal_zlib.pyx

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,8 @@ def compress(data,
200200
"""
201201
# Initialise stream
202202
cdef isal_zstream stream
203-
cdef unsigned int level_buf_size = zlib_mem_level_to_isal(level, DEF_MEM_LEVEL_I)
203+
cdef unsigned int level_buf_size
204+
zlib_mem_level_to_isal_bufsize(level, DEF_MEM_LEVEL_I, &level_buf_size)
204205
cdef unsigned char* level_buf = <unsigned char*> PyMem_Malloc(level_buf_size * sizeof(char))
205206
isal_deflate_init(&stream)
206207
stream.level = level
@@ -416,7 +417,7 @@ cdef class Compress:
416417
if err != COMP_OK:
417418
check_isal_deflate_rc(err)
418419
self.stream.level = level
419-
self.stream.level_buf_size = zlib_mem_level_to_isal(level, memLevel)
420+
zlib_mem_level_to_isal_bufsize(level, memLevel, &self.stream.level_buf_size)
420421
self.level_buf = <unsigned char *>PyMem_Malloc(self.stream.level_buf_size * sizeof(char))
421422
self.stream.level_buf = self.level_buf
422423

@@ -749,7 +750,7 @@ cdef wbits_to_flag_and_hist_bits_inflate(int wbits,
749750
else:
750751
raise ValueError("Invalid wbits value")
751752

752-
cdef zlib_mem_level_to_isal(int compression_level, int mem_level):
753+
cdef zlib_mem_level_to_isal_bufsize(int compression_level, int mem_level, unsigned int *bufsize):
753754
"""
754755
Convert zlib memory levels to isal equivalents
755756
"""
@@ -763,59 +764,59 @@ cdef zlib_mem_level_to_isal(int compression_level, int mem_level):
763764
# Hence 7,8 return large. 9 returns extra large.
764765
if mem_level == DEF_MEM_LEVEL_I:
765766
if compression_level == 0:
766-
return ISAL_DEF_LVL0_DEFAULT
767+
bufsize[0] = ISAL_DEF_LVL0_DEFAULT
767768
elif compression_level == 1:
768-
return ISAL_DEF_LVL1_DEFAULT
769+
bufsize[0] = ISAL_DEF_LVL1_DEFAULT
769770
elif compression_level == 2:
770-
return ISAL_DEF_LVL2_DEFAULT
771+
bufsize[0] = ISAL_DEF_LVL2_DEFAULT
771772
elif compression_level == 3:
772-
return ISAL_DEF_LVL3_DEFAULT
773+
bufsize[0] = ISAL_DEF_LVL3_DEFAULT
773774
if mem_level == 1:
774775
if compression_level == 0:
775-
return ISAL_DEF_LVL0_MIN
776+
bufsize[0] = ISAL_DEF_LVL0_MIN
776777
elif compression_level == 1:
777-
return ISAL_DEF_LVL1_MIN
778+
bufsize[0] = ISAL_DEF_LVL1_MIN
778779
elif compression_level == 2:
779-
return ISAL_DEF_LVL2_MIN
780+
bufsize[0] = ISAL_DEF_LVL2_MIN
780781
elif compression_level == 3:
781-
return ISAL_DEF_LVL3_MIN
782+
bufsize[0] = ISAL_DEF_LVL3_MIN
782783
elif mem_level in [2,3]:
783784
if compression_level == 0:
784-
return ISAL_DEF_LVL0_SMALL
785+
bufsize[0] = ISAL_DEF_LVL0_SMALL
785786
elif compression_level == 1:
786-
return ISAL_DEF_LVL1_SMALL
787+
bufsize[0] = ISAL_DEF_LVL1_SMALL
787788
elif compression_level == 2:
788-
return ISAL_DEF_LVL2_SMALL
789+
bufsize[0] = ISAL_DEF_LVL2_SMALL
789790
elif compression_level == 3:
790-
return ISAL_DEF_LVL3_SMALL
791+
bufsize[0] = ISAL_DEF_LVL3_SMALL
791792
elif mem_level in [4,5,6]:
792793
if compression_level == 0:
793-
return ISAL_DEF_LVL0_MEDIUM
794+
bufsize[0] = ISAL_DEF_LVL0_MEDIUM
794795
elif compression_level == 1:
795-
return ISAL_DEF_LVL1_MEDIUM
796+
bufsize[0] = ISAL_DEF_LVL1_MEDIUM
796797
elif compression_level == 2:
797-
return ISAL_DEF_LVL2_MEDIUM
798+
bufsize[0] = ISAL_DEF_LVL2_MEDIUM
798799
elif compression_level == 3:
799-
return ISAL_DEF_LVL3_MEDIUM
800+
bufsize[0] = ISAL_DEF_LVL3_MEDIUM
800801
elif mem_level in [7,8]:
801802
if compression_level == 0:
802-
return ISAL_DEF_LVL0_LARGE
803+
bufsize[0] = ISAL_DEF_LVL0_LARGE
803804
elif compression_level == 1:
804-
return ISAL_DEF_LVL1_LARGE
805+
bufsize[0] = ISAL_DEF_LVL1_LARGE
805806
elif compression_level == 2:
806-
return ISAL_DEF_LVL2_LARGE
807+
bufsize[0] = ISAL_DEF_LVL2_LARGE
807808
elif compression_level == 3:
808-
return ISAL_DEF_LVL3_LARGE
809+
bufsize[0] = ISAL_DEF_LVL3_LARGE
809810
elif mem_level == 9:
810811
if compression_level == 0:
811-
return ISAL_DEF_LVL0_EXTRA_LARGE
812+
bufsize[0] = ISAL_DEF_LVL0_EXTRA_LARGE
812813
elif compression_level == 1:
813-
return ISAL_DEF_LVL1_EXTRA_LARGE
814+
bufsize[0] = ISAL_DEF_LVL1_EXTRA_LARGE
814815
elif compression_level == 2:
815-
return ISAL_DEF_LVL2_EXTRA_LARGE
816+
bufsize[0] = ISAL_DEF_LVL2_EXTRA_LARGE
816817
elif compression_level == 3:
817-
return ISAL_DEF_LVL3_EXTRA_LARGE
818-
raise ValueError("Incorrect memory level or compression level.")
818+
bufsize[0] = ISAL_DEF_LVL3_EXTRA_LARGE
819+
819820

820821
cdef check_isal_deflate_rc(int rc):
821822
if rc == COMP_OK:

0 commit comments

Comments
 (0)