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.
- package/DEPLOYMENT.md +22 -15
- package/README.md +37 -27
- package/binding.gyp +5 -7
- package/build_scripts/bootstrap.js +2 -1
- package/build_scripts/out/build.js +46 -68
- package/build_scripts/out/build_model.js +1 -1
- package/build_scripts/out/{build_ya.js → build_native.js} +1 -1
- package/build_scripts/out/ci.js +5 -5
- package/build_scripts/out/config.js +32 -18
- package/build_scripts/out/install.js +5 -3
- package/build_scripts/out/package_prepublish.js +1 -1
- package/build_scripts/out/packaging.js +1 -19
- package/build_scripts/out/run_tests.js +1 -1
- package/build_scripts/out/test.js +8 -3
- package/config.json +18 -11
- package/inc/catboost/libs/model_interface/c_api.h +349 -3
- package/lib/catboost.d.ts +65 -21
- package/package.json +4 -4
- package/src/api_helpers.cpp +100 -24
- package/src/api_helpers.h +8 -7
- package/src/api_module.cpp +1 -2
- package/src/model.cpp +483 -83
- package/src/model.h +24 -9
- package/inc/contrib/libs/cxxsupp/system_stl/include/stlfwd +0 -14
- package/inc/util/charset/recode_result.h +0 -9
- package/inc/util/charset/unicode_table.h +0 -123
- package/inc/util/charset/unidata.h +0 -421
- package/inc/util/charset/utf8.h +0 -384
- package/inc/util/charset/wide.h +0 -843
- package/inc/util/charset/wide_specific.h +0 -22
- package/inc/util/datetime/base.h +0 -669
- package/inc/util/datetime/constants.h +0 -7
- package/inc/util/datetime/cputimer.h +0 -124
- package/inc/util/datetime/parser.h +0 -292
- package/inc/util/datetime/systime.h +0 -47
- package/inc/util/datetime/uptime.h +0 -8
- package/inc/util/digest/city.h +0 -88
- package/inc/util/digest/fnv.h +0 -73
- package/inc/util/digest/multi.h +0 -14
- package/inc/util/digest/murmur.h +0 -57
- package/inc/util/digest/numeric.h +0 -86
- package/inc/util/digest/sequence.h +0 -48
- package/inc/util/draft/date.h +0 -129
- package/inc/util/draft/datetime.h +0 -184
- package/inc/util/draft/enum.h +0 -136
- package/inc/util/draft/holder_vector.h +0 -102
- package/inc/util/draft/ip.h +0 -131
- package/inc/util/draft/matrix.h +0 -108
- package/inc/util/draft/memory.h +0 -40
- package/inc/util/folder/dirent_win.h +0 -46
- package/inc/util/folder/dirut.h +0 -121
- package/inc/util/folder/filelist.h +0 -81
- package/inc/util/folder/fts.h +0 -108
- package/inc/util/folder/iterator.h +0 -109
- package/inc/util/folder/lstat_win.h +0 -20
- package/inc/util/folder/path.h +0 -225
- package/inc/util/folder/pathsplit.h +0 -113
- package/inc/util/folder/tempdir.h +0 -42
- package/inc/util/generic/adaptor.h +0 -134
- package/inc/util/generic/algorithm.h +0 -765
- package/inc/util/generic/array_ref.h +0 -282
- package/inc/util/generic/array_size.h +0 -24
- package/inc/util/generic/benchmark/vector_count_ctor/f.h +0 -9
- package/inc/util/generic/bitmap.h +0 -1115
- package/inc/util/generic/bitops.h +0 -459
- package/inc/util/generic/bt_exception.h +0 -24
- package/inc/util/generic/buffer.h +0 -232
- package/inc/util/generic/cast.h +0 -176
- package/inc/util/generic/deque.h +0 -24
- package/inc/util/generic/explicit_type.h +0 -42
- package/inc/util/generic/fastqueue.h +0 -55
- package/inc/util/generic/flags.h +0 -244
- package/inc/util/generic/function.h +0 -103
- package/inc/util/generic/fwd.h +0 -171
- package/inc/util/generic/guid.h +0 -61
- package/inc/util/generic/hash.h +0 -2032
- package/inc/util/generic/hash_primes.h +0 -140
- package/inc/util/generic/hash_set.h +0 -490
- package/inc/util/generic/hide_ptr.h +0 -3
- package/inc/util/generic/intrlist.h +0 -876
- package/inc/util/generic/is_in.h +0 -53
- package/inc/util/generic/iterator.h +0 -137
- package/inc/util/generic/iterator_range.h +0 -105
- package/inc/util/generic/lazy_value.h +0 -66
- package/inc/util/generic/list.h +0 -22
- package/inc/util/generic/map.h +0 -44
- package/inc/util/generic/mapfindptr.h +0 -60
- package/inc/util/generic/maybe.h +0 -713
- package/inc/util/generic/maybe_traits.h +0 -164
- package/inc/util/generic/mem_copy.h +0 -55
- package/inc/util/generic/noncopyable.h +0 -38
- package/inc/util/generic/object_counter.h +0 -53
- package/inc/util/generic/ptr.h +0 -1113
- package/inc/util/generic/queue.h +0 -57
- package/inc/util/generic/refcount.h +0 -162
- package/inc/util/generic/reserve.h +0 -11
- package/inc/util/generic/scope.h +0 -65
- package/inc/util/generic/serialized_enum.h +0 -406
- package/inc/util/generic/set.h +0 -42
- package/inc/util/generic/singleton.h +0 -136
- package/inc/util/generic/size_literals.h +0 -65
- package/inc/util/generic/stack.h +0 -18
- package/inc/util/generic/store_policy.h +0 -120
- package/inc/util/generic/strbase.h +0 -612
- package/inc/util/generic/strbuf.h +0 -552
- package/inc/util/generic/strfcpy.h +0 -17
- package/inc/util/generic/string.h +0 -1572
- package/inc/util/generic/string_hash.h +0 -21
- package/inc/util/generic/string_ut.h +0 -1175
- package/inc/util/generic/type_name.h +0 -34
- package/inc/util/generic/typelist.h +0 -114
- package/inc/util/generic/typetraits.h +0 -325
- package/inc/util/generic/utility.h +0 -132
- package/inc/util/generic/va_args.h +0 -400
- package/inc/util/generic/variant.h +0 -631
- package/inc/util/generic/variant_traits.h +0 -171
- package/inc/util/generic/vector.h +0 -119
- package/inc/util/generic/xrange.h +0 -258
- package/inc/util/generic/yexception.h +0 -212
- package/inc/util/generic/yexception_ut.h +0 -14
- package/inc/util/generic/ylimits.h +0 -92
- package/inc/util/generic/ymath.h +0 -206
- package/inc/util/memory/addstorage.h +0 -93
- package/inc/util/memory/alloc.h +0 -27
- package/inc/util/memory/blob.h +0 -296
- package/inc/util/memory/mmapalloc.h +0 -8
- package/inc/util/memory/pool.h +0 -432
- package/inc/util/memory/segmented_string_pool.h +0 -194
- package/inc/util/memory/segpool_alloc.h +0 -118
- package/inc/util/memory/smallobj.h +0 -141
- package/inc/util/memory/tempbuf.h +0 -111
- package/inc/util/network/address.h +0 -136
- package/inc/util/network/endpoint.h +0 -61
- package/inc/util/network/hostip.h +0 -16
- package/inc/util/network/init.h +0 -60
- package/inc/util/network/interface.h +0 -17
- package/inc/util/network/iovec.h +0 -65
- package/inc/util/network/ip.h +0 -116
- package/inc/util/network/nonblock.h +0 -8
- package/inc/util/network/pair.h +0 -9
- package/inc/util/network/poller.h +0 -58
- package/inc/util/network/pollerimpl.h +0 -707
- package/inc/util/network/sock.h +0 -608
- package/inc/util/network/socket.h +0 -421
- package/inc/util/random/common_ops.h +0 -130
- package/inc/util/random/easy.h +0 -47
- package/inc/util/random/entropy.h +0 -21
- package/inc/util/random/fast.h +0 -101
- package/inc/util/random/init_atfork.h +0 -3
- package/inc/util/random/lcg_engine.h +0 -66
- package/inc/util/random/mersenne.h +0 -46
- package/inc/util/random/mersenne32.h +0 -50
- package/inc/util/random/mersenne64.h +0 -50
- package/inc/util/random/normal.h +0 -38
- package/inc/util/random/random.h +0 -30
- package/inc/util/random/shuffle.h +0 -39
- package/inc/util/str_stl.h +0 -266
- package/inc/util/stream/aligned.h +0 -99
- package/inc/util/stream/buffer.h +0 -119
- package/inc/util/stream/buffered.h +0 -225
- package/inc/util/stream/debug.h +0 -53
- package/inc/util/stream/direct_io.h +0 -43
- package/inc/util/stream/file.h +0 -108
- package/inc/util/stream/format.h +0 -444
- package/inc/util/stream/fwd.h +0 -100
- package/inc/util/stream/hex.h +0 -8
- package/inc/util/stream/holder.h +0 -44
- package/inc/util/stream/input.h +0 -273
- package/inc/util/stream/labeled.h +0 -19
- package/inc/util/stream/length.h +0 -100
- package/inc/util/stream/mem.h +0 -255
- package/inc/util/stream/multi.h +0 -32
- package/inc/util/stream/null.h +0 -61
- package/inc/util/stream/output.h +0 -304
- package/inc/util/stream/pipe.h +0 -112
- package/inc/util/stream/printf.h +0 -25
- package/inc/util/stream/str.h +0 -207
- package/inc/util/stream/tee.h +0 -28
- package/inc/util/stream/tempbuf.h +0 -21
- package/inc/util/stream/tokenizer.h +0 -214
- package/inc/util/stream/trace.h +0 -60
- package/inc/util/stream/walk.h +0 -35
- package/inc/util/stream/zerocopy.h +0 -91
- package/inc/util/stream/zerocopy_output.h +0 -57
- package/inc/util/stream/zlib.h +0 -173
- package/inc/util/string/ascii.h +0 -236
- package/inc/util/string/builder.h +0 -39
- package/inc/util/string/cast.h +0 -347
- package/inc/util/string/cstriter.h +0 -14
- package/inc/util/string/escape.h +0 -70
- package/inc/util/string/hex.h +0 -59
- package/inc/util/string/join.h +0 -194
- package/inc/util/string/printf.h +0 -13
- package/inc/util/string/reverse.h +0 -16
- package/inc/util/string/split.h +0 -1080
- package/inc/util/string/strip.h +0 -257
- package/inc/util/string/strspn.h +0 -65
- package/inc/util/string/subst.h +0 -56
- package/inc/util/string/type.h +0 -50
- package/inc/util/string/util.h +0 -195
- package/inc/util/string/vector.h +0 -132
- package/inc/util/system/align.h +0 -50
- package/inc/util/system/atexit.h +0 -22
- package/inc/util/system/atomic.h +0 -51
- package/inc/util/system/atomic_gcc.h +0 -90
- package/inc/util/system/atomic_ops.h +0 -189
- package/inc/util/system/atomic_win.h +0 -114
- package/inc/util/system/backtrace.h +0 -39
- package/inc/util/system/byteorder.h +0 -186
- package/inc/util/system/compat.h +0 -84
- package/inc/util/system/compiler.h +0 -620
- package/inc/util/system/condvar.h +0 -71
- package/inc/util/system/context.h +0 -181
- package/inc/util/system/context_aarch64.h +0 -8
- package/inc/util/system/context_i686.h +0 -9
- package/inc/util/system/context_x86.h +0 -12
- package/inc/util/system/context_x86_64.h +0 -7
- package/inc/util/system/cpu_id.h +0 -159
- package/inc/util/system/daemon.h +0 -28
- package/inc/util/system/datetime.h +0 -98
- package/inc/util/system/defaults.h +0 -149
- package/inc/util/system/demangle.h +0 -5
- package/inc/util/system/demangle_impl.h +0 -23
- package/inc/util/system/direct_io.h +0 -71
- package/inc/util/system/dynlib.h +0 -119
- package/inc/util/system/env.h +0 -32
- package/inc/util/system/error.h +0 -95
- package/inc/util/system/event.h +0 -122
- package/inc/util/system/execpath.h +0 -17
- package/inc/util/system/fasttime.h +0 -6
- package/inc/util/system/fhandle.h +0 -27
- package/inc/util/system/file.h +0 -210
- package/inc/util/system/file_lock.h +0 -34
- package/inc/util/system/filemap.h +0 -383
- package/inc/util/system/flock.h +0 -35
- package/inc/util/system/fs.h +0 -156
- package/inc/util/system/fs_win.h +0 -29
- package/inc/util/system/fstat.h +0 -46
- package/inc/util/system/getpid.h +0 -12
- package/inc/util/system/guard.h +0 -179
- package/inc/util/system/hi_lo.h +0 -139
- package/inc/util/system/hostname.h +0 -10
- package/inc/util/system/hp_timer.h +0 -36
- package/inc/util/system/info.h +0 -12
- package/inc/util/system/interrupt_signals.h +0 -22
- package/inc/util/system/madvise.h +0 -30
- package/inc/util/system/maxlen.h +0 -32
- package/inc/util/system/mem_info.h +0 -18
- package/inc/util/system/mincore.h +0 -38
- package/inc/util/system/mktemp.h +0 -11
- package/inc/util/system/mlock.h +0 -43
- package/inc/util/system/mutex.h +0 -67
- package/inc/util/system/nice.h +0 -3
- package/inc/util/system/pipe.h +0 -90
- package/inc/util/system/platform.h +0 -246
- package/inc/util/system/progname.h +0 -13
- package/inc/util/system/protect.h +0 -25
- package/inc/util/system/rusage.h +0 -26
- package/inc/util/system/rwlock.h +0 -78
- package/inc/util/system/sanitizers.h +0 -122
- package/inc/util/system/sem.h +0 -41
- package/inc/util/system/shellcommand.h +0 -472
- package/inc/util/system/shmat.h +0 -32
- package/inc/util/system/sigset.h +0 -78
- package/inc/util/system/spin_wait.h +0 -10
- package/inc/util/system/spinlock.h +0 -121
- package/inc/util/system/src_location.h +0 -25
- package/inc/util/system/src_root.h +0 -68
- package/inc/util/system/sys_alloc.h +0 -43
- package/inc/util/system/sysstat.h +0 -52
- package/inc/util/system/tempfile.h +0 -34
- package/inc/util/system/thread.h +0 -167
- package/inc/util/system/tls.h +0 -307
- package/inc/util/system/types.h +0 -119
- package/inc/util/system/unaligned_mem.h +0 -67
- package/inc/util/system/user.h +0 -5
- package/inc/util/system/utime.h +0 -6
- package/inc/util/system/valgrind.h +0 -48
- package/inc/util/system/winint.h +0 -43
- package/inc/util/system/yassert.h +0 -121
- package/inc/util/system/yield.h +0 -4
- package/inc/util/thread/factory.h +0 -65
- package/inc/util/thread/fwd.h +0 -30
- package/inc/util/thread/lfqueue.h +0 -406
- package/inc/util/thread/lfstack.h +0 -188
- package/inc/util/thread/pool.h +0 -388
- package/inc/util/thread/singleton.h +0 -42
- package/inc/util/ysafeptr.h +0 -427
- package/inc/util/ysaveload.h +0 -700
package/inc/util/generic/cast.h
DELETED
|
@@ -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
|
-
}
|
package/inc/util/generic/deque.h
DELETED
|
@@ -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
|
-
};
|
package/inc/util/generic/flags.h
DELETED
|
@@ -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
|
-
}
|