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,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
- }