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