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,57 +0,0 @@
1
- #pragma once
2
-
3
- #include "fwd.h"
4
- #include "deque.h"
5
- #include "vector.h"
6
- #include "utility.h"
7
-
8
- #include <util/str_stl.h>
9
-
10
- #include <queue>
11
-
12
- template <class T, class S>
13
- class TQueue: public std::queue<T, S> {
14
- using TBase = std::queue<T, S>;
15
-
16
- public:
17
- using TBase::TBase;
18
-
19
- inline explicit operator bool() const noexcept {
20
- return !this->empty();
21
- }
22
-
23
- inline void clear() {
24
- this->c.clear();
25
- }
26
-
27
- inline S& Container() {
28
- return this->c;
29
- }
30
-
31
- inline const S& Container() const {
32
- return this->c;
33
- }
34
- };
35
-
36
- template <class T, class S, class C>
37
- class TPriorityQueue: public std::priority_queue<T, S, C> {
38
- using TBase = std::priority_queue<T, S, C>;
39
- public:
40
- using TBase::TBase;
41
-
42
- inline explicit operator bool() const noexcept {
43
- return !this->empty();
44
- }
45
-
46
- inline void clear() {
47
- this->c.clear();
48
- }
49
-
50
- inline S& Container() {
51
- return this->c;
52
- }
53
-
54
- inline const S& Container() const {
55
- return this->c;
56
- }
57
- };
@@ -1,162 +0,0 @@
1
- #pragma once
2
-
3
- #include <util/system/guard.h>
4
- #include <util/system/atomic.h>
5
- #include <util/system/defaults.h>
6
- #include <util/system/yassert.h>
7
-
8
- template <class TCounterCheckPolicy>
9
- class TSimpleCounterTemplate: public TCounterCheckPolicy {
10
- using TCounterCheckPolicy::Check;
11
-
12
- public:
13
- inline TSimpleCounterTemplate(long initial = 0) noexcept
14
- : Counter_(initial)
15
- {
16
- }
17
-
18
- inline ~TSimpleCounterTemplate() {
19
- Check();
20
- }
21
-
22
- inline TAtomicBase Add(TAtomicBase d) noexcept {
23
- Check();
24
- return Counter_ += d;
25
- }
26
-
27
- inline TAtomicBase Inc() noexcept {
28
- return Add(1);
29
- }
30
-
31
- inline TAtomicBase Sub(TAtomicBase d) noexcept {
32
- Check();
33
- return Counter_ -= d;
34
- }
35
-
36
- inline TAtomicBase Dec() noexcept {
37
- return Sub(1);
38
- }
39
-
40
- inline bool TryWeakInc() noexcept {
41
- if (!Counter_) {
42
- return false;
43
- }
44
-
45
- Inc();
46
- Y_ASSERT(Counter_ != 0);
47
-
48
- return true;
49
- }
50
-
51
- inline TAtomicBase Val() const noexcept {
52
- return Counter_;
53
- }
54
-
55
- private:
56
- TAtomicBase Counter_;
57
- };
58
-
59
- class TNoCheckPolicy {
60
- protected:
61
- inline void Check() const {
62
- }
63
- };
64
-
65
- #if defined(SIMPLE_COUNTER_THREAD_CHECK)
66
-
67
- #include <util/system/thread.i>
68
-
69
- class TCheckPolicy {
70
- public:
71
- inline TCheckPolicy() {
72
- ThreadId = SystemCurrentThreadId();
73
- }
74
-
75
- protected:
76
- inline void Check() const {
77
- Y_VERIFY(ThreadId == SystemCurrentThreadId(), "incorrect usage of TSimpleCounter");
78
- }
79
-
80
- private:
81
- size_t ThreadId;
82
- };
83
- #else
84
- using TCheckPolicy = TNoCheckPolicy;
85
- #endif
86
-
87
- // Use this one if access from multiple threads to your pointer is an error and you want to enforce thread checks
88
- using TSimpleCounter = TSimpleCounterTemplate<TCheckPolicy>;
89
- // Use this one if you do want to share the pointer between threads, omit thread checks and do the synchronization yourself
90
- using TExplicitSimpleCounter = TSimpleCounterTemplate<TNoCheckPolicy>;
91
-
92
- template <class TCounterCheckPolicy>
93
- struct TCommonLockOps<TSimpleCounterTemplate<TCounterCheckPolicy>> {
94
- static inline void Acquire(TSimpleCounterTemplate<TCounterCheckPolicy>* t) noexcept {
95
- t->Inc();
96
- }
97
-
98
- static inline void Release(TSimpleCounterTemplate<TCounterCheckPolicy>* t) noexcept {
99
- t->Dec();
100
- }
101
- };
102
-
103
- class TAtomicCounter {
104
- public:
105
- inline TAtomicCounter(long initial = 0) noexcept
106
- : Counter_(initial)
107
- {
108
- }
109
-
110
- inline ~TAtomicCounter() = default;
111
-
112
- inline TAtomicBase Add(TAtomicBase d) noexcept {
113
- return AtomicAdd(Counter_, d);
114
- }
115
-
116
- inline TAtomicBase Inc() noexcept {
117
- return Add(1);
118
- }
119
-
120
- inline TAtomicBase Sub(TAtomicBase d) noexcept {
121
- return AtomicSub(Counter_, d);
122
- }
123
-
124
- inline TAtomicBase Dec() noexcept {
125
- return Sub(1);
126
- }
127
-
128
- inline TAtomicBase Val() const noexcept {
129
- return AtomicGet(Counter_);
130
- }
131
-
132
- inline bool TryWeakInc() noexcept {
133
- while (true) {
134
- intptr_t curValue = Counter_;
135
-
136
- if (!curValue) {
137
- return false;
138
- }
139
-
140
- intptr_t newValue = curValue + 1;
141
- Y_ASSERT(newValue != 0);
142
-
143
- if (AtomicCas(&Counter_, newValue, curValue)) {
144
- return true;
145
- }
146
- }
147
- }
148
-
149
- private:
150
- TAtomic Counter_;
151
- };
152
-
153
- template <>
154
- struct TCommonLockOps<TAtomicCounter> {
155
- static inline void Acquire(TAtomicCounter* t) noexcept {
156
- t->Inc();
157
- }
158
-
159
- static inline void Release(TAtomicCounter* t) noexcept {
160
- t->Dec();
161
- }
162
- };
@@ -1,11 +0,0 @@
1
- #pragma once
2
-
3
- namespace NDetail {
4
- struct TReserveTag {
5
- size_t Capacity;
6
- };
7
- }
8
-
9
- inline ::NDetail::TReserveTag Reserve(size_t capacity) {
10
- return ::NDetail::TReserveTag{capacity};
11
- }
@@ -1,65 +0,0 @@
1
- #pragma once
2
-
3
- #include <util/system/compiler.h>
4
- #include <util/system/defaults.h>
5
-
6
- #include <utility>
7
-
8
- namespace NPrivate {
9
- template <typename F>
10
- class TScopeGuard {
11
- public:
12
- TScopeGuard(const F& function)
13
- : Function_{function}
14
- {
15
- }
16
-
17
- TScopeGuard(F&& function)
18
- : Function_{std::move(function)}
19
- {
20
- }
21
-
22
- TScopeGuard(TScopeGuard&&) = default;
23
- TScopeGuard(const TScopeGuard&) = default;
24
-
25
- ~TScopeGuard() {
26
- Function_();
27
- }
28
-
29
- private:
30
- F Function_;
31
- };
32
-
33
- struct TMakeGuardHelper {
34
- template <class F>
35
- TScopeGuard<F> operator | (F&& function) const {
36
- return std::forward<F>(function);
37
- }
38
- };
39
- }
40
-
41
- // \brief `Y_SCOPE_EXIT(captures) { body };`
42
- //
43
- // General implementaion of RAII idiom (resource acquisition is initialization). Executes
44
- // function upon return from the current scope.
45
- //
46
- // @note expects `body` to provide no-throw guarantee, otherwise whenever an exception
47
- // is thrown and leaves the outermost block of `body`, the function `std::terminate` is called.
48
- // @see http://drdobbs.com/184403758 for detailed motivation.
49
- #define Y_SCOPE_EXIT(...) const auto Y_GENERATE_UNIQUE_ID(scopeGuard) Y_DECLARE_UNUSED = ::NPrivate::TMakeGuardHelper{} | [__VA_ARGS__]() mutable -> void
50
-
51
- // \brief `Y_DEFER { body };`
52
- //
53
- // Same as `Y_SCOPE_EXIT` but doesn't require user to provide capture-list explicitly (it
54
- // implicitly uses `[&]` capture). Have same requirements for `body`.
55
- //
56
- // Inspired by `defer` statement in languages like Swift and Go.
57
- //
58
- // \code
59
- // auto item = s.pop();
60
- // bool ok = false;
61
- // Y_DEFER { if (!ok) { s.push(std::move(item)); } };
62
- // ... try handle `item` ...
63
- // ok = true;
64
- // \endcode
65
- #define Y_DEFER Y_SCOPE_EXIT(&)
@@ -1,406 +0,0 @@
1
- #pragma once
2
-
3
- #include <util/generic/fwd.h>
4
- #include <util/generic/vector.h>
5
- #include <util/generic/map.h>
6
-
7
- #include <cstddef>
8
- #include <type_traits>
9
-
10
- /*
11
-
12
- A file with declarations of enumeration-related functions.
13
- It doesn't contains definitions. To generate them you have to add
14
-
15
- GENERATE_ENUM_SERIALIZATION_WITH_HEADER(your_header_with_your_enum.h)
16
- or
17
- GENERATE_ENUM_SERIALIZATION(your_header_with_your_enum.h)
18
-
19
- in your ya.make
20
-
21
- @see https://st.yandex-team.ru/IGNIETFERRO-333
22
- @see https://wiki.yandex-team.ru/PoiskovajaPlatforma/Build/WritingCmakefiles/#generate-enum-with-header
23
-
24
- */
25
-
26
- /**
27
- * Returns number of distinct items in enum or enum class
28
- *
29
- * @tparam EnumT enum type
30
- */
31
- template <typename EnumT>
32
- Y_CONST_FUNCTION
33
- constexpr size_t GetEnumItemsCount();
34
-
35
- namespace NEnumSerializationRuntime {
36
- namespace NDetail {
37
- template <typename EEnum>
38
- struct TSelectEnumRepresentationType;
39
-
40
- template <typename TEnumType, typename TRepresentationType, class TStorage = TVector<TRepresentationType>>
41
- class TMappedArrayView;
42
-
43
- template <typename TEnumType, typename TRepresentationType, typename TValueType, class TStorage = TMap<TRepresentationType, TValueType>>
44
- class TMappedDictView;
45
- }
46
-
47
- /// Class with behaviour similar to TMap<EnumT, TValueType>
48
- template <typename EnumT, typename TValueType>
49
- using TMappedDictView = NDetail::TMappedDictView<EnumT, typename NDetail::TSelectEnumRepresentationType<EnumT>::TType, TValueType>;
50
-
51
- /// Class with behaviour similar to TVector<EnumT>
52
- template <typename EnumT>
53
- using TMappedArrayView = NDetail::TMappedArrayView<EnumT, typename NDetail::TSelectEnumRepresentationType<EnumT>::TType>;
54
-
55
- /**
56
- * Returns names for items in enum or enum class
57
- *
58
- * @tparam EnumT enum type
59
- */
60
- template <typename EnumT>
61
- TMappedDictView<EnumT, TString> GetEnumNamesImpl();
62
- /**
63
- * Returns unique items in enum or enum class
64
- *
65
- * @tparam EnumT enum type
66
- */
67
- template <typename EnumT>
68
- ::NEnumSerializationRuntime::TMappedArrayView<EnumT> GetEnumAllValuesImpl();
69
-
70
- /**
71
- * Returns human-readable comma-separated list of names in enum or enum class
72
- *
73
- * @tparam EnumT enum type
74
- */
75
- template <typename EnumT>
76
- const TString& GetEnumAllNamesImpl();
77
-
78
- /**
79
- * Returns C++ identifiers for items in enum or enum class
80
- *
81
- * @tparam EnumT enum type
82
- */
83
- template <typename EnumT>
84
- const TVector<TString>& GetEnumAllCppNamesImpl();
85
- }
86
-
87
- /**
88
- * Returns names for items in enum or enum class
89
- *
90
- * @tparam EnumT enum type
91
- */
92
- template <typename EnumT>
93
- Y_CONST_FUNCTION
94
- ::NEnumSerializationRuntime::TMappedDictView<EnumT, TString> GetEnumNames() {
95
- return ::NEnumSerializationRuntime::GetEnumNamesImpl<EnumT>();
96
- }
97
-
98
- /**
99
- * Returns unique items in enum or enum class
100
- *
101
- * @tparam EnumT enum type
102
- */
103
- template <typename EnumT>
104
- Y_CONST_FUNCTION
105
- ::NEnumSerializationRuntime::TMappedArrayView<EnumT> GetEnumAllValues() {
106
- return ::NEnumSerializationRuntime::GetEnumAllValuesImpl<EnumT>();
107
- }
108
-
109
- /**
110
- * Returns human-readable comma-separated list of names in enum or enum class
111
- *
112
- * @tparam EnumT enum type
113
- */
114
- template <typename EnumT>
115
- Y_CONST_FUNCTION
116
- const TString& GetEnumAllNames() {
117
- return ::NEnumSerializationRuntime::GetEnumAllNamesImpl<EnumT>();
118
- }
119
-
120
- /**
121
- * Returns C++ identifiers for items in enum or enum class
122
- *
123
- * @tparam EnumT enum type
124
- */
125
- template <typename EnumT>
126
- Y_CONST_FUNCTION
127
- const TVector<TString>& GetEnumAllCppNames() {
128
- return ::NEnumSerializationRuntime::GetEnumAllCppNamesImpl<EnumT>();
129
- }
130
-
131
- namespace NEnumSerializationRuntime {
132
- namespace NDetail {
133
- /// Checks that the `From` type can be promoted up to the `To` type without losses
134
- template <typename From, typename To>
135
- struct TIsPromotable: public std::is_same<std::common_type_t<From, To>, To> {
136
- static_assert(std::is_integral<From>::value, "`From` type has to be an integer");
137
- static_assert(std::is_integral<To>::value, "`To` type has to be an integer");
138
- };
139
-
140
- /// Selects enum representation type. Works like std::underlying_type_t<>, but promotes small types up to `int`
141
- template <typename EEnum>
142
- struct TSelectEnumRepresentationType {
143
- using TUnderlyingType = std::underlying_type_t<EEnum>;
144
- using TIsSigned = std::is_signed<TUnderlyingType>;
145
- using TRepresentationType = std::conditional_t<
146
- TIsSigned::value,
147
- std::conditional_t<
148
- TIsPromotable<TUnderlyingType, int>::value,
149
- int,
150
- long long>,
151
- std::conditional_t<
152
- TIsPromotable<TUnderlyingType, unsigned>::value,
153
- unsigned,
154
- unsigned long long>>;
155
- using TType = TRepresentationType;
156
- static_assert(sizeof(TUnderlyingType) <= sizeof(TType), "size of `TType` is not smaller than the size of `TUnderlyingType`");
157
- };
158
-
159
- template <typename TEnumType, typename TRepresentationType>
160
- class TMappedViewBase {
161
- static_assert(sizeof(std::underlying_type_t<TEnumType>) <= sizeof(TRepresentationType), "Internal type is probably too small to represent all possible values");
162
-
163
- public:
164
- static constexpr TEnumType CastFromRepresentationType(const TRepresentationType key) noexcept {
165
- return static_cast<TEnumType>(key);
166
- }
167
-
168
- static constexpr TRepresentationType CastToRepresentationType(const TEnumType key) noexcept {
169
- return static_cast<TRepresentationType>(key);
170
- }
171
- };
172
-
173
- /// Wrapper class with behaviour similar to TVector<EnumT>
174
- ///
175
- /// @tparam TEnumType enum type at the external interface
176
- /// @tparam TRepresentationType designated underlying type of enum
177
- /// @tparam TStorage internal container type
178
- template <typename TEnumType, typename TRepresentationType, class TStorage>
179
- class TMappedArrayView: public TMappedViewBase<TEnumType, TRepresentationType> {
180
- public:
181
- using value_type = TEnumType;
182
-
183
- public:
184
- TMappedArrayView(const TStorage& a) noexcept
185
- : Ref(a)
186
- {
187
- }
188
-
189
- class TIterator {
190
- public:
191
- using TSlaveIteratorType = typename TStorage::const_iterator;
192
-
193
- using difference_type = std::ptrdiff_t;
194
- using value_type = TEnumType;
195
- using pointer = const TEnumType*;
196
- using reference = const TEnumType&;
197
- using iterator_category = std::bidirectional_iterator_tag;
198
-
199
- public:
200
- TIterator(TSlaveIteratorType it)
201
- : Slave(std::move(it))
202
- {
203
- }
204
-
205
- bool operator==(const TIterator& it) const {
206
- return Slave == it.Slave;
207
- }
208
-
209
- bool operator!=(const TIterator& it) const {
210
- return !(*this == it);
211
- }
212
-
213
- TEnumType operator*() const {
214
- return TMappedArrayView::CastFromRepresentationType(*Slave);
215
- }
216
-
217
- TIterator& operator++() {
218
- ++Slave;
219
- return *this;
220
- }
221
-
222
- TIterator& operator--() {
223
- --Slave;
224
- return *this;
225
- }
226
-
227
- TIterator operator++(int) {
228
- auto temp = Slave;
229
- ++Slave;
230
- return temp;
231
- }
232
-
233
- TIterator operator--(int) {
234
- auto temp = Slave;
235
- --Slave;
236
- return temp;
237
- }
238
-
239
- private:
240
- TSlaveIteratorType Slave;
241
- };
242
-
243
- TIterator begin() const {
244
- return Ref.begin();
245
- }
246
-
247
- TIterator end() const {
248
- return Ref.end();
249
- }
250
-
251
- size_t size() const {
252
- return Ref.size();
253
- }
254
-
255
- Y_PURE_FUNCTION
256
- bool empty() const {
257
- return Ref.empty();
258
- }
259
-
260
- TEnumType at(size_t index) const {
261
- return this->CastFromRepresentationType(Ref.at(index));
262
- }
263
-
264
- TEnumType operator[](size_t index) const {
265
- return this->CastFromRepresentationType(Ref[index]);
266
- }
267
-
268
- // Allocate container and copy view's content into it
269
- template <template <class...> class TContainer = TVector>
270
- TContainer<TEnumType> Materialize() const {
271
- return {begin(), end()};
272
- }
273
-
274
- private:
275
- const TStorage& Ref;
276
- };
277
-
278
- /// Wrapper class with behaviour similar to TMap<EnumT, TValueType>
279
- ///
280
- /// @tparam TEnumType enum type at the external interface
281
- /// @tparam TRepresentationType designated underlying type of enum
282
- /// @tparam TValueType mapped value
283
- /// @tparam TStorage internal container type
284
- template <typename TEnumType, typename TRepresentationType, typename TValueType, class TStorage>
285
- class TMappedDictView: public TMappedViewBase<TEnumType, TRepresentationType> {
286
- public:
287
- using TMappedItemType = std::pair<const TEnumType, const TValueType&>;
288
-
289
- class TDereferenceResultHolder {
290
- public:
291
- TDereferenceResultHolder(const TRepresentationType enumValue, const TValueType& payload) noexcept
292
- : Data(TMappedDictView::CastFromRepresentationType(enumValue), payload)
293
- {
294
- }
295
-
296
- const TMappedItemType* operator->() const noexcept {
297
- return &Data;
298
- }
299
-
300
- private:
301
- TMappedItemType Data;
302
- };
303
-
304
- TMappedDictView(const TStorage& m) noexcept
305
- : Ref(m)
306
- {
307
- }
308
-
309
- class TIterator {
310
- public:
311
- using TSlaveIteratorType = typename TStorage::const_iterator;
312
-
313
- using difference_type = std::ptrdiff_t;
314
- using value_type = TMappedItemType;
315
- using pointer = const TMappedItemType*;
316
- using reference = const TMappedItemType&;
317
- using iterator_category = std::bidirectional_iterator_tag;
318
-
319
- public:
320
- TIterator(TSlaveIteratorType it)
321
- : Slave(std::move(it))
322
- {
323
- }
324
-
325
- bool operator==(const TIterator& it) const {
326
- return Slave == it.Slave;
327
- }
328
-
329
- bool operator!=(const TIterator& it) const {
330
- return !(*this == it);
331
- }
332
-
333
- TDereferenceResultHolder operator->() const {
334
- return {Slave->first, Slave->second};
335
- }
336
-
337
- TMappedItemType operator*() const {
338
- return {TMappedDictView::CastFromRepresentationType(Slave->first), Slave->second};
339
- }
340
-
341
- TIterator& operator++() {
342
- ++Slave;
343
- return *this;
344
- }
345
-
346
- TIterator& operator--() {
347
- --Slave;
348
- return *this;
349
- }
350
-
351
- TIterator operator++(int) {
352
- auto temp = Slave;
353
- ++Slave;
354
- return temp;
355
- }
356
-
357
- TIterator operator--(int) {
358
- auto temp = Slave;
359
- --Slave;
360
- return temp;
361
- }
362
-
363
- private:
364
- TSlaveIteratorType Slave;
365
- };
366
-
367
- TIterator begin() const {
368
- return Ref.begin();
369
- }
370
-
371
- TIterator end() const {
372
- return Ref.end();
373
- }
374
-
375
- size_t size() const {
376
- return Ref.size();
377
- }
378
-
379
- Y_PURE_FUNCTION
380
- bool empty() const {
381
- return Ref.empty();
382
- }
383
-
384
- bool contains(const TEnumType key) const {
385
- return Ref.contains(this->CastToRepresentationType(key));
386
- }
387
-
388
- TIterator find(const TEnumType key) const {
389
- return Ref.find(this->CastToRepresentationType(key));
390
- }
391
-
392
- const TValueType& at(const TEnumType key) const {
393
- return Ref.at(this->CastToRepresentationType(key));
394
- }
395
-
396
- // Allocate container and copy view's content into it
397
- template <template <class...> class TContainer = TMap>
398
- TContainer<TEnumType, TValueType> Materialize() const {
399
- return {begin(), end()};
400
- }
401
-
402
- private:
403
- const TStorage& Ref;
404
- };
405
- }
406
- }