| 
									
										
										
										
											2021-11-19 12:54:45 +01:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2023-05-22 14:32:14 +02:00
										 |  |  |  * Copyright (c) Meta Platforms, Inc. and affiliates. | 
					
						
							| 
									
										
										
										
											2021-11-19 12:54:45 +01:00
										 |  |  |  * 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>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-24 11:04:45 +01:00
										 |  |  | /* weak symbol support
 | 
					
						
							|  |  |  |  * For now, enable conservatively: | 
					
						
							|  |  |  |  * - Only GNUC | 
					
						
							|  |  |  |  * - Only ELF | 
					
						
							| 
									
										
										
										
											2023-05-22 14:32:14 +02:00
										 |  |  |  * - Only x86-64, i386 and aarch64 | 
					
						
							| 
									
										
										
										
											2022-01-24 11:04:45 +01:00
										 |  |  |  * 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__) && \ | 
					
						
							| 
									
										
										
										
											2023-05-22 14:32:14 +02:00
										 |  |  |     (defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86) || defined(__aarch64__)) && \ | 
					
						
							| 
									
										
										
										
											2021-11-19 12:54:45 +01:00
										 |  |  |     !defined(__APPLE__) && !defined(_WIN32) && !defined(__MINGW32__) && \ | 
					
						
							| 
									
										
										
										
											2022-01-24 11:04:45 +01:00
										 |  |  |     !defined(__CYGWIN__) && !defined(_AIX) | 
					
						
							| 
									
										
										
										
											2021-11-19 12:54:45 +01:00
										 |  |  | #  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_TRACE
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct 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 */
 |