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