/* Copyright 2025 Google Inc. All Rights Reserved. Distributed under MIT license. See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ /* Central point for static initialization. In case of "lazy" mode `BrotliXxxLazyStaticInit` is not provided by the library. Embedder is responsible for providing it. This function should call `BrotliXxxLazyStaticInitInner` on the first invocation. This function should not return until execution of `BrotliXxxLazyStaticInitInner` is finished. In C or before C++11 it is possible to call `BrotliXxxLazyStaticInitInner` on start-up path and then `BrotliEncoderLazyStaticInit` is could be no-op; another option is to use available thread execution controls to meet the requirements. For possible C++11 implementation see static_init_lazy.cc. */ #ifndef THIRD_PARTY_BROTLI_COMMON_STATIC_INIT_H_ #define THIRD_PARTY_BROTLI_COMMON_STATIC_INIT_H_ #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif /* Static data is "initialized" in compile time. */ #define BROTLI_STATIC_INIT_NONE 0 /* Static data is initialized before "main". */ #define BROTLI_STATIC_INIT_EARLY 1 /* Static data is initialized when first encoder is created. */ #define BROTLI_STATIC_INIT_LAZY 2 #define BROTLI_STATIC_INIT_DEFAULT BROTLI_STATIC_INIT_NONE #if !defined(BROTLI_STATIC_INIT) #define BROTLI_STATIC_INIT BROTLI_STATIC_INIT_DEFAULT #endif #if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE) && \ (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_EARLY) && \ (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_LAZY) #error Invalid value for BROTLI_STATIC_INIT #endif #if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_EARLY) #if defined(BROTLI_EXTERNAL_DICTIONARY_DATA) #error BROTLI_STATIC_INIT_EARLY will fail with BROTLI_EXTERNAL_DICTIONARY_DATA #endif #endif /* BROTLI_STATIC_INIT */ #if defined(__cplusplus) || defined(c_plusplus) } /* extern "C" */ #endif #endif // THIRD_PARTY_BROTLI_COMMON_STATIC_INIT_H_