1b3a3667创建于 2025年7月30日历史提交
/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
 * This source file is part of the Cangjie project, licensed under Apache-2.0
 * with Runtime Library Exception.
 *
 * See https://cangjie-lang.cn/pages/LICENSE for license information.
 */

/**
 * @file
 *
 * This is a class library that implements compression functions.
 * Provides streaming compression interfaces such as deflateInit, deflate, deflateEnd, deflateBound, setGzipHeader, and setDictionary.
 */
package stdx.compress.zlib

@When[os == "Windows"]
@C
struct ZlibStream {
    var nextIn: CPointer<UInt8>
    var availIn: UInt32
    var totalIn: UInt32
    var nextOut: CPointer<UInt8>
    var availOut: UInt32
    var totalOut: UInt32
    init(
        nextIn!: CPointer<UInt8>,
        availIn!: UInt32,
        totalIn!: UInt32,
        nextOut!: CPointer<UInt8>,
        availOut!: UInt32,
        totalOut!: UInt32
    ) {
        this.nextIn = nextIn
        this.availIn = availIn
        this.totalIn = totalIn
        this.nextOut = nextOut
        this.availOut = availOut
        this.totalOut = totalOut
    }
}

@When[os != "Windows"]
@C
struct ZlibStream {
    var nextIn: CPointer<UInt8>
    var availIn: UInt32
    var totalIn: UInt64
    var nextOut: CPointer<UInt8>
    var availOut: UInt32
    var totalOut: UInt64
    init(
        nextIn!: CPointer<UInt8>,
        availIn!: UInt32,
        totalIn!: UInt64,
        nextOut!: CPointer<UInt8>,
        availOut!: UInt32,
        totalOut!: UInt64
    ) {
        this.nextIn = nextIn
        this.availIn = availIn
        this.totalIn = totalIn
        this.nextOut = nextOut
        this.availOut = availOut
        this.totalOut = totalOut
    }
}

@FastNative
foreign func CJ_CreateZlibStream(): CPointer<ZlibStream>

@FastNative
foreign func CJ_SetInput(nextIn: CPointer<UInt8>, availIn: UInt32, zlibStream: CPointer<ZlibStream>): Unit

@FastNative
foreign func CJ_SetOutput(nextOut: CPointer<UInt8>, availOut: UInt32, zlibStream: CPointer<ZlibStream>): Unit

@FastNative
foreign func CJ_FreeZlibStream(zlibStream: CPointer<ZlibStream>): Unit

@FastNative
foreign func CJ_ZlibStreamEncodeInit(level: Int32, winBits: Int32, memLevel: Int32, strategy: Int32,
    zlibStream: CPointer<ZlibStream>): Int32

@FastNative
foreign func CJ_ZlibStreamEncode(zlibStream: CPointer<ZlibStream>, flushType: Int32): Int32

@FastNative
foreign func CJ_ZlibStreamEncodeFini(zlibStream: CPointer<ZlibStream>): Int32

@FastNative
foreign func CJ_ZlibStreamDecodeInit(zlibStream: CPointer<ZlibStream>, winBits: Int32): Int32

@FastNative
foreign func CJ_ZlibStreamDecode(zlibStream: CPointer<ZlibStream>, flushType: Int32): Int32

@FastNative
foreign func CJ_ZlibStreamDecodeFini(zlibStream: CPointer<ZlibStream>): Int32