catboost 1.25.1 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DEPLOYMENT.md +22 -15
- package/README.md +37 -27
- package/binding.gyp +5 -7
- package/build_scripts/bootstrap.js +2 -1
- package/build_scripts/out/build.js +46 -68
- package/build_scripts/out/build_model.js +1 -1
- package/build_scripts/out/{build_ya.js → build_native.js} +1 -1
- package/build_scripts/out/ci.js +5 -5
- package/build_scripts/out/config.js +32 -18
- package/build_scripts/out/install.js +5 -3
- package/build_scripts/out/package_prepublish.js +1 -1
- package/build_scripts/out/packaging.js +1 -19
- package/build_scripts/out/run_tests.js +1 -1
- package/build_scripts/out/test.js +8 -3
- package/config.json +18 -11
- package/inc/catboost/libs/model_interface/c_api.h +349 -3
- package/lib/catboost.d.ts +65 -21
- package/package.json +4 -4
- package/src/api_helpers.cpp +100 -24
- package/src/api_helpers.h +8 -7
- package/src/api_module.cpp +1 -2
- package/src/model.cpp +483 -83
- package/src/model.h +24 -9
- package/inc/contrib/libs/cxxsupp/system_stl/include/stlfwd +0 -14
- package/inc/util/charset/recode_result.h +0 -9
- package/inc/util/charset/unicode_table.h +0 -123
- package/inc/util/charset/unidata.h +0 -421
- package/inc/util/charset/utf8.h +0 -384
- package/inc/util/charset/wide.h +0 -843
- package/inc/util/charset/wide_specific.h +0 -22
- package/inc/util/datetime/base.h +0 -669
- package/inc/util/datetime/constants.h +0 -7
- package/inc/util/datetime/cputimer.h +0 -124
- package/inc/util/datetime/parser.h +0 -292
- package/inc/util/datetime/systime.h +0 -47
- package/inc/util/datetime/uptime.h +0 -8
- package/inc/util/digest/city.h +0 -88
- package/inc/util/digest/fnv.h +0 -73
- package/inc/util/digest/multi.h +0 -14
- package/inc/util/digest/murmur.h +0 -57
- package/inc/util/digest/numeric.h +0 -86
- package/inc/util/digest/sequence.h +0 -48
- package/inc/util/draft/date.h +0 -129
- package/inc/util/draft/datetime.h +0 -184
- package/inc/util/draft/enum.h +0 -136
- package/inc/util/draft/holder_vector.h +0 -102
- package/inc/util/draft/ip.h +0 -131
- package/inc/util/draft/matrix.h +0 -108
- package/inc/util/draft/memory.h +0 -40
- package/inc/util/folder/dirent_win.h +0 -46
- package/inc/util/folder/dirut.h +0 -121
- package/inc/util/folder/filelist.h +0 -81
- package/inc/util/folder/fts.h +0 -108
- package/inc/util/folder/iterator.h +0 -109
- package/inc/util/folder/lstat_win.h +0 -20
- package/inc/util/folder/path.h +0 -225
- package/inc/util/folder/pathsplit.h +0 -113
- package/inc/util/folder/tempdir.h +0 -42
- package/inc/util/generic/adaptor.h +0 -134
- package/inc/util/generic/algorithm.h +0 -765
- package/inc/util/generic/array_ref.h +0 -282
- package/inc/util/generic/array_size.h +0 -24
- package/inc/util/generic/benchmark/vector_count_ctor/f.h +0 -9
- package/inc/util/generic/bitmap.h +0 -1115
- package/inc/util/generic/bitops.h +0 -459
- package/inc/util/generic/bt_exception.h +0 -24
- package/inc/util/generic/buffer.h +0 -232
- package/inc/util/generic/cast.h +0 -176
- package/inc/util/generic/deque.h +0 -24
- package/inc/util/generic/explicit_type.h +0 -42
- package/inc/util/generic/fastqueue.h +0 -55
- package/inc/util/generic/flags.h +0 -244
- package/inc/util/generic/function.h +0 -103
- package/inc/util/generic/fwd.h +0 -171
- package/inc/util/generic/guid.h +0 -61
- package/inc/util/generic/hash.h +0 -2032
- package/inc/util/generic/hash_primes.h +0 -140
- package/inc/util/generic/hash_set.h +0 -490
- package/inc/util/generic/hide_ptr.h +0 -3
- package/inc/util/generic/intrlist.h +0 -876
- package/inc/util/generic/is_in.h +0 -53
- package/inc/util/generic/iterator.h +0 -137
- package/inc/util/generic/iterator_range.h +0 -105
- package/inc/util/generic/lazy_value.h +0 -66
- package/inc/util/generic/list.h +0 -22
- package/inc/util/generic/map.h +0 -44
- package/inc/util/generic/mapfindptr.h +0 -60
- package/inc/util/generic/maybe.h +0 -713
- package/inc/util/generic/maybe_traits.h +0 -164
- package/inc/util/generic/mem_copy.h +0 -55
- package/inc/util/generic/noncopyable.h +0 -38
- package/inc/util/generic/object_counter.h +0 -53
- package/inc/util/generic/ptr.h +0 -1113
- package/inc/util/generic/queue.h +0 -57
- package/inc/util/generic/refcount.h +0 -162
- package/inc/util/generic/reserve.h +0 -11
- package/inc/util/generic/scope.h +0 -65
- package/inc/util/generic/serialized_enum.h +0 -406
- package/inc/util/generic/set.h +0 -42
- package/inc/util/generic/singleton.h +0 -136
- package/inc/util/generic/size_literals.h +0 -65
- package/inc/util/generic/stack.h +0 -18
- package/inc/util/generic/store_policy.h +0 -120
- package/inc/util/generic/strbase.h +0 -612
- package/inc/util/generic/strbuf.h +0 -552
- package/inc/util/generic/strfcpy.h +0 -17
- package/inc/util/generic/string.h +0 -1572
- package/inc/util/generic/string_hash.h +0 -21
- package/inc/util/generic/string_ut.h +0 -1175
- package/inc/util/generic/type_name.h +0 -34
- package/inc/util/generic/typelist.h +0 -114
- package/inc/util/generic/typetraits.h +0 -325
- package/inc/util/generic/utility.h +0 -132
- package/inc/util/generic/va_args.h +0 -400
- package/inc/util/generic/variant.h +0 -631
- package/inc/util/generic/variant_traits.h +0 -171
- package/inc/util/generic/vector.h +0 -119
- package/inc/util/generic/xrange.h +0 -258
- package/inc/util/generic/yexception.h +0 -212
- package/inc/util/generic/yexception_ut.h +0 -14
- package/inc/util/generic/ylimits.h +0 -92
- package/inc/util/generic/ymath.h +0 -206
- package/inc/util/memory/addstorage.h +0 -93
- package/inc/util/memory/alloc.h +0 -27
- package/inc/util/memory/blob.h +0 -296
- package/inc/util/memory/mmapalloc.h +0 -8
- package/inc/util/memory/pool.h +0 -432
- package/inc/util/memory/segmented_string_pool.h +0 -194
- package/inc/util/memory/segpool_alloc.h +0 -118
- package/inc/util/memory/smallobj.h +0 -141
- package/inc/util/memory/tempbuf.h +0 -111
- package/inc/util/network/address.h +0 -136
- package/inc/util/network/endpoint.h +0 -61
- package/inc/util/network/hostip.h +0 -16
- package/inc/util/network/init.h +0 -60
- package/inc/util/network/interface.h +0 -17
- package/inc/util/network/iovec.h +0 -65
- package/inc/util/network/ip.h +0 -116
- package/inc/util/network/nonblock.h +0 -8
- package/inc/util/network/pair.h +0 -9
- package/inc/util/network/poller.h +0 -58
- package/inc/util/network/pollerimpl.h +0 -707
- package/inc/util/network/sock.h +0 -608
- package/inc/util/network/socket.h +0 -421
- package/inc/util/random/common_ops.h +0 -130
- package/inc/util/random/easy.h +0 -47
- package/inc/util/random/entropy.h +0 -21
- package/inc/util/random/fast.h +0 -101
- package/inc/util/random/init_atfork.h +0 -3
- package/inc/util/random/lcg_engine.h +0 -66
- package/inc/util/random/mersenne.h +0 -46
- package/inc/util/random/mersenne32.h +0 -50
- package/inc/util/random/mersenne64.h +0 -50
- package/inc/util/random/normal.h +0 -38
- package/inc/util/random/random.h +0 -30
- package/inc/util/random/shuffle.h +0 -39
- package/inc/util/str_stl.h +0 -266
- package/inc/util/stream/aligned.h +0 -99
- package/inc/util/stream/buffer.h +0 -119
- package/inc/util/stream/buffered.h +0 -225
- package/inc/util/stream/debug.h +0 -53
- package/inc/util/stream/direct_io.h +0 -43
- package/inc/util/stream/file.h +0 -108
- package/inc/util/stream/format.h +0 -444
- package/inc/util/stream/fwd.h +0 -100
- package/inc/util/stream/hex.h +0 -8
- package/inc/util/stream/holder.h +0 -44
- package/inc/util/stream/input.h +0 -273
- package/inc/util/stream/labeled.h +0 -19
- package/inc/util/stream/length.h +0 -100
- package/inc/util/stream/mem.h +0 -255
- package/inc/util/stream/multi.h +0 -32
- package/inc/util/stream/null.h +0 -61
- package/inc/util/stream/output.h +0 -304
- package/inc/util/stream/pipe.h +0 -112
- package/inc/util/stream/printf.h +0 -25
- package/inc/util/stream/str.h +0 -207
- package/inc/util/stream/tee.h +0 -28
- package/inc/util/stream/tempbuf.h +0 -21
- package/inc/util/stream/tokenizer.h +0 -214
- package/inc/util/stream/trace.h +0 -60
- package/inc/util/stream/walk.h +0 -35
- package/inc/util/stream/zerocopy.h +0 -91
- package/inc/util/stream/zerocopy_output.h +0 -57
- package/inc/util/stream/zlib.h +0 -173
- package/inc/util/string/ascii.h +0 -236
- package/inc/util/string/builder.h +0 -39
- package/inc/util/string/cast.h +0 -347
- package/inc/util/string/cstriter.h +0 -14
- package/inc/util/string/escape.h +0 -70
- package/inc/util/string/hex.h +0 -59
- package/inc/util/string/join.h +0 -194
- package/inc/util/string/printf.h +0 -13
- package/inc/util/string/reverse.h +0 -16
- package/inc/util/string/split.h +0 -1080
- package/inc/util/string/strip.h +0 -257
- package/inc/util/string/strspn.h +0 -65
- package/inc/util/string/subst.h +0 -56
- package/inc/util/string/type.h +0 -50
- package/inc/util/string/util.h +0 -195
- package/inc/util/string/vector.h +0 -132
- package/inc/util/system/align.h +0 -50
- package/inc/util/system/atexit.h +0 -22
- package/inc/util/system/atomic.h +0 -51
- package/inc/util/system/atomic_gcc.h +0 -90
- package/inc/util/system/atomic_ops.h +0 -189
- package/inc/util/system/atomic_win.h +0 -114
- package/inc/util/system/backtrace.h +0 -39
- package/inc/util/system/byteorder.h +0 -186
- package/inc/util/system/compat.h +0 -84
- package/inc/util/system/compiler.h +0 -620
- package/inc/util/system/condvar.h +0 -71
- package/inc/util/system/context.h +0 -181
- package/inc/util/system/context_aarch64.h +0 -8
- package/inc/util/system/context_i686.h +0 -9
- package/inc/util/system/context_x86.h +0 -12
- package/inc/util/system/context_x86_64.h +0 -7
- package/inc/util/system/cpu_id.h +0 -159
- package/inc/util/system/daemon.h +0 -28
- package/inc/util/system/datetime.h +0 -98
- package/inc/util/system/defaults.h +0 -149
- package/inc/util/system/demangle.h +0 -5
- package/inc/util/system/demangle_impl.h +0 -23
- package/inc/util/system/direct_io.h +0 -71
- package/inc/util/system/dynlib.h +0 -119
- package/inc/util/system/env.h +0 -32
- package/inc/util/system/error.h +0 -95
- package/inc/util/system/event.h +0 -122
- package/inc/util/system/execpath.h +0 -17
- package/inc/util/system/fasttime.h +0 -6
- package/inc/util/system/fhandle.h +0 -27
- package/inc/util/system/file.h +0 -210
- package/inc/util/system/file_lock.h +0 -34
- package/inc/util/system/filemap.h +0 -383
- package/inc/util/system/flock.h +0 -35
- package/inc/util/system/fs.h +0 -156
- package/inc/util/system/fs_win.h +0 -29
- package/inc/util/system/fstat.h +0 -46
- package/inc/util/system/getpid.h +0 -12
- package/inc/util/system/guard.h +0 -179
- package/inc/util/system/hi_lo.h +0 -139
- package/inc/util/system/hostname.h +0 -10
- package/inc/util/system/hp_timer.h +0 -36
- package/inc/util/system/info.h +0 -12
- package/inc/util/system/interrupt_signals.h +0 -22
- package/inc/util/system/madvise.h +0 -30
- package/inc/util/system/maxlen.h +0 -32
- package/inc/util/system/mem_info.h +0 -18
- package/inc/util/system/mincore.h +0 -38
- package/inc/util/system/mktemp.h +0 -11
- package/inc/util/system/mlock.h +0 -43
- package/inc/util/system/mutex.h +0 -67
- package/inc/util/system/nice.h +0 -3
- package/inc/util/system/pipe.h +0 -90
- package/inc/util/system/platform.h +0 -246
- package/inc/util/system/progname.h +0 -13
- package/inc/util/system/protect.h +0 -25
- package/inc/util/system/rusage.h +0 -26
- package/inc/util/system/rwlock.h +0 -78
- package/inc/util/system/sanitizers.h +0 -122
- package/inc/util/system/sem.h +0 -41
- package/inc/util/system/shellcommand.h +0 -472
- package/inc/util/system/shmat.h +0 -32
- package/inc/util/system/sigset.h +0 -78
- package/inc/util/system/spin_wait.h +0 -10
- package/inc/util/system/spinlock.h +0 -121
- package/inc/util/system/src_location.h +0 -25
- package/inc/util/system/src_root.h +0 -68
- package/inc/util/system/sys_alloc.h +0 -43
- package/inc/util/system/sysstat.h +0 -52
- package/inc/util/system/tempfile.h +0 -34
- package/inc/util/system/thread.h +0 -167
- package/inc/util/system/tls.h +0 -307
- package/inc/util/system/types.h +0 -119
- package/inc/util/system/unaligned_mem.h +0 -67
- package/inc/util/system/user.h +0 -5
- package/inc/util/system/utime.h +0 -6
- package/inc/util/system/valgrind.h +0 -48
- package/inc/util/system/winint.h +0 -43
- package/inc/util/system/yassert.h +0 -121
- package/inc/util/system/yield.h +0 -4
- package/inc/util/thread/factory.h +0 -65
- package/inc/util/thread/fwd.h +0 -30
- package/inc/util/thread/lfqueue.h +0 -406
- package/inc/util/thread/lfstack.h +0 -188
- package/inc/util/thread/pool.h +0 -388
- package/inc/util/thread/singleton.h +0 -42
- package/inc/util/ysafeptr.h +0 -427
- package/inc/util/ysaveload.h +0 -700
|
@@ -1,620 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
// useful cross-platfrom definitions for compilers
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @def Y_FUNC_SIGNATURE
|
|
7
|
-
*
|
|
8
|
-
* Use this macro to get pretty function name (see example).
|
|
9
|
-
*
|
|
10
|
-
* @code
|
|
11
|
-
* void Hi() {
|
|
12
|
-
* Cout << Y_FUNC_SIGNATURE << Endl;
|
|
13
|
-
* }
|
|
14
|
-
|
|
15
|
-
* template <typename T>
|
|
16
|
-
* void Do() {
|
|
17
|
-
* Cout << Y_FUNC_SIGNATURE << Endl;
|
|
18
|
-
* }
|
|
19
|
-
|
|
20
|
-
* int main() {
|
|
21
|
-
* Hi(); // void Hi()
|
|
22
|
-
* Do<int>(); // void Do() [T = int]
|
|
23
|
-
* Do<TString>(); // void Do() [T = TString]
|
|
24
|
-
* }
|
|
25
|
-
* @endcode
|
|
26
|
-
*/
|
|
27
|
-
#if defined(__GNUC__)
|
|
28
|
-
#define Y_FUNC_SIGNATURE __PRETTY_FUNCTION__
|
|
29
|
-
#elif defined(_MSC_VER)
|
|
30
|
-
#define Y_FUNC_SIGNATURE __FUNCSIG__
|
|
31
|
-
#else
|
|
32
|
-
#define Y_FUNC_SIGNATURE ""
|
|
33
|
-
#endif
|
|
34
|
-
|
|
35
|
-
#ifdef __GNUC__
|
|
36
|
-
#define Y_PRINTF_FORMAT(n, m) __attribute__((__format__(__printf__, n, m)))
|
|
37
|
-
#endif
|
|
38
|
-
|
|
39
|
-
#ifndef Y_PRINTF_FORMAT
|
|
40
|
-
#define Y_PRINTF_FORMAT(n, m)
|
|
41
|
-
#endif
|
|
42
|
-
|
|
43
|
-
#if defined(__clang__)
|
|
44
|
-
#define Y_NO_SANITIZE(...) __attribute__((no_sanitize(__VA_ARGS__)))
|
|
45
|
-
#endif
|
|
46
|
-
|
|
47
|
-
#if !defined(Y_NO_SANITIZE)
|
|
48
|
-
#define Y_NO_SANITIZE(...)
|
|
49
|
-
#endif
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* @def Y_DECLARE_UNUSED
|
|
53
|
-
*
|
|
54
|
-
* Macro is needed to silence compiler warning about unused entities (e.g. function or argument).
|
|
55
|
-
*
|
|
56
|
-
* @code
|
|
57
|
-
* Y_DECLARE_UNUSED int FunctionUsedSolelyForDebugPurposes();
|
|
58
|
-
* assert(FunctionUsedSolelyForDebugPurposes() == 42);
|
|
59
|
-
*
|
|
60
|
-
* void Foo(const int argumentUsedOnlyForDebugPurposes Y_DECLARE_UNUSED) {
|
|
61
|
-
* assert(argumentUsedOnlyForDebugPurposes == 42);
|
|
62
|
-
* // however you may as well omit `Y_DECLARE_UNUSED` and use `UNUSED` macro instead
|
|
63
|
-
* Y_UNUSED(argumentUsedOnlyForDebugPurposes);
|
|
64
|
-
* }
|
|
65
|
-
* @endcode
|
|
66
|
-
*/
|
|
67
|
-
#ifdef __GNUC__
|
|
68
|
-
#define Y_DECLARE_UNUSED __attribute__((unused))
|
|
69
|
-
#endif
|
|
70
|
-
|
|
71
|
-
#ifndef Y_DECLARE_UNUSED
|
|
72
|
-
#define Y_DECLARE_UNUSED
|
|
73
|
-
#endif
|
|
74
|
-
|
|
75
|
-
#if defined(__GNUC__)
|
|
76
|
-
#define Y_LIKELY(Cond) __builtin_expect(!!(Cond), 1)
|
|
77
|
-
#define Y_UNLIKELY(Cond) __builtin_expect(!!(Cond), 0)
|
|
78
|
-
#define Y_PREFETCH_READ(Pointer, Priority) __builtin_prefetch((const void*)(Pointer), 0, Priority)
|
|
79
|
-
#define Y_PREFETCH_WRITE(Pointer, Priority) __builtin_prefetch((const void*)(Pointer), 1, Priority)
|
|
80
|
-
#endif
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* @def Y_FORCE_INLINE
|
|
84
|
-
*
|
|
85
|
-
* Macro to use in place of 'inline' in function declaration/definition to force
|
|
86
|
-
* it to be inlined.
|
|
87
|
-
*/
|
|
88
|
-
#if !defined(Y_FORCE_INLINE)
|
|
89
|
-
#if defined(CLANG_COVERAGE)
|
|
90
|
-
#/* excessive __always_inline__ might significantly slow down compilation of an instrumented unit */
|
|
91
|
-
#define Y_FORCE_INLINE inline
|
|
92
|
-
#elif defined(_MSC_VER)
|
|
93
|
-
#define Y_FORCE_INLINE __forceinline
|
|
94
|
-
#elif defined(__GNUC__)
|
|
95
|
-
#/* Clang also defines __GNUC__ (as 4) */
|
|
96
|
-
#define Y_FORCE_INLINE inline __attribute__((__always_inline__))
|
|
97
|
-
#else
|
|
98
|
-
#define Y_FORCE_INLINE inline
|
|
99
|
-
#endif
|
|
100
|
-
#endif
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* @def Y_NO_INLINE
|
|
104
|
-
*
|
|
105
|
-
* Macro to use in place of 'inline' in function declaration/definition to
|
|
106
|
-
* prevent it from being inlined.
|
|
107
|
-
*/
|
|
108
|
-
#if !defined(Y_NO_INLINE)
|
|
109
|
-
#if defined(_MSC_VER)
|
|
110
|
-
#define Y_NO_INLINE __declspec(noinline)
|
|
111
|
-
#elif defined(__GNUC__) || defined(__INTEL_COMPILER)
|
|
112
|
-
#/* Clang also defines __GNUC__ (as 4) */
|
|
113
|
-
#define Y_NO_INLINE __attribute__((__noinline__))
|
|
114
|
-
#else
|
|
115
|
-
#define Y_NO_INLINE
|
|
116
|
-
#endif
|
|
117
|
-
#endif
|
|
118
|
-
|
|
119
|
-
//to cheat compiler about strict aliasing or similar problems
|
|
120
|
-
#if defined(__GNUC__)
|
|
121
|
-
#define Y_FAKE_READ(X) \
|
|
122
|
-
do { \
|
|
123
|
-
__asm__ __volatile__("" \
|
|
124
|
-
: \
|
|
125
|
-
: "m"(X)); \
|
|
126
|
-
} while (0)
|
|
127
|
-
|
|
128
|
-
#define Y_FAKE_WRITE(X) \
|
|
129
|
-
do { \
|
|
130
|
-
__asm__ __volatile__("" \
|
|
131
|
-
: "=m"(X)); \
|
|
132
|
-
} while (0)
|
|
133
|
-
#endif
|
|
134
|
-
|
|
135
|
-
#if !defined(Y_FAKE_READ)
|
|
136
|
-
#define Y_FAKE_READ(X)
|
|
137
|
-
#endif
|
|
138
|
-
|
|
139
|
-
#if !defined(Y_FAKE_WRITE)
|
|
140
|
-
#define Y_FAKE_WRITE(X)
|
|
141
|
-
#endif
|
|
142
|
-
|
|
143
|
-
#ifndef Y_PREFETCH_READ
|
|
144
|
-
#define Y_PREFETCH_READ(Pointer, Priority) (void)(const void*)(Pointer), (void)Priority
|
|
145
|
-
#endif
|
|
146
|
-
|
|
147
|
-
#ifndef Y_PREFETCH_WRITE
|
|
148
|
-
#define Y_PREFETCH_WRITE(Pointer, Priority) (void)(const void*)(Pointer), (void)Priority
|
|
149
|
-
#endif
|
|
150
|
-
|
|
151
|
-
#ifndef Y_LIKELY
|
|
152
|
-
#define Y_LIKELY(Cond) (Cond)
|
|
153
|
-
#define Y_UNLIKELY(Cond) (Cond)
|
|
154
|
-
#endif
|
|
155
|
-
|
|
156
|
-
#ifdef __GNUC__
|
|
157
|
-
#define _packed __attribute__((packed))
|
|
158
|
-
#else
|
|
159
|
-
#define _packed
|
|
160
|
-
#endif
|
|
161
|
-
|
|
162
|
-
#if defined(__GNUC__)
|
|
163
|
-
#define Y_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
|
|
164
|
-
#endif
|
|
165
|
-
|
|
166
|
-
#ifndef Y_WARN_UNUSED_RESULT
|
|
167
|
-
#define Y_WARN_UNUSED_RESULT
|
|
168
|
-
#endif
|
|
169
|
-
|
|
170
|
-
#if defined(__GNUC__)
|
|
171
|
-
#define Y_HIDDEN __attribute__((visibility("hidden")))
|
|
172
|
-
#endif
|
|
173
|
-
|
|
174
|
-
#if !defined(Y_HIDDEN)
|
|
175
|
-
#define Y_HIDDEN
|
|
176
|
-
#endif
|
|
177
|
-
|
|
178
|
-
#if defined(__GNUC__)
|
|
179
|
-
#define Y_PUBLIC __attribute__((visibility("default")))
|
|
180
|
-
#endif
|
|
181
|
-
|
|
182
|
-
#if !defined(Y_PUBLIC)
|
|
183
|
-
#define Y_PUBLIC
|
|
184
|
-
#endif
|
|
185
|
-
|
|
186
|
-
#if !defined(Y_UNUSED) && !defined(__cplusplus)
|
|
187
|
-
#define Y_UNUSED(var) (void)(var)
|
|
188
|
-
#endif
|
|
189
|
-
#if !defined(Y_UNUSED) && defined(__cplusplus)
|
|
190
|
-
template <class... Types>
|
|
191
|
-
constexpr Y_FORCE_INLINE int Y_UNUSED(Types&&...) {
|
|
192
|
-
return 0;
|
|
193
|
-
};
|
|
194
|
-
#endif
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* @def Y_ASSUME
|
|
198
|
-
*
|
|
199
|
-
* Macro that tells the compiler that it can generate optimized code
|
|
200
|
-
* as if the given expression will always evaluate true.
|
|
201
|
-
* The behavior is undefined if it ever evaluates false.
|
|
202
|
-
*
|
|
203
|
-
* @code
|
|
204
|
-
* // factored into a function so that it's testable
|
|
205
|
-
* inline int Avg(int x, int y) {
|
|
206
|
-
* if (x >= 0 && y >= 0) {
|
|
207
|
-
* return (static_cast<unsigned>(x) + static_cast<unsigned>(y)) >> 1;
|
|
208
|
-
* } else {
|
|
209
|
-
* // a slower implementation
|
|
210
|
-
* }
|
|
211
|
-
* }
|
|
212
|
-
*
|
|
213
|
-
* // we know that xs and ys are non-negative from domain knowledge,
|
|
214
|
-
* // but we can't change the types of xs and ys because of API constrains
|
|
215
|
-
* int Foo(const TVector<int>& xs, const TVector<int>& ys) {
|
|
216
|
-
* TVector<int> avgs;
|
|
217
|
-
* avgs.resize(xs.size());
|
|
218
|
-
* for (size_t i = 0; i < xs.size(); ++i) {
|
|
219
|
-
* auto x = xs[i];
|
|
220
|
-
* auto y = ys[i];
|
|
221
|
-
* Y_ASSUME(x >= 0);
|
|
222
|
-
* Y_ASSUME(y >= 0);
|
|
223
|
-
* xs[i] = Avg(x, y);
|
|
224
|
-
* }
|
|
225
|
-
* }
|
|
226
|
-
* @endcode
|
|
227
|
-
*/
|
|
228
|
-
#if defined(__GNUC__)
|
|
229
|
-
#define Y_ASSUME(condition) ((condition) ? (void)0 : __builtin_unreachable())
|
|
230
|
-
#elif defined(_MSC_VER)
|
|
231
|
-
#define Y_ASSUME(condition) __assume(condition)
|
|
232
|
-
#else
|
|
233
|
-
#define Y_ASSUME(condition) Y_UNUSED(condition)
|
|
234
|
-
#endif
|
|
235
|
-
|
|
236
|
-
#ifdef __cplusplus
|
|
237
|
-
[[noreturn]]
|
|
238
|
-
#endif
|
|
239
|
-
Y_HIDDEN void _YandexAbort();
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* @def Y_UNREACHABLE
|
|
243
|
-
*
|
|
244
|
-
* Macro that marks the rest of the code branch unreachable.
|
|
245
|
-
* The behavior is undefined if it's ever reached.
|
|
246
|
-
*
|
|
247
|
-
* @code
|
|
248
|
-
* switch (i % 3) {
|
|
249
|
-
* case 0:
|
|
250
|
-
* return foo;
|
|
251
|
-
* case 1:
|
|
252
|
-
* return bar;
|
|
253
|
-
* case 2:
|
|
254
|
-
* return baz;
|
|
255
|
-
* default:
|
|
256
|
-
* Y_UNREACHABLE();
|
|
257
|
-
* }
|
|
258
|
-
* @endcode
|
|
259
|
-
*/
|
|
260
|
-
#if defined(__GNUC__)
|
|
261
|
-
#define Y_UNREACHABLE() __builtin_unreachable()
|
|
262
|
-
#elif defined (_MSC_VER)
|
|
263
|
-
#define Y_UNREACHABLE() __assume(false)
|
|
264
|
-
#else
|
|
265
|
-
#define Y_UNREACHABLE() _YandexAbort()
|
|
266
|
-
#endif
|
|
267
|
-
|
|
268
|
-
#if defined(undefined_sanitizer_enabled)
|
|
269
|
-
#define _ubsan_enabled_
|
|
270
|
-
#endif
|
|
271
|
-
|
|
272
|
-
#ifdef __clang__
|
|
273
|
-
|
|
274
|
-
#if __has_feature(thread_sanitizer)
|
|
275
|
-
#define _tsan_enabled_
|
|
276
|
-
#endif
|
|
277
|
-
#if __has_feature(memory_sanitizer)
|
|
278
|
-
#define _msan_enabled_
|
|
279
|
-
#endif
|
|
280
|
-
#if __has_feature(address_sanitizer)
|
|
281
|
-
#define _asan_enabled_
|
|
282
|
-
#endif
|
|
283
|
-
|
|
284
|
-
#else
|
|
285
|
-
|
|
286
|
-
#if defined(thread_sanitizer_enabled) || defined(__SANITIZE_THREAD__)
|
|
287
|
-
#define _tsan_enabled_
|
|
288
|
-
#endif
|
|
289
|
-
#if defined(memory_sanitizer_enabled)
|
|
290
|
-
#define _msan_enabled_
|
|
291
|
-
#endif
|
|
292
|
-
#if defined(address_sanitizer_enabled) || defined(__SANITIZE_ADDRESS__)
|
|
293
|
-
#define _asan_enabled_
|
|
294
|
-
#endif
|
|
295
|
-
|
|
296
|
-
#endif
|
|
297
|
-
|
|
298
|
-
#if defined(_asan_enabled_) || defined(_msan_enabled_) || defined(_tsan_enabled_) || defined(_ubsan_enabled_)
|
|
299
|
-
#define _san_enabled_
|
|
300
|
-
#endif
|
|
301
|
-
|
|
302
|
-
#if defined(_MSC_VER)
|
|
303
|
-
#define __PRETTY_FUNCTION__ __FUNCSIG__
|
|
304
|
-
#endif
|
|
305
|
-
|
|
306
|
-
#if defined(__GNUC__)
|
|
307
|
-
#define Y_WEAK __attribute__((weak))
|
|
308
|
-
#else
|
|
309
|
-
#define Y_WEAK
|
|
310
|
-
#endif
|
|
311
|
-
|
|
312
|
-
#if defined(__CUDACC_VER_MAJOR__)
|
|
313
|
-
#define Y_CUDA_AT_LEAST(x, y) (__CUDACC_VER_MAJOR__ > x || (__CUDACC_VER_MAJOR__ == x && __CUDACC_VER_MINOR__ >= y))
|
|
314
|
-
#else
|
|
315
|
-
#define Y_CUDA_AT_LEAST(x, y) 0
|
|
316
|
-
#endif
|
|
317
|
-
|
|
318
|
-
// NVidia CUDA C++ Compiler did not know about noexcept keyword until version 9.0
|
|
319
|
-
#if !Y_CUDA_AT_LEAST(9, 0)
|
|
320
|
-
#if defined(__CUDACC__) && !defined(noexcept)
|
|
321
|
-
#define noexcept throw ()
|
|
322
|
-
#endif
|
|
323
|
-
#endif
|
|
324
|
-
|
|
325
|
-
#if defined(__GNUC__)
|
|
326
|
-
#define Y_COLD __attribute__((cold))
|
|
327
|
-
#define Y_LEAF __attribute__((leaf))
|
|
328
|
-
#define Y_WRAPPER __attribute__((artificial))
|
|
329
|
-
#else
|
|
330
|
-
#define Y_COLD
|
|
331
|
-
#define Y_LEAF
|
|
332
|
-
#define Y_WRAPPER
|
|
333
|
-
#endif
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* @def Y_PRAGMA
|
|
337
|
-
*
|
|
338
|
-
* Macro for use in other macros to define compiler pragma
|
|
339
|
-
* See below for other usage examples
|
|
340
|
-
*
|
|
341
|
-
* @code
|
|
342
|
-
* #if defined(__clang__) || defined(__GNUC__)
|
|
343
|
-
* #define Y_PRAGMA_NO_WSHADOW \
|
|
344
|
-
* Y_PRAGMA("GCC diagnostic ignored \"-Wshadow\"")
|
|
345
|
-
* #elif defined(_MSC_VER)
|
|
346
|
-
* #define Y_PRAGMA_NO_WSHADOW \
|
|
347
|
-
* Y_PRAGMA("warning(disable:4456 4457")
|
|
348
|
-
* #else
|
|
349
|
-
* #define Y_PRAGMA_NO_WSHADOW
|
|
350
|
-
* #endif
|
|
351
|
-
* @endcode
|
|
352
|
-
*/
|
|
353
|
-
#if defined(__clang__) || defined(__GNUC__)
|
|
354
|
-
#define Y_PRAGMA(x) _Pragma(x)
|
|
355
|
-
#elif defined(_MSC_VER)
|
|
356
|
-
#define Y_PRAGMA(x) __pragma(x)
|
|
357
|
-
#else
|
|
358
|
-
#define Y_PRAGMA(x)
|
|
359
|
-
#endif
|
|
360
|
-
|
|
361
|
-
/**
|
|
362
|
-
* @def Y_PRAGMA_DIAGNOSTIC_PUSH
|
|
363
|
-
*
|
|
364
|
-
* Cross-compiler pragma to save diagnostic settings
|
|
365
|
-
*
|
|
366
|
-
* @see
|
|
367
|
-
* GCC: https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html
|
|
368
|
-
* MSVC: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx
|
|
369
|
-
* Clang: https://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-via-pragmas
|
|
370
|
-
*
|
|
371
|
-
* @code
|
|
372
|
-
* Y_PRAGMA_DIAGNOSTIC_PUSH
|
|
373
|
-
* @endcode
|
|
374
|
-
*/
|
|
375
|
-
#if defined(__clang__) || defined(__GNUC__)
|
|
376
|
-
#define Y_PRAGMA_DIAGNOSTIC_PUSH \
|
|
377
|
-
Y_PRAGMA("GCC diagnostic push")
|
|
378
|
-
#elif defined(_MSC_VER)
|
|
379
|
-
#define Y_PRAGMA_DIAGNOSTIC_PUSH \
|
|
380
|
-
Y_PRAGMA(warning(push))
|
|
381
|
-
#else
|
|
382
|
-
#define Y_PRAGMA_DIAGNOSTIC_PUSH
|
|
383
|
-
#endif
|
|
384
|
-
|
|
385
|
-
/**
|
|
386
|
-
* @def Y_PRAGMA_DIAGNOSTIC_POP
|
|
387
|
-
*
|
|
388
|
-
* Cross-compiler pragma to restore diagnostic settings
|
|
389
|
-
*
|
|
390
|
-
* @see
|
|
391
|
-
* GCC: https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html
|
|
392
|
-
* MSVC: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx
|
|
393
|
-
* Clang: https://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-via-pragmas
|
|
394
|
-
*
|
|
395
|
-
* @code
|
|
396
|
-
* Y_PRAGMA_DIAGNOSTIC_POP
|
|
397
|
-
* @endcode
|
|
398
|
-
*/
|
|
399
|
-
#if defined(__clang__) || defined(__GNUC__)
|
|
400
|
-
#define Y_PRAGMA_DIAGNOSTIC_POP \
|
|
401
|
-
Y_PRAGMA("GCC diagnostic pop")
|
|
402
|
-
#elif defined(_MSC_VER)
|
|
403
|
-
#define Y_PRAGMA_DIAGNOSTIC_POP \
|
|
404
|
-
Y_PRAGMA(warning(pop))
|
|
405
|
-
#else
|
|
406
|
-
#define Y_PRAGMA_DIAGNOSTIC_POP
|
|
407
|
-
#endif
|
|
408
|
-
|
|
409
|
-
/**
|
|
410
|
-
* @def Y_PRAGMA_NO_WSHADOW
|
|
411
|
-
*
|
|
412
|
-
* Cross-compiler pragma to disable warnings about shadowing variables
|
|
413
|
-
*
|
|
414
|
-
* @code
|
|
415
|
-
* Y_PRAGMA_DIAGNOSTIC_PUSH
|
|
416
|
-
* Y_PRAGMA_NO_WSHADOW
|
|
417
|
-
*
|
|
418
|
-
* // some code which use variable shadowing, e.g.:
|
|
419
|
-
*
|
|
420
|
-
* for (int i = 0; i < 100; ++i) {
|
|
421
|
-
* Use(i);
|
|
422
|
-
*
|
|
423
|
-
* for (int i = 42; i < 100500; ++i) { // this i is shadowing previous i
|
|
424
|
-
* AnotherUse(i);
|
|
425
|
-
* }
|
|
426
|
-
* }
|
|
427
|
-
*
|
|
428
|
-
* Y_PRAGMA_DIAGNOSTIC_POP
|
|
429
|
-
* @endcode
|
|
430
|
-
*/
|
|
431
|
-
#if defined(__clang__) || defined(__GNUC__)
|
|
432
|
-
#define Y_PRAGMA_NO_WSHADOW \
|
|
433
|
-
Y_PRAGMA("GCC diagnostic ignored \"-Wshadow\"")
|
|
434
|
-
#elif defined(_MSC_VER)
|
|
435
|
-
#define Y_PRAGMA_NO_WSHADOW \
|
|
436
|
-
Y_PRAGMA(warning(disable : 4456 4457))
|
|
437
|
-
#else
|
|
438
|
-
#define Y_PRAGMA_NO_WSHADOW
|
|
439
|
-
#endif
|
|
440
|
-
|
|
441
|
-
/**
|
|
442
|
-
* @ def Y_PRAGMA_NO_UNUSED_FUNCTION
|
|
443
|
-
*
|
|
444
|
-
* Cross-compiler pragma to disable warnings about unused functions
|
|
445
|
-
*
|
|
446
|
-
* @see
|
|
447
|
-
* GCC: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
|
448
|
-
* Clang: https://clang.llvm.org/docs/DiagnosticsReference.html#wunused-function
|
|
449
|
-
* MSVC: there is no such warning
|
|
450
|
-
*
|
|
451
|
-
* @code
|
|
452
|
-
* Y_PRAGMA_DIAGNOSTIC_PUSH
|
|
453
|
-
* Y_PRAGMA_NO_UNUSED_FUNCTION
|
|
454
|
-
*
|
|
455
|
-
* // some code which introduces a function which later will not be used, e.g.:
|
|
456
|
-
*
|
|
457
|
-
* void Foo() {
|
|
458
|
-
* }
|
|
459
|
-
*
|
|
460
|
-
* int main() {
|
|
461
|
-
* return 0; // Foo() never called
|
|
462
|
-
* }
|
|
463
|
-
*
|
|
464
|
-
* Y_PRAGMA_DIAGNOSTIC_POP
|
|
465
|
-
* @endcode
|
|
466
|
-
*/
|
|
467
|
-
#if defined(__clang__) || defined(__GNUC__)
|
|
468
|
-
#define Y_PRAGMA_NO_UNUSED_FUNCTION \
|
|
469
|
-
Y_PRAGMA("GCC diagnostic ignored \"-Wunused-function\"")
|
|
470
|
-
#else
|
|
471
|
-
#define Y_PRAGMA_NO_UNUSED_FUNCTION
|
|
472
|
-
#endif
|
|
473
|
-
|
|
474
|
-
/**
|
|
475
|
-
* @ def Y_PRAGMA_NO_UNUSED_PARAMETER
|
|
476
|
-
*
|
|
477
|
-
* Cross-compiler pragma to disable warnings about unused function parameters
|
|
478
|
-
*
|
|
479
|
-
* @see
|
|
480
|
-
* GCC: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
|
481
|
-
* Clang: https://clang.llvm.org/docs/DiagnosticsReference.html#wunused-parameter
|
|
482
|
-
* MSVC: https://msdn.microsoft.com/en-us/library/26kb9fy0.aspx
|
|
483
|
-
*
|
|
484
|
-
* @code
|
|
485
|
-
* Y_PRAGMA_DIAGNOSTIC_PUSH
|
|
486
|
-
* Y_PRAGMA_NO_UNUSED_PARAMETER
|
|
487
|
-
*
|
|
488
|
-
* // some code which introduces a function with unused parameter, e.g.:
|
|
489
|
-
*
|
|
490
|
-
* void foo(int a) {
|
|
491
|
-
* // a is not referenced
|
|
492
|
-
* }
|
|
493
|
-
*
|
|
494
|
-
* int main() {
|
|
495
|
-
* foo(1);
|
|
496
|
-
* return 0;
|
|
497
|
-
* }
|
|
498
|
-
*
|
|
499
|
-
* Y_PRAGMA_DIAGNOSTIC_POP
|
|
500
|
-
* @endcode
|
|
501
|
-
*/
|
|
502
|
-
#if defined(__clang__) || defined(__GNUC__)
|
|
503
|
-
#define Y_PRAGMA_NO_UNUSED_PARAMETER \
|
|
504
|
-
Y_PRAGMA("GCC diagnostic ignored \"-Wunused-parameter\"")
|
|
505
|
-
#elif defined(_MSC_VER)
|
|
506
|
-
#define Y_PRAGMA_NO_UNUSED_PARAMETER \
|
|
507
|
-
Y_PRAGMA(warning(disable : 4100))
|
|
508
|
-
#else
|
|
509
|
-
#define Y_PRAGMA_NO_UNUSED_PARAMETER
|
|
510
|
-
#endif
|
|
511
|
-
|
|
512
|
-
/**
|
|
513
|
-
* @def Y_PRAGMA_NO_DEPRECATED
|
|
514
|
-
*
|
|
515
|
-
* Cross compiler pragma to disable warnings and errors about deprecated
|
|
516
|
-
*
|
|
517
|
-
* @see
|
|
518
|
-
* GCC: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
|
519
|
-
* Clang: https://clang.llvm.org/docs/DiagnosticsReference.html#wdeprecated
|
|
520
|
-
* MSVC: https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4996?view=vs-2017
|
|
521
|
-
*
|
|
522
|
-
* @code
|
|
523
|
-
* Y_PRAGMA_DIAGNOSTIC_PUSH
|
|
524
|
-
* Y_PRAGMA_NO_DEPRECATED
|
|
525
|
-
*
|
|
526
|
-
* [deprecated] void foo() {
|
|
527
|
-
* // ...
|
|
528
|
-
* }
|
|
529
|
-
*
|
|
530
|
-
* int main() {
|
|
531
|
-
* foo();
|
|
532
|
-
* return 0;
|
|
533
|
-
* }
|
|
534
|
-
*
|
|
535
|
-
* Y_PRAGMA_DIAGNOSTIC_POP
|
|
536
|
-
* @endcode
|
|
537
|
-
*/
|
|
538
|
-
#if defined(__clang__) || defined(__GNUC__)
|
|
539
|
-
#define Y_PRAGMA_NO_DEPRECATED \
|
|
540
|
-
Y_PRAGMA("GCC diagnostic ignored \"-Wdeprecated\"")
|
|
541
|
-
#elif defined(_MSC_VER)
|
|
542
|
-
#define Y_PRAGMA_NO_DEPRECATED \
|
|
543
|
-
Y_PRAGMA(warning(disable : 4996))
|
|
544
|
-
#else
|
|
545
|
-
#define Y_PRAGMA_NO_DEPRECATED
|
|
546
|
-
#endif
|
|
547
|
-
|
|
548
|
-
// Memory sanitizer sometimes doesn't correctly set parameter shadow of constant functions.
|
|
549
|
-
#if (defined(__clang__) || defined(__GNUC__)) && !defined(_msan_enabled_)
|
|
550
|
-
/**
|
|
551
|
-
* @def Y_CONST_FUNCTION
|
|
552
|
-
methods and functions, marked with this method are promised to:
|
|
553
|
-
1. do not have side effects
|
|
554
|
-
2. this method do not read global memory
|
|
555
|
-
NOTE: this attribute can't be set for methods that depend on data, pointed by this
|
|
556
|
-
this allow compilers to do hard optimization of that functions
|
|
557
|
-
NOTE: in common case this attribute can't be set if method have pointer-arguments
|
|
558
|
-
NOTE: as result there no any reason to discard result of such method
|
|
559
|
-
*/
|
|
560
|
-
#define Y_CONST_FUNCTION [[gnu::const]]
|
|
561
|
-
#endif
|
|
562
|
-
|
|
563
|
-
#if !defined(Y_CONST_FUNCTION)
|
|
564
|
-
#define Y_CONST_FUNCTION
|
|
565
|
-
#endif
|
|
566
|
-
|
|
567
|
-
#if defined(__clang__) || defined(__GNUC__)
|
|
568
|
-
/**
|
|
569
|
-
* @def Y_PURE_FUNCTION
|
|
570
|
-
methods and functions, marked with this method are promised to:
|
|
571
|
-
1. do not have side effects
|
|
572
|
-
2. result will be the same if no global memory changed
|
|
573
|
-
this allow compilers to do hard optimization of that functions
|
|
574
|
-
NOTE: as result there no any reason to discard result of such method
|
|
575
|
-
*/
|
|
576
|
-
#define Y_PURE_FUNCTION [[gnu::pure]]
|
|
577
|
-
#endif
|
|
578
|
-
|
|
579
|
-
#if !defined(Y_PURE_FUNCTION)
|
|
580
|
-
#define Y_PURE_FUNCTION
|
|
581
|
-
#endif
|
|
582
|
-
|
|
583
|
-
/**
|
|
584
|
-
* @ def Y_HAVE_INT128
|
|
585
|
-
*
|
|
586
|
-
* Defined when the compiler supports __int128 extension
|
|
587
|
-
*
|
|
588
|
-
* @code
|
|
589
|
-
*
|
|
590
|
-
* #if defined(Y_HAVE_INT128)
|
|
591
|
-
* __int128 myVeryBigInt = 12345678901234567890;
|
|
592
|
-
* #endif
|
|
593
|
-
*
|
|
594
|
-
* @endcode
|
|
595
|
-
*/
|
|
596
|
-
#if defined(__SIZEOF_INT128__)
|
|
597
|
-
#define Y_HAVE_INT128 1
|
|
598
|
-
#endif
|
|
599
|
-
|
|
600
|
-
/**
|
|
601
|
-
* XRAY macro must be passed to compiler if XRay is enabled.
|
|
602
|
-
*
|
|
603
|
-
* Define everything XRay-specific as a macro so that it doesn't cause errors
|
|
604
|
-
* for compilers that doesn't support XRay.
|
|
605
|
-
*/
|
|
606
|
-
#if defined(XRAY) && defined(__cplusplus)
|
|
607
|
-
#include <xray/xray_interface.h>
|
|
608
|
-
#define Y_XRAY_ALWAYS_INSTRUMENT [[clang::xray_always_instrument]]
|
|
609
|
-
#define Y_XRAY_NEVER_INSTRUMENT [[clang::xray_never_instrument]]
|
|
610
|
-
#define Y_XRAY_CUSTOM_EVENT(__string, __length) \
|
|
611
|
-
do { \
|
|
612
|
-
__xray_customevent(__string, __length); \
|
|
613
|
-
} while (0)
|
|
614
|
-
#else
|
|
615
|
-
#define Y_XRAY_ALWAYS_INSTRUMENT
|
|
616
|
-
#define Y_XRAY_NEVER_INSTRUMENT
|
|
617
|
-
#define Y_XRAY_CUSTOM_EVENT(__string, __length) \
|
|
618
|
-
do { \
|
|
619
|
-
} while (0)
|
|
620
|
-
#endif
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "mutex.h"
|
|
4
|
-
|
|
5
|
-
#include <util/generic/ptr.h>
|
|
6
|
-
#include <util/generic/noncopyable.h>
|
|
7
|
-
#include <util/datetime/base.h>
|
|
8
|
-
|
|
9
|
-
#include <utility>
|
|
10
|
-
|
|
11
|
-
class TCondVar {
|
|
12
|
-
public:
|
|
13
|
-
TCondVar();
|
|
14
|
-
~TCondVar();
|
|
15
|
-
|
|
16
|
-
void BroadCast() noexcept;
|
|
17
|
-
void Signal() noexcept;
|
|
18
|
-
|
|
19
|
-
/*
|
|
20
|
-
* returns false if failed by timeout
|
|
21
|
-
*/
|
|
22
|
-
bool WaitD(TMutex& m, TInstant deadline) noexcept;
|
|
23
|
-
|
|
24
|
-
template <typename P>
|
|
25
|
-
inline bool WaitD(TMutex& m, TInstant deadline, P pred) noexcept {
|
|
26
|
-
while (!pred()) {
|
|
27
|
-
if (!WaitD(m, deadline)) {
|
|
28
|
-
return pred();
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/*
|
|
35
|
-
* returns false if failed by timeout
|
|
36
|
-
*/
|
|
37
|
-
inline bool WaitT(TMutex& m, TDuration timeout) noexcept {
|
|
38
|
-
return WaitD(m, timeout.ToDeadLine());
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
template <typename P>
|
|
42
|
-
inline bool WaitT(TMutex& m, TDuration timeout, P pred) noexcept {
|
|
43
|
-
return WaitD(m, timeout.ToDeadLine(), std::move(pred));
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/*
|
|
47
|
-
* infinite wait
|
|
48
|
-
*/
|
|
49
|
-
inline void WaitI(TMutex& m) noexcept {
|
|
50
|
-
WaitD(m, TInstant::Max());
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
template <typename P>
|
|
54
|
-
inline void WaitI(TMutex& m, P pred) noexcept {
|
|
55
|
-
WaitD(m, TInstant::Max(), std::move(pred));
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
//deprecated
|
|
59
|
-
inline void Wait(TMutex& m) noexcept {
|
|
60
|
-
WaitI(m);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
template <typename P>
|
|
64
|
-
inline void Wait(TMutex& m, P pred) noexcept {
|
|
65
|
-
WaitI(m, std::move(pred));
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
private:
|
|
69
|
-
class TImpl;
|
|
70
|
-
THolder<TImpl> Impl_;
|
|
71
|
-
};
|