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.
Files changed (289) hide show
  1. package/DEPLOYMENT.md +22 -15
  2. package/README.md +37 -27
  3. package/binding.gyp +5 -7
  4. package/build_scripts/bootstrap.js +2 -1
  5. package/build_scripts/out/build.js +46 -68
  6. package/build_scripts/out/build_model.js +1 -1
  7. package/build_scripts/out/{build_ya.js → build_native.js} +1 -1
  8. package/build_scripts/out/ci.js +5 -5
  9. package/build_scripts/out/config.js +32 -18
  10. package/build_scripts/out/install.js +5 -3
  11. package/build_scripts/out/package_prepublish.js +1 -1
  12. package/build_scripts/out/packaging.js +1 -19
  13. package/build_scripts/out/run_tests.js +1 -1
  14. package/build_scripts/out/test.js +8 -3
  15. package/config.json +18 -11
  16. package/inc/catboost/libs/model_interface/c_api.h +349 -3
  17. package/lib/catboost.d.ts +65 -21
  18. package/package.json +4 -4
  19. package/src/api_helpers.cpp +100 -24
  20. package/src/api_helpers.h +8 -7
  21. package/src/api_module.cpp +1 -2
  22. package/src/model.cpp +483 -83
  23. package/src/model.h +24 -9
  24. package/inc/contrib/libs/cxxsupp/system_stl/include/stlfwd +0 -14
  25. package/inc/util/charset/recode_result.h +0 -9
  26. package/inc/util/charset/unicode_table.h +0 -123
  27. package/inc/util/charset/unidata.h +0 -421
  28. package/inc/util/charset/utf8.h +0 -384
  29. package/inc/util/charset/wide.h +0 -843
  30. package/inc/util/charset/wide_specific.h +0 -22
  31. package/inc/util/datetime/base.h +0 -669
  32. package/inc/util/datetime/constants.h +0 -7
  33. package/inc/util/datetime/cputimer.h +0 -124
  34. package/inc/util/datetime/parser.h +0 -292
  35. package/inc/util/datetime/systime.h +0 -47
  36. package/inc/util/datetime/uptime.h +0 -8
  37. package/inc/util/digest/city.h +0 -88
  38. package/inc/util/digest/fnv.h +0 -73
  39. package/inc/util/digest/multi.h +0 -14
  40. package/inc/util/digest/murmur.h +0 -57
  41. package/inc/util/digest/numeric.h +0 -86
  42. package/inc/util/digest/sequence.h +0 -48
  43. package/inc/util/draft/date.h +0 -129
  44. package/inc/util/draft/datetime.h +0 -184
  45. package/inc/util/draft/enum.h +0 -136
  46. package/inc/util/draft/holder_vector.h +0 -102
  47. package/inc/util/draft/ip.h +0 -131
  48. package/inc/util/draft/matrix.h +0 -108
  49. package/inc/util/draft/memory.h +0 -40
  50. package/inc/util/folder/dirent_win.h +0 -46
  51. package/inc/util/folder/dirut.h +0 -121
  52. package/inc/util/folder/filelist.h +0 -81
  53. package/inc/util/folder/fts.h +0 -108
  54. package/inc/util/folder/iterator.h +0 -109
  55. package/inc/util/folder/lstat_win.h +0 -20
  56. package/inc/util/folder/path.h +0 -225
  57. package/inc/util/folder/pathsplit.h +0 -113
  58. package/inc/util/folder/tempdir.h +0 -42
  59. package/inc/util/generic/adaptor.h +0 -134
  60. package/inc/util/generic/algorithm.h +0 -765
  61. package/inc/util/generic/array_ref.h +0 -282
  62. package/inc/util/generic/array_size.h +0 -24
  63. package/inc/util/generic/benchmark/vector_count_ctor/f.h +0 -9
  64. package/inc/util/generic/bitmap.h +0 -1115
  65. package/inc/util/generic/bitops.h +0 -459
  66. package/inc/util/generic/bt_exception.h +0 -24
  67. package/inc/util/generic/buffer.h +0 -232
  68. package/inc/util/generic/cast.h +0 -176
  69. package/inc/util/generic/deque.h +0 -24
  70. package/inc/util/generic/explicit_type.h +0 -42
  71. package/inc/util/generic/fastqueue.h +0 -55
  72. package/inc/util/generic/flags.h +0 -244
  73. package/inc/util/generic/function.h +0 -103
  74. package/inc/util/generic/fwd.h +0 -171
  75. package/inc/util/generic/guid.h +0 -61
  76. package/inc/util/generic/hash.h +0 -2032
  77. package/inc/util/generic/hash_primes.h +0 -140
  78. package/inc/util/generic/hash_set.h +0 -490
  79. package/inc/util/generic/hide_ptr.h +0 -3
  80. package/inc/util/generic/intrlist.h +0 -876
  81. package/inc/util/generic/is_in.h +0 -53
  82. package/inc/util/generic/iterator.h +0 -137
  83. package/inc/util/generic/iterator_range.h +0 -105
  84. package/inc/util/generic/lazy_value.h +0 -66
  85. package/inc/util/generic/list.h +0 -22
  86. package/inc/util/generic/map.h +0 -44
  87. package/inc/util/generic/mapfindptr.h +0 -60
  88. package/inc/util/generic/maybe.h +0 -713
  89. package/inc/util/generic/maybe_traits.h +0 -164
  90. package/inc/util/generic/mem_copy.h +0 -55
  91. package/inc/util/generic/noncopyable.h +0 -38
  92. package/inc/util/generic/object_counter.h +0 -53
  93. package/inc/util/generic/ptr.h +0 -1113
  94. package/inc/util/generic/queue.h +0 -57
  95. package/inc/util/generic/refcount.h +0 -162
  96. package/inc/util/generic/reserve.h +0 -11
  97. package/inc/util/generic/scope.h +0 -65
  98. package/inc/util/generic/serialized_enum.h +0 -406
  99. package/inc/util/generic/set.h +0 -42
  100. package/inc/util/generic/singleton.h +0 -136
  101. package/inc/util/generic/size_literals.h +0 -65
  102. package/inc/util/generic/stack.h +0 -18
  103. package/inc/util/generic/store_policy.h +0 -120
  104. package/inc/util/generic/strbase.h +0 -612
  105. package/inc/util/generic/strbuf.h +0 -552
  106. package/inc/util/generic/strfcpy.h +0 -17
  107. package/inc/util/generic/string.h +0 -1572
  108. package/inc/util/generic/string_hash.h +0 -21
  109. package/inc/util/generic/string_ut.h +0 -1175
  110. package/inc/util/generic/type_name.h +0 -34
  111. package/inc/util/generic/typelist.h +0 -114
  112. package/inc/util/generic/typetraits.h +0 -325
  113. package/inc/util/generic/utility.h +0 -132
  114. package/inc/util/generic/va_args.h +0 -400
  115. package/inc/util/generic/variant.h +0 -631
  116. package/inc/util/generic/variant_traits.h +0 -171
  117. package/inc/util/generic/vector.h +0 -119
  118. package/inc/util/generic/xrange.h +0 -258
  119. package/inc/util/generic/yexception.h +0 -212
  120. package/inc/util/generic/yexception_ut.h +0 -14
  121. package/inc/util/generic/ylimits.h +0 -92
  122. package/inc/util/generic/ymath.h +0 -206
  123. package/inc/util/memory/addstorage.h +0 -93
  124. package/inc/util/memory/alloc.h +0 -27
  125. package/inc/util/memory/blob.h +0 -296
  126. package/inc/util/memory/mmapalloc.h +0 -8
  127. package/inc/util/memory/pool.h +0 -432
  128. package/inc/util/memory/segmented_string_pool.h +0 -194
  129. package/inc/util/memory/segpool_alloc.h +0 -118
  130. package/inc/util/memory/smallobj.h +0 -141
  131. package/inc/util/memory/tempbuf.h +0 -111
  132. package/inc/util/network/address.h +0 -136
  133. package/inc/util/network/endpoint.h +0 -61
  134. package/inc/util/network/hostip.h +0 -16
  135. package/inc/util/network/init.h +0 -60
  136. package/inc/util/network/interface.h +0 -17
  137. package/inc/util/network/iovec.h +0 -65
  138. package/inc/util/network/ip.h +0 -116
  139. package/inc/util/network/nonblock.h +0 -8
  140. package/inc/util/network/pair.h +0 -9
  141. package/inc/util/network/poller.h +0 -58
  142. package/inc/util/network/pollerimpl.h +0 -707
  143. package/inc/util/network/sock.h +0 -608
  144. package/inc/util/network/socket.h +0 -421
  145. package/inc/util/random/common_ops.h +0 -130
  146. package/inc/util/random/easy.h +0 -47
  147. package/inc/util/random/entropy.h +0 -21
  148. package/inc/util/random/fast.h +0 -101
  149. package/inc/util/random/init_atfork.h +0 -3
  150. package/inc/util/random/lcg_engine.h +0 -66
  151. package/inc/util/random/mersenne.h +0 -46
  152. package/inc/util/random/mersenne32.h +0 -50
  153. package/inc/util/random/mersenne64.h +0 -50
  154. package/inc/util/random/normal.h +0 -38
  155. package/inc/util/random/random.h +0 -30
  156. package/inc/util/random/shuffle.h +0 -39
  157. package/inc/util/str_stl.h +0 -266
  158. package/inc/util/stream/aligned.h +0 -99
  159. package/inc/util/stream/buffer.h +0 -119
  160. package/inc/util/stream/buffered.h +0 -225
  161. package/inc/util/stream/debug.h +0 -53
  162. package/inc/util/stream/direct_io.h +0 -43
  163. package/inc/util/stream/file.h +0 -108
  164. package/inc/util/stream/format.h +0 -444
  165. package/inc/util/stream/fwd.h +0 -100
  166. package/inc/util/stream/hex.h +0 -8
  167. package/inc/util/stream/holder.h +0 -44
  168. package/inc/util/stream/input.h +0 -273
  169. package/inc/util/stream/labeled.h +0 -19
  170. package/inc/util/stream/length.h +0 -100
  171. package/inc/util/stream/mem.h +0 -255
  172. package/inc/util/stream/multi.h +0 -32
  173. package/inc/util/stream/null.h +0 -61
  174. package/inc/util/stream/output.h +0 -304
  175. package/inc/util/stream/pipe.h +0 -112
  176. package/inc/util/stream/printf.h +0 -25
  177. package/inc/util/stream/str.h +0 -207
  178. package/inc/util/stream/tee.h +0 -28
  179. package/inc/util/stream/tempbuf.h +0 -21
  180. package/inc/util/stream/tokenizer.h +0 -214
  181. package/inc/util/stream/trace.h +0 -60
  182. package/inc/util/stream/walk.h +0 -35
  183. package/inc/util/stream/zerocopy.h +0 -91
  184. package/inc/util/stream/zerocopy_output.h +0 -57
  185. package/inc/util/stream/zlib.h +0 -173
  186. package/inc/util/string/ascii.h +0 -236
  187. package/inc/util/string/builder.h +0 -39
  188. package/inc/util/string/cast.h +0 -347
  189. package/inc/util/string/cstriter.h +0 -14
  190. package/inc/util/string/escape.h +0 -70
  191. package/inc/util/string/hex.h +0 -59
  192. package/inc/util/string/join.h +0 -194
  193. package/inc/util/string/printf.h +0 -13
  194. package/inc/util/string/reverse.h +0 -16
  195. package/inc/util/string/split.h +0 -1080
  196. package/inc/util/string/strip.h +0 -257
  197. package/inc/util/string/strspn.h +0 -65
  198. package/inc/util/string/subst.h +0 -56
  199. package/inc/util/string/type.h +0 -50
  200. package/inc/util/string/util.h +0 -195
  201. package/inc/util/string/vector.h +0 -132
  202. package/inc/util/system/align.h +0 -50
  203. package/inc/util/system/atexit.h +0 -22
  204. package/inc/util/system/atomic.h +0 -51
  205. package/inc/util/system/atomic_gcc.h +0 -90
  206. package/inc/util/system/atomic_ops.h +0 -189
  207. package/inc/util/system/atomic_win.h +0 -114
  208. package/inc/util/system/backtrace.h +0 -39
  209. package/inc/util/system/byteorder.h +0 -186
  210. package/inc/util/system/compat.h +0 -84
  211. package/inc/util/system/compiler.h +0 -620
  212. package/inc/util/system/condvar.h +0 -71
  213. package/inc/util/system/context.h +0 -181
  214. package/inc/util/system/context_aarch64.h +0 -8
  215. package/inc/util/system/context_i686.h +0 -9
  216. package/inc/util/system/context_x86.h +0 -12
  217. package/inc/util/system/context_x86_64.h +0 -7
  218. package/inc/util/system/cpu_id.h +0 -159
  219. package/inc/util/system/daemon.h +0 -28
  220. package/inc/util/system/datetime.h +0 -98
  221. package/inc/util/system/defaults.h +0 -149
  222. package/inc/util/system/demangle.h +0 -5
  223. package/inc/util/system/demangle_impl.h +0 -23
  224. package/inc/util/system/direct_io.h +0 -71
  225. package/inc/util/system/dynlib.h +0 -119
  226. package/inc/util/system/env.h +0 -32
  227. package/inc/util/system/error.h +0 -95
  228. package/inc/util/system/event.h +0 -122
  229. package/inc/util/system/execpath.h +0 -17
  230. package/inc/util/system/fasttime.h +0 -6
  231. package/inc/util/system/fhandle.h +0 -27
  232. package/inc/util/system/file.h +0 -210
  233. package/inc/util/system/file_lock.h +0 -34
  234. package/inc/util/system/filemap.h +0 -383
  235. package/inc/util/system/flock.h +0 -35
  236. package/inc/util/system/fs.h +0 -156
  237. package/inc/util/system/fs_win.h +0 -29
  238. package/inc/util/system/fstat.h +0 -46
  239. package/inc/util/system/getpid.h +0 -12
  240. package/inc/util/system/guard.h +0 -179
  241. package/inc/util/system/hi_lo.h +0 -139
  242. package/inc/util/system/hostname.h +0 -10
  243. package/inc/util/system/hp_timer.h +0 -36
  244. package/inc/util/system/info.h +0 -12
  245. package/inc/util/system/interrupt_signals.h +0 -22
  246. package/inc/util/system/madvise.h +0 -30
  247. package/inc/util/system/maxlen.h +0 -32
  248. package/inc/util/system/mem_info.h +0 -18
  249. package/inc/util/system/mincore.h +0 -38
  250. package/inc/util/system/mktemp.h +0 -11
  251. package/inc/util/system/mlock.h +0 -43
  252. package/inc/util/system/mutex.h +0 -67
  253. package/inc/util/system/nice.h +0 -3
  254. package/inc/util/system/pipe.h +0 -90
  255. package/inc/util/system/platform.h +0 -246
  256. package/inc/util/system/progname.h +0 -13
  257. package/inc/util/system/protect.h +0 -25
  258. package/inc/util/system/rusage.h +0 -26
  259. package/inc/util/system/rwlock.h +0 -78
  260. package/inc/util/system/sanitizers.h +0 -122
  261. package/inc/util/system/sem.h +0 -41
  262. package/inc/util/system/shellcommand.h +0 -472
  263. package/inc/util/system/shmat.h +0 -32
  264. package/inc/util/system/sigset.h +0 -78
  265. package/inc/util/system/spin_wait.h +0 -10
  266. package/inc/util/system/spinlock.h +0 -121
  267. package/inc/util/system/src_location.h +0 -25
  268. package/inc/util/system/src_root.h +0 -68
  269. package/inc/util/system/sys_alloc.h +0 -43
  270. package/inc/util/system/sysstat.h +0 -52
  271. package/inc/util/system/tempfile.h +0 -34
  272. package/inc/util/system/thread.h +0 -167
  273. package/inc/util/system/tls.h +0 -307
  274. package/inc/util/system/types.h +0 -119
  275. package/inc/util/system/unaligned_mem.h +0 -67
  276. package/inc/util/system/user.h +0 -5
  277. package/inc/util/system/utime.h +0 -6
  278. package/inc/util/system/valgrind.h +0 -48
  279. package/inc/util/system/winint.h +0 -43
  280. package/inc/util/system/yassert.h +0 -121
  281. package/inc/util/system/yield.h +0 -4
  282. package/inc/util/thread/factory.h +0 -65
  283. package/inc/util/thread/fwd.h +0 -30
  284. package/inc/util/thread/lfqueue.h +0 -406
  285. package/inc/util/thread/lfstack.h +0 -188
  286. package/inc/util/thread/pool.h +0 -388
  287. package/inc/util/thread/singleton.h +0 -42
  288. package/inc/util/ysafeptr.h +0 -427
  289. 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
- };