| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 | /* * Copyright (c) Meta Platforms, Inc. and affiliates. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the * LICENSE file in the root directory of this source tree) and the GPLv2 (found * in the COPYING file in the root directory of this source tree). * You may select, at your option, one of the above-listed licenses. */#ifndef ZSTD_TRACE_H#define ZSTD_TRACE_H#if defined (__cplusplus)extern "C" {#endif#include <stddef.h>/* weak symbol support * For now, enable conservatively: * - Only GNUC * - Only ELF * - Only x86-64, i386 and aarch64 * Also, explicitly disable on platforms known not to work so they aren't * forgotten in the future. */#if !defined(ZSTD_HAVE_WEAK_SYMBOLS) && \    defined(__GNUC__) && defined(__ELF__) && \    (defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86) || defined(__aarch64__)) && \    !defined(__APPLE__) && !defined(_WIN32) && !defined(__MINGW32__) && \    !defined(__CYGWIN__) && !defined(_AIX)#  define ZSTD_HAVE_WEAK_SYMBOLS 1#else#  define ZSTD_HAVE_WEAK_SYMBOLS 0#endif#if ZSTD_HAVE_WEAK_SYMBOLS#  define ZSTD_WEAK_ATTR __attribute__((__weak__))#else#  define ZSTD_WEAK_ATTR#endif/* Only enable tracing when weak symbols are available. */#ifndef ZSTD_TRACE#  define ZSTD_TRACE ZSTD_HAVE_WEAK_SYMBOLS#endif#if ZSTD_TRACEstruct ZSTD_CCtx_s;struct ZSTD_DCtx_s;struct ZSTD_CCtx_params_s;typedef struct {    /**     * ZSTD_VERSION_NUMBER     *     * This is guaranteed to be the first member of ZSTD_trace.     * Otherwise, this struct is not stable between versions. If     * the version number does not match your expectation, you     * should not interpret the rest of the struct.     */    unsigned version;    /**     * Non-zero if streaming (de)compression is used.     */    unsigned streaming;    /**     * The dictionary ID.     */    unsigned dictionaryID;    /**     * Is the dictionary cold?     * Only set on decompression.     */    unsigned dictionaryIsCold;    /**     * The dictionary size or zero if no dictionary.     */    size_t dictionarySize;    /**     * The uncompressed size of the data.     */    size_t uncompressedSize;    /**     * The compressed size of the data.     */    size_t compressedSize;    /**     * The fully resolved CCtx parameters (NULL on decompression).     */    struct ZSTD_CCtx_params_s const* params;    /**     * The ZSTD_CCtx pointer (NULL on decompression).     */    struct ZSTD_CCtx_s const* cctx;    /**     * The ZSTD_DCtx pointer (NULL on compression).     */    struct ZSTD_DCtx_s const* dctx;} ZSTD_Trace;/** * A tracing context. It must be 0 when tracing is disabled. * Otherwise, any non-zero value returned by a tracing begin() * function is presented to any subsequent calls to end(). * * Any non-zero value is treated as tracing is enabled and not * interpreted by the library. * * Two possible uses are: * * A timestamp for when the begin() function was called. * * A unique key identifying the (de)compression, like the *   address of the [dc]ctx pointer if you need to track *   more information than just a timestamp. */typedef unsigned long long ZSTD_TraceCtx;/** * Trace the beginning of a compression call. * @param cctx The dctx pointer for the compression. *             It can be used as a key to map begin() to end(). * @returns Non-zero if tracing is enabled. The return value is *          passed to ZSTD_trace_compress_end(). */ZSTD_WEAK_ATTR ZSTD_TraceCtx ZSTD_trace_compress_begin(    struct ZSTD_CCtx_s const* cctx);/** * Trace the end of a compression call. * @param ctx The return value of ZSTD_trace_compress_begin(). * @param trace The zstd tracing info. */ZSTD_WEAK_ATTR void ZSTD_trace_compress_end(    ZSTD_TraceCtx ctx,    ZSTD_Trace const* trace);/** * Trace the beginning of a decompression call. * @param dctx The dctx pointer for the decompression. *             It can be used as a key to map begin() to end(). * @returns Non-zero if tracing is enabled. The return value is *          passed to ZSTD_trace_compress_end(). */ZSTD_WEAK_ATTR ZSTD_TraceCtx ZSTD_trace_decompress_begin(    struct ZSTD_DCtx_s const* dctx);/** * Trace the end of a decompression call. * @param ctx The return value of ZSTD_trace_decompress_begin(). * @param trace The zstd tracing info. */ZSTD_WEAK_ATTR void ZSTD_trace_decompress_end(    ZSTD_TraceCtx ctx,    ZSTD_Trace const* trace);#endif /* ZSTD_TRACE */#if defined (__cplusplus)}#endif#endif /* ZSTD_TRACE_H */
 |