@@ -55,6 +55,40 @@ static inline uint32_t load_le32(const char *c) {
5555
5656static const int hdr_size = sizeof (uint32_t );
5757
58+
59+ static PyObject * py_lz4_compress_fast (PyObject * self , PyObject * args ) {
60+ PyObject * result ;
61+ const char * source ;
62+ int source_size ;
63+ char * dest ;
64+ int dest_size ;
65+ int acceleration ;
66+
67+ if (!PyArg_ParseTuple (args , "s#I" , & source , & source_size , & acceleration ))
68+ return NULL ;
69+
70+ dest_size = hdr_size + LZ4_compressBound (source_size );
71+ result = PyBytes_FromStringAndSize (NULL , dest_size );
72+ if (result == NULL ) {
73+ return NULL ;
74+ }
75+ dest = PyBytes_AS_STRING (result );
76+ store_le32 (dest , source_size );
77+ if (source_size > 0 ) {
78+ //int LZ4_compress_fast(const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration)
79+ int osize = LZ4_compress_fast (source , dest + hdr_size , source_size , LZ4_compressBound (source_size ), acceleration );
80+ int actual_size = hdr_size + osize ;
81+ /* Resizes are expensive; tolerate some slop to avoid. */
82+ if (actual_size < (dest_size / 4 ) * 3 ) {
83+ _PyBytes_Resize (& result , actual_size );
84+ } else {
85+ Py_SIZE (result ) = actual_size ;
86+ }
87+ }
88+ return result ;
89+ }
90+
91+
5892static PyObject * compress_with (compressor compress , PyObject * self , PyObject * args ) {
5993 PyObject * result ;
6094 const char * source ;
@@ -126,9 +160,11 @@ static PyObject *py_lz4_uncompress(PyObject *self, PyObject *args) {
126160}
127161
128162static PyMethodDef Lz4Methods [] = {
163+ {"LZ4_compress_fast" , py_lz4_compress_fast , METH_VARARGS , COMPRESSFAST_DOCSTRING },
129164 {"LZ4_compress" , py_lz4_compress , METH_VARARGS , COMPRESS_DOCSTRING },
130165 {"LZ4_uncompress" , py_lz4_uncompress , METH_VARARGS , UNCOMPRESS_DOCSTRING },
131166 {"compress" , py_lz4_compress , METH_VARARGS , COMPRESS_DOCSTRING },
167+ {"compress_fast" , py_lz4_compress_fast , METH_VARARGS , COMPRESS_DOCSTRING },
132168 {"compressHC" , py_lz4_compressHC , METH_VARARGS , COMPRESSHC_DOCSTRING },
133169 {"uncompress" , py_lz4_uncompress , METH_VARARGS , UNCOMPRESS_DOCSTRING },
134170 {"decompress" , py_lz4_uncompress , METH_VARARGS , UNCOMPRESS_DOCSTRING },
0 commit comments