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,176 +0,0 @@
1
- #pragma once
2
-
3
- #include "typetraits.h"
4
- #include "yexception.h"
5
- #include "type_name.h"
6
-
7
- #include <util/system/compat.h>
8
- #include <util/system/unaligned_mem.h>
9
- #include <util/system/yassert.h>
10
-
11
- #include <cstdlib>
12
-
13
- template <class T, class F>
14
- static inline T VerifyDynamicCast(F f) {
15
- if (!f) {
16
- return nullptr;
17
- }
18
-
19
- T ret = dynamic_cast<T>(f);
20
-
21
- Y_VERIFY(ret, "verify cast failed");
22
-
23
- return ret;
24
- }
25
-
26
- #if !defined(NDEBUG)
27
- #define USE_DEBUG_CHECKED_CAST
28
- #endif
29
-
30
- namespace NPrivate {
31
- template <typename T, typename F>
32
- static T DynamicCast(F f) {
33
- return dynamic_cast<T>(f);
34
- }
35
- }
36
-
37
- /*
38
- * replacement for dynamic_cast(dynamic_cast in debug mode, else static_cast)
39
- */
40
- template <class T, class F>
41
- static inline T CheckedCast(F f) {
42
- #if defined(USE_DEBUG_CHECKED_CAST)
43
- return VerifyDynamicCast<T>(f);
44
- #else
45
- /* Make sure F is polymorphic.
46
- * Without this cast, CheckedCast with non-polymorphic F
47
- * incorrectly compiled without error in release mode.
48
- */
49
- {
50
- auto&& x = &::NPrivate::DynamicCast<T, F>;
51
-
52
- (void)x;
53
- }
54
-
55
- return static_cast<T>(f);
56
- #endif // USE_DEBUG_CHECKED_CAST
57
- }
58
-
59
- /*
60
- * be polite
61
- */
62
- #undef USE_DEBUG_CHECKED_CAST
63
-
64
- template <bool isUnsigned>
65
- class TInteger;
66
-
67
- template <>
68
- class TInteger<true> {
69
- public:
70
- template <class TUnsigned>
71
- static constexpr bool IsNegative(TUnsigned) noexcept {
72
- return false;
73
- }
74
- };
75
-
76
- template <>
77
- class TInteger<false> {
78
- public:
79
- template <class TSigned>
80
- static constexpr bool IsNegative(const TSigned value) noexcept {
81
- return value < 0;
82
- }
83
- };
84
-
85
- template <class TType>
86
- constexpr bool IsNegative(const TType value) noexcept {
87
- return TInteger<std::is_unsigned<TType>::value>::IsNegative(value);
88
- }
89
-
90
- namespace NPrivate {
91
- template <class T>
92
- using TUnderlyingTypeOrSelf = typename std::conditional<
93
- std::is_enum<T>::value,
94
- std::underlying_type<T>, // Lazy evaluatuion: do not call ::type here, because underlying_type<T> is undefined if T is not an enum.
95
- std::enable_if<true, T> // Wrapping T in a class, that has member ::type typedef.
96
- >::type::type; // Left ::type is for std::conditional, right ::type is for underlying_type/enable_if
97
-
98
- template <class TSmall, class TLarge>
99
- struct TSafelyConvertible {
100
- using TSmallInt = TUnderlyingTypeOrSelf<TSmall>;
101
- using TLargeInt = TUnderlyingTypeOrSelf<TLarge>;
102
-
103
- static constexpr bool Result = std::is_integral<TSmallInt>::value && std::is_integral<TLargeInt>::value &&
104
- ((std::is_signed<TSmallInt>::value == std::is_signed<TLargeInt>::value && sizeof(TSmallInt) >= sizeof(TLargeInt)) ||
105
- (std::is_signed<TSmallInt>::value && sizeof(TSmallInt) > sizeof(TLargeInt)));
106
- };
107
- }
108
-
109
- template <class TSmallInt, class TLargeInt>
110
- constexpr std::enable_if_t< ::NPrivate::TSafelyConvertible<TSmallInt, TLargeInt>::Result, TSmallInt> SafeIntegerCast(TLargeInt largeInt) noexcept {
111
- return static_cast<TSmallInt>(largeInt);
112
- }
113
-
114
- template <class TSmall, class TLarge>
115
- inline std::enable_if_t<!::NPrivate::TSafelyConvertible<TSmall, TLarge>::Result, TSmall> SafeIntegerCast(TLarge largeInt) {
116
- using TSmallInt = ::NPrivate::TUnderlyingTypeOrSelf<TSmall>;
117
- using TLargeInt = ::NPrivate::TUnderlyingTypeOrSelf<TLarge>;
118
-
119
- if (std::is_unsigned<TSmallInt>::value && std::is_signed<TLargeInt>::value) {
120
- if (IsNegative(largeInt)) {
121
- ythrow TBadCastException() << "Conversion '" << TypeName<TLarge>() << '{' << TLargeInt(largeInt) << "}' to '"
122
- << TypeName<TSmallInt>()
123
- << "', negative value converted to unsigned";
124
- }
125
- }
126
-
127
- TSmallInt smallInt = TSmallInt(largeInt);
128
-
129
- if (std::is_signed<TSmallInt>::value && std::is_unsigned<TLargeInt>::value) {
130
- if (IsNegative(smallInt)) {
131
- ythrow TBadCastException() << "Conversion '" << TypeName<TLarge>() << '{' << TLargeInt(largeInt) << "}' to '"
132
- << TypeName<TSmallInt>()
133
- << "', positive value converted to negative";
134
- }
135
- }
136
-
137
- if (TLargeInt(smallInt) != largeInt) {
138
- ythrow TBadCastException() << "Conversion '" << TypeName<TLarge>() << '{' << TLargeInt(largeInt) << "}' to '"
139
- << TypeName<TSmallInt>() << "', loss of data";
140
- }
141
-
142
- return static_cast<TSmall>(smallInt);
143
- }
144
-
145
- template <class TSmallInt, class TLargeInt>
146
- inline TSmallInt IntegerCast(TLargeInt largeInt) noexcept {
147
- try {
148
- return SafeIntegerCast<TSmallInt>(largeInt);
149
- } catch (const yexception& exc) {
150
- Y_FAIL("IntegerCast: %s", exc.what());
151
- }
152
- }
153
-
154
- /* Convert given enum value to its underlying type. This is just a shortcut for
155
- * `static_cast<std::underlying_type_t<EEnum>>(enum_)`.
156
- */
157
- template <typename T>
158
- constexpr std::underlying_type_t<T> ToUnderlying(const T enum_) noexcept {
159
- return static_cast<std::underlying_type_t<T>>(enum_);
160
- }
161
-
162
- // std::bit_cast from c++20
163
- template <class TTarget, class TSource>
164
- TTarget BitCast(const TSource& source) {
165
- static_assert(sizeof(TSource) == sizeof(TTarget), "Size mismatch");
166
- static_assert(std::is_trivially_copyable<TSource>::value, "TSource is not trivially copyable");
167
- static_assert(std::is_trivial<TTarget>::value, "TTarget is not trivial");
168
-
169
- // Support volatile qualifiers.
170
- // ReadUnaligned does not work with volatile pointers, so cast away
171
- // volatileness beforehand.
172
- using TNonvolatileSource = std::remove_volatile_t<TSource>;
173
- using TNonvolatileTarget = std::remove_volatile_t<TTarget>;
174
-
175
- return ReadUnaligned<TNonvolatileTarget>(&const_cast<const TNonvolatileSource&>(source));
176
- }
@@ -1,24 +0,0 @@
1
- #pragma once
2
-
3
- #include "fwd.h"
4
-
5
- #include <util/memory/alloc.h>
6
-
7
- #include <deque>
8
- #include <memory>
9
- #include <initializer_list>
10
-
11
- template <class T, class A>
12
- class TDeque: public std::deque<T, TReboundAllocator<A, T>> {
13
- using TBase = std::deque<T, TReboundAllocator<A, T>>;
14
- public:
15
- using TBase::TBase;
16
-
17
- inline yssize_t ysize() const noexcept {
18
- return (yssize_t)this->size();
19
- }
20
-
21
- inline explicit operator bool() const noexcept {
22
- return !this->empty();
23
- }
24
- };
@@ -1,42 +0,0 @@
1
- #pragma once
2
-
3
- #include "typetraits.h"
4
-
5
- /**
6
- * Helper type that can be used as one of the parameters in function declaration
7
- * to limit the number of types this function can be called with.
8
- *
9
- * Example usage:
10
- * @code
11
- * void CharOnlyFunction(TExplicitType<char> value);
12
- * void AnythingFunction(char value);
13
- *
14
- * CharOnlyFunction('c'); // Works.
15
- * CharOnlyFunction(1); // Compilation error.
16
- * CharOnlyFunction(1ull); // Compilation error.
17
- *
18
- * AnythingFunction('c'); // Works.
19
- * AnythingFunction(1); // Works.
20
- * AnythingFunction(1ull); // Works.
21
- * @endcode
22
- */
23
- template <class T>
24
- class TExplicitType {
25
- public:
26
- template <class OtherT>
27
- TExplicitType(const OtherT& value, std::enable_if_t<std::is_same<OtherT, T>::value>* = nullptr) noexcept
28
- : Value_(value)
29
- {
30
- }
31
-
32
- const T& Value() const noexcept {
33
- return Value_;
34
- }
35
-
36
- operator const T&() const noexcept {
37
- return Value_;
38
- }
39
-
40
- private:
41
- const T& Value_;
42
- };
@@ -1,55 +0,0 @@
1
- #pragma once
2
-
3
- #include <util/memory/smallobj.h>
4
- #include "ptr.h"
5
-
6
- template <class T>
7
- class TFastQueue {
8
- struct THelper: public TObjectFromPool<THelper>, public TIntrusiveListItem<THelper> {
9
- inline THelper(const T& t)
10
- : Obj(t)
11
- {
12
- }
13
-
14
- T Obj;
15
- };
16
-
17
- public:
18
- inline TFastQueue()
19
- : Pool_(TDefaultAllocator::Instance())
20
- , Size_(0)
21
- {
22
- }
23
-
24
- inline void Push(const T& t) {
25
- Queue_.PushFront(new (&Pool_) THelper(t));
26
- ++Size_;
27
- }
28
-
29
- inline T Pop() {
30
- Y_ASSERT(!this->Empty());
31
-
32
- THolder<THelper> tmp(Queue_.PopBack());
33
- --Size_;
34
-
35
- return tmp->Obj;
36
- }
37
-
38
- inline size_t Size() const noexcept {
39
- return Size_;
40
- }
41
-
42
- Y_PURE_FUNCTION
43
- inline bool Empty() const noexcept {
44
- return !this->Size();
45
- }
46
-
47
- inline explicit operator bool() const noexcept {
48
- return !this->Empty();
49
- }
50
-
51
- private:
52
- typename THelper::TPool Pool_;
53
- TIntrusiveListWithAutoDelete<THelper, TDelete> Queue_;
54
- size_t Size_;
55
- };
@@ -1,244 +0,0 @@
1
- #pragma once
2
-
3
- #include <type_traits>
4
-
5
- #include <util/system/types.h>
6
- #include <util/generic/typetraits.h>
7
- #include <util/generic/fwd.h>
8
-
9
- class IOutputStream;
10
- namespace NPrivate {
11
- void PrintFlags(IOutputStream& stream, ui64 value, size_t size);
12
- }
13
-
14
- /**
15
- * `TFlags` wrapper provides a type-safe mechanism for storing OR combinations
16
- * of enumeration values.
17
- *
18
- * This class is intended to be used mainly via helper macros. For example:
19
- * @code
20
- * class TAligner {
21
- * public:
22
- * enum EOrientation {
23
- * Vertical = 1,
24
- * Horizontal = 2
25
- * };
26
- * Y_DECLARE_FLAGS(EOrientations, EOrientation)
27
- *
28
- * // ...
29
- * };
30
- *
31
- * Y_DECLARE_OPERATORS_FOR_FLAGS(TAligner::EOrientations)
32
- * @endcode
33
- */
34
- template <class Enum>
35
- class TFlags {
36
- static_assert(std::is_enum<Enum>::value, "Expecting an enumeration here.");
37
-
38
- public:
39
- using TEnum = Enum;
40
- using TInt = std::underlying_type_t<Enum>;
41
-
42
- constexpr TFlags(std::nullptr_t = 0)
43
- : Value_(0)
44
- {
45
- }
46
-
47
- constexpr TFlags(Enum value)
48
- : Value_(static_cast<TInt>(value))
49
- {
50
- }
51
-
52
- /* Generated copy/move ctor/assignment are OK. */
53
-
54
- constexpr operator TInt() const {
55
- return Value_;
56
- }
57
-
58
- constexpr TInt ToBaseType() const {
59
- return Value_;
60
- }
61
-
62
- constexpr static TFlags FromBaseType(TInt value) {
63
- return TFlags(TFlag(value));
64
- }
65
-
66
- constexpr friend TFlags operator|(TFlags l, TFlags r) {
67
- return TFlags(TFlag(l.Value_ | r.Value_));
68
- }
69
-
70
- constexpr friend TFlags operator|(TEnum l, TFlags r) {
71
- return TFlags(TFlag(static_cast<TInt>(l) | r.Value_));
72
- }
73
-
74
- constexpr friend TFlags operator|(TFlags l, TEnum r) {
75
- return TFlags(TFlag(l.Value_ | static_cast<TInt>(r)));
76
- }
77
-
78
- constexpr friend TFlags operator^(TFlags l, TFlags r) {
79
- return TFlags(TFlag(l.Value_ ^ r.Value_));
80
- }
81
-
82
- constexpr friend TFlags
83
- operator^(TEnum l, TFlags r) {
84
- return TFlags(TFlag(static_cast<TInt>(l) ^ r.Value_));
85
- }
86
-
87
- constexpr friend TFlags
88
- operator^(TFlags l, TEnum r) {
89
- return TFlags(TFlag(l.Value_ ^ static_cast<TInt>(r)));
90
- }
91
-
92
- constexpr friend TFlags
93
- operator&(TFlags l, TFlags r) {
94
- return TFlags(TFlag(l.Value_ & r.Value_));
95
- }
96
-
97
- constexpr friend TFlags operator&(TEnum l, TFlags r) {
98
- return TFlags(TFlag(static_cast<TInt>(l) & r.Value_));
99
- }
100
-
101
- constexpr friend TFlags operator&(TFlags l, TEnum r) {
102
- return TFlags(TFlag(l.Value_ & static_cast<TInt>(r)));
103
- }
104
-
105
- constexpr friend bool operator==(TFlags l, TFlags r) {
106
- return l.Value_ == r.Value_;
107
- }
108
-
109
- constexpr friend bool operator==(TEnum l, TFlags r) {
110
- return static_cast<TInt>(l) == r.Value_;
111
- }
112
-
113
- constexpr friend bool operator==(TFlags l, TEnum r) {
114
- return l.Value_ == static_cast<TInt>(r);
115
- }
116
-
117
- constexpr friend bool operator!=(TFlags l, TFlags r) {
118
- return l.Value_ != r.Value_;
119
- }
120
-
121
- constexpr friend bool operator!=(TEnum l, TFlags r) {
122
- return static_cast<TInt>(l) != r.Value_;
123
- }
124
-
125
- constexpr friend bool operator!=(TFlags l, TEnum r) {
126
- return l.Value_ != static_cast<TInt>(r);
127
- }
128
-
129
- TFlags& operator&=(TFlags mask) {
130
- *this = *this & mask;
131
- return *this;
132
- }
133
-
134
- TFlags& operator&=(Enum mask) {
135
- *this = *this & mask;
136
- return *this;
137
- }
138
-
139
- TFlags& operator|=(TFlags flags) {
140
- *this = *this | flags;
141
- return *this;
142
- }
143
-
144
- TFlags& operator|=(Enum flags) {
145
- *this = *this | flags;
146
- return *this;
147
- }
148
-
149
- TFlags& operator^=(TFlags flags) {
150
- *this = *this ^ flags;
151
- return *this;
152
- }
153
-
154
- TFlags& operator^=(Enum flags) {
155
- *this = *this ^ flags;
156
- return *this;
157
- }
158
-
159
- constexpr TFlags operator~() const {
160
- return TFlags(TFlag(~Value_));
161
- }
162
-
163
- constexpr bool operator!() const {
164
- return !Value_;
165
- }
166
-
167
- constexpr explicit operator bool() const {
168
- return Value_;
169
- }
170
-
171
- constexpr bool HasFlags(TFlags flags) const {
172
- return (Value_ & flags.Value_) == flags.Value_;
173
- }
174
-
175
- TFlags RemoveFlags(TFlags flags) {
176
- Value_ &= ~flags.Value_;
177
- return *this;
178
- }
179
-
180
- friend IOutputStream& operator<<(IOutputStream& stream, const TFlags& flags) {
181
- ::NPrivate::PrintFlags(stream, static_cast<ui64>(flags.Value_), sizeof(TInt));
182
- return stream;
183
- }
184
-
185
- private:
186
- struct TFlag {
187
- constexpr TFlag() {
188
- }
189
- constexpr explicit TFlag(TInt value)
190
- : Value(value)
191
- {
192
- }
193
-
194
- TInt Value = 0;
195
- };
196
-
197
- constexpr explicit TFlags(TFlag value)
198
- : Value_(value.Value)
199
- {
200
- }
201
-
202
- private:
203
- TInt Value_;
204
- };
205
-
206
- template <class T>
207
- struct TPodTraits<TFlags<T>> {
208
- enum {
209
- IsPod = TTypeTraits<T>::IsPod
210
- };
211
- };
212
-
213
- template <class Enum>
214
- struct THash<TFlags<Enum>> {
215
- size_t operator()(const TFlags<Enum>& flags) const noexcept {
216
- return THash<typename TFlags<Enum>::TInt>()(flags);
217
- }
218
- };
219
-
220
- /**
221
- * This macro defines a flags type for the provided enum.
222
- *
223
- * @param FLAGS Name of the flags type to declare.
224
- * @param ENUM Name of the base enum type to use.
225
- */
226
- #define Y_DECLARE_FLAGS(FLAGS, ENUM) \
227
- using FLAGS = TFlags<ENUM>;
228
-
229
- /**
230
- * This macro declares global operator functions for enum base of `FLAGS` type.
231
- * This way operations on individual enum values will provide a type-safe
232
- * `TFlags` object.
233
- *
234
- * @param FLAGS Flags type to declare operator for.
235
- */
236
- #define Y_DECLARE_OPERATORS_FOR_FLAGS(FLAGS) \
237
- Y_DECLARE_UNUSED \
238
- constexpr inline FLAGS operator|(FLAGS::TEnum l, FLAGS::TEnum r) { \
239
- return FLAGS(l) | r; \
240
- } \
241
- Y_DECLARE_UNUSED \
242
- constexpr inline FLAGS operator~(FLAGS::TEnum value) { \
243
- return ~FLAGS(value); \
244
- }
@@ -1,103 +0,0 @@
1
- #pragma once
2
-
3
- #include "typetraits.h"
4
- #include "typelist.h"
5
-
6
- #include <functional>
7
-
8
- namespace NPrivate {
9
- template <class F>
10
- struct TRemoveClassImpl {
11
- using TSignature = F;
12
- };
13
-
14
- template <typename C, typename R, typename... Args>
15
- struct TRemoveClassImpl<R (C::*)(Args...)> {
16
- typedef R TSignature(Args...);
17
- };
18
-
19
- template <typename C, typename R, typename... Args>
20
- struct TRemoveClassImpl<R (C::*)(Args...) const> {
21
- typedef R TSignature(Args...);
22
- };
23
-
24
- template <class T>
25
- struct TRemoveNoExceptImpl {
26
- using Type = T;
27
- };
28
-
29
- template <typename R, typename... Args>
30
- struct TRemoveNoExceptImpl<R(Args...) noexcept> {
31
- using Type = R(Args...);
32
- };
33
-
34
- template <typename R, typename C, typename... Args>
35
- struct TRemoveNoExceptImpl<R (C::*)(Args...) noexcept> {
36
- using Type = R (C::*)(Args...);
37
- };
38
-
39
- template <class T>
40
- using TRemoveNoExcept = typename TRemoveNoExceptImpl<T>::Type;
41
-
42
- template <class F>
43
- using TRemoveClass = typename TRemoveClassImpl<TRemoveNoExcept<F>>::TSignature;
44
-
45
- template <class C>
46
- struct TFuncInfo {
47
- using TSignature = TRemoveClass<decltype(&C::operator())>;
48
- };
49
-
50
- template <class R, typename... Args>
51
- struct TFuncInfo<R(Args...)> {
52
- using TResult = R;
53
- typedef R TSignature(Args...);
54
- };
55
- }
56
-
57
- template <class C>
58
- using TFunctionSignature = typename ::NPrivate::TFuncInfo< ::NPrivate::TRemoveClass<std::remove_reference_t<std::remove_pointer_t<C>>>>::TSignature;
59
-
60
- template <typename F>
61
- struct TCallableTraits: public TCallableTraits<TFunctionSignature<F>> {
62
- };
63
-
64
- template <typename R, typename... Args>
65
- struct TCallableTraits<R(Args...)> {
66
- using TResult = R;
67
- using TArgs = TTypeList<Args...>;
68
- typedef R TSignature(Args...);
69
- };
70
-
71
- template <typename C>
72
- using TFunctionResult = typename TCallableTraits<C>::TResult;
73
-
74
- template <typename C>
75
- using TFunctionArgs = typename TCallableTraits<C>::TArgs;
76
-
77
- template <typename C, size_t N>
78
- struct TFunctionArgImpl {
79
- using TArgs = TFunctionArgs<C>;
80
- using TResult = typename TArgs::template TGet<N>;
81
- };
82
-
83
- template <typename C, size_t N>
84
- using TFunctionArg = typename TFunctionArgImpl<C, N>::TResult;
85
-
86
- // temporary before std::apply appearance
87
-
88
- template <typename F, typename Tuple, size_t... I>
89
- auto ApplyImpl(F&& f, Tuple&& t, std::index_sequence<I...>) {
90
- return f(std::get<I>(std::forward<Tuple>(t))...);
91
- }
92
-
93
- // change to std::apply after c++ 17
94
- template <typename F, typename Tuple>
95
- auto Apply(F&& f, Tuple&& t) {
96
- return ApplyImpl(f, t, std::make_index_sequence<std::tuple_size<std::decay_t<Tuple>>::value>{});
97
- }
98
-
99
- // change to std::apply after c++ 17
100
- template <typename F>
101
- auto Apply(F&& f, std::tuple<>) {
102
- return f();
103
- }