/** * Copyright (c) 2016-present, Gregory Szorc * All rights reserved. * * This software may be modified and distributed under the terms * of the BSD license. See the LICENSE file for details. */ #include "python-zstandard.h" extern PyObject* ZstdError; static char frame_header[] = { '\x28', '\xb5', '\x2f', '\xfd', }; void constants_module_init(PyObject* mod) { PyObject* version; PyObject* zstdVersion; PyObject* frameHeader; #if PY_MAJOR_VERSION >= 3 version = PyUnicode_FromString(PYTHON_ZSTANDARD_VERSION); #else version = PyString_FromString(PYTHON_ZSTANDARD_VERSION); #endif Py_INCREF(version); PyModule_AddObject(mod, "__version__", version); ZstdError = PyErr_NewException("zstd.ZstdError", NULL, NULL); PyModule_AddObject(mod, "ZstdError", ZstdError); /* For now, the version is a simple tuple instead of a dedicated type. */ zstdVersion = PyTuple_New(3); PyTuple_SetItem(zstdVersion, 0, PyLong_FromLong(ZSTD_VERSION_MAJOR)); PyTuple_SetItem(zstdVersion, 1, PyLong_FromLong(ZSTD_VERSION_MINOR)); PyTuple_SetItem(zstdVersion, 2, PyLong_FromLong(ZSTD_VERSION_RELEASE)); Py_IncRef(zstdVersion); PyModule_AddObject(mod, "ZSTD_VERSION", zstdVersion); frameHeader = PyBytes_FromStringAndSize(frame_header, sizeof(frame_header)); if (frameHeader) { PyModule_AddObject(mod, "FRAME_HEADER", frameHeader); } else { PyErr_Format(PyExc_ValueError, "could not create frame header object"); } PyModule_AddIntConstant(mod, "MAX_COMPRESSION_LEVEL", ZSTD_maxCLevel()); PyModule_AddIntConstant(mod, "COMPRESSION_RECOMMENDED_INPUT_SIZE", (long)ZSTD_CStreamInSize()); PyModule_AddIntConstant(mod, "COMPRESSION_RECOMMENDED_OUTPUT_SIZE", (long)ZSTD_CStreamOutSize()); PyModule_AddIntConstant(mod, "DECOMPRESSION_RECOMMENDED_INPUT_SIZE", (long)ZSTD_DStreamInSize()); PyModule_AddIntConstant(mod, "DECOMPRESSION_RECOMMENDED_OUTPUT_SIZE", (long)ZSTD_DStreamOutSize()); PyModule_AddIntConstant(mod, "MAGIC_NUMBER", ZSTD_MAGICNUMBER); PyModule_AddIntConstant(mod, "WINDOWLOG_MIN", ZSTD_WINDOWLOG_MIN); PyModule_AddIntConstant(mod, "WINDOWLOG_MAX", ZSTD_WINDOWLOG_MAX); PyModule_AddIntConstant(mod, "CHAINLOG_MIN", ZSTD_CHAINLOG_MIN); PyModule_AddIntConstant(mod, "CHAINLOG_MAX", ZSTD_CHAINLOG_MAX); PyModule_AddIntConstant(mod, "HASHLOG_MIN", ZSTD_HASHLOG_MIN); PyModule_AddIntConstant(mod, "HASHLOG_MAX", ZSTD_HASHLOG_MAX); PyModule_AddIntConstant(mod, "HASHLOG3_MAX", ZSTD_HASHLOG3_MAX); PyModule_AddIntConstant(mod, "SEARCHLOG_MIN", ZSTD_SEARCHLOG_MIN); PyModule_AddIntConstant(mod, "SEARCHLOG_MAX", ZSTD_SEARCHLOG_MAX); PyModule_AddIntConstant(mod, "SEARCHLENGTH_MIN", ZSTD_SEARCHLENGTH_MIN); PyModule_AddIntConstant(mod, "SEARCHLENGTH_MAX", ZSTD_SEARCHLENGTH_MAX); PyModule_AddIntConstant(mod, "TARGETLENGTH_MIN", ZSTD_TARGETLENGTH_MIN); PyModule_AddIntConstant(mod, "TARGETLENGTH_MAX", ZSTD_TARGETLENGTH_MAX); PyModule_AddIntConstant(mod, "STRATEGY_FAST", ZSTD_fast); PyModule_AddIntConstant(mod, "STRATEGY_DFAST", ZSTD_dfast); PyModule_AddIntConstant(mod, "STRATEGY_GREEDY", ZSTD_greedy); PyModule_AddIntConstant(mod, "STRATEGY_LAZY", ZSTD_lazy); PyModule_AddIntConstant(mod, "STRATEGY_LAZY2", ZSTD_lazy2); PyModule_AddIntConstant(mod, "STRATEGY_BTLAZY2", ZSTD_btlazy2); PyModule_AddIntConstant(mod, "STRATEGY_BTOPT", ZSTD_btopt); }