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/ysafeptr.h
DELETED
|
@@ -1,427 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <stddef.h>
|
|
4
|
-
#include <util/system/yassert.h>
|
|
5
|
-
#include <util/system/defaults.h>
|
|
6
|
-
#include <util/system/tls.h>
|
|
7
|
-
|
|
8
|
-
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
9
|
-
// There are different templates of pointers:
|
|
10
|
-
// 1. Simple pointers.
|
|
11
|
-
// 2. TPtr with refereces.
|
|
12
|
-
// 3. TObj/TMObj with ownership. After destruction of a TObj the object it referenced to is
|
|
13
|
-
// cleaned up and marked as non valid. Similarly does TMobj organizing the parallel ownership
|
|
14
|
-
// of an object.
|
|
15
|
-
//
|
|
16
|
-
// Limitations:
|
|
17
|
-
// 1. It may be necessary to use BASIC_REGISTER_CLASS() in .cpp files to be able to use a
|
|
18
|
-
// pointer to a forward declared class.
|
|
19
|
-
// 2. It's prohibited to override the 'new' operator, since the standard 'delete' will be used
|
|
20
|
-
// for destruction of objects (because of 'delete this').
|
|
21
|
-
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
22
|
-
|
|
23
|
-
#if defined(_MSC_VER) && defined(_DEBUG)
|
|
24
|
-
#include <util/system/winint.h>
|
|
25
|
-
#define CHECK_YPTR2
|
|
26
|
-
#endif
|
|
27
|
-
|
|
28
|
-
struct IBinSaver;
|
|
29
|
-
|
|
30
|
-
class IObjectBase {
|
|
31
|
-
private:
|
|
32
|
-
#ifdef CHECK_YPTR2
|
|
33
|
-
static Y_POD_THREAD(bool) DisableThreadCheck;
|
|
34
|
-
void CheckThreadId() {
|
|
35
|
-
if (dwThreadId == 0)
|
|
36
|
-
dwThreadId = GetCurrentThreadId();
|
|
37
|
-
else
|
|
38
|
-
Y_ASSERT(dwThreadId == GetCurrentThreadId() || DisableThreadCheck);
|
|
39
|
-
}
|
|
40
|
-
void AddRef() {
|
|
41
|
-
CheckThreadId();
|
|
42
|
-
++RefData;
|
|
43
|
-
}
|
|
44
|
-
void AddObj(int nRef) {
|
|
45
|
-
CheckThreadId();
|
|
46
|
-
ObjData += nRef;
|
|
47
|
-
}
|
|
48
|
-
#else
|
|
49
|
-
void CheckThreadId() {
|
|
50
|
-
}
|
|
51
|
-
void AddRef() {
|
|
52
|
-
++RefData;
|
|
53
|
-
}
|
|
54
|
-
void AddObj(int nRef) {
|
|
55
|
-
ObjData += nRef;
|
|
56
|
-
}
|
|
57
|
-
#endif
|
|
58
|
-
void ReleaseRefComplete();
|
|
59
|
-
void ReleaseObjComplete(int nMask);
|
|
60
|
-
void DecRef() {
|
|
61
|
-
CheckThreadId();
|
|
62
|
-
--RefData;
|
|
63
|
-
}
|
|
64
|
-
void DecObj(int nRef) {
|
|
65
|
-
CheckThreadId();
|
|
66
|
-
ObjData -= nRef;
|
|
67
|
-
}
|
|
68
|
-
void ReleaseRef() {
|
|
69
|
-
CheckThreadId();
|
|
70
|
-
--RefData;
|
|
71
|
-
if (RefData == 0)
|
|
72
|
-
ReleaseRefComplete();
|
|
73
|
-
}
|
|
74
|
-
void ReleaseObj(int nRef, int nMask) {
|
|
75
|
-
CheckThreadId();
|
|
76
|
-
ObjData -= nRef;
|
|
77
|
-
if ((ObjData & nMask) == 0)
|
|
78
|
-
ReleaseObjComplete(nMask);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
protected:
|
|
82
|
-
#ifdef CHECK_YPTR2
|
|
83
|
-
DWORD dwThreadId;
|
|
84
|
-
#endif
|
|
85
|
-
ui32 ObjData;
|
|
86
|
-
ui32 RefData;
|
|
87
|
-
// function should clear contents of object, easy to implement via consequent calls to
|
|
88
|
-
// destructor and constructor, this function should not be called directly, use Clear()
|
|
89
|
-
virtual void DestroyContents() = 0;
|
|
90
|
-
virtual ~IObjectBase() = default;
|
|
91
|
-
inline void CopyValidFlag(const IObjectBase& a) {
|
|
92
|
-
ObjData &= 0x7fffffff;
|
|
93
|
-
ObjData |= a.ObjData & 0x80000000;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
public:
|
|
97
|
-
IObjectBase()
|
|
98
|
-
: ObjData(0)
|
|
99
|
-
, RefData(0)
|
|
100
|
-
{
|
|
101
|
-
#ifdef CHECK_YPTR2
|
|
102
|
-
dwThreadId = 0;
|
|
103
|
-
#endif
|
|
104
|
-
}
|
|
105
|
-
// do not copy refcount when copy object
|
|
106
|
-
IObjectBase(const IObjectBase& a)
|
|
107
|
-
: ObjData(0)
|
|
108
|
-
, RefData(0)
|
|
109
|
-
{
|
|
110
|
-
#ifdef CHECK_YPTR2
|
|
111
|
-
dwThreadId = 0;
|
|
112
|
-
#endif
|
|
113
|
-
CopyValidFlag(a);
|
|
114
|
-
}
|
|
115
|
-
IObjectBase& operator=(const IObjectBase& a) {
|
|
116
|
-
CopyValidFlag(a);
|
|
117
|
-
return *this;
|
|
118
|
-
}
|
|
119
|
-
#ifdef CHECK_YPTR2
|
|
120
|
-
static void SetThreadCheckMode(bool val) {
|
|
121
|
-
DisableThreadCheck = !val;
|
|
122
|
-
}
|
|
123
|
-
void ResetThreadId() {
|
|
124
|
-
Y_ASSERT(RefData == 0 && ObjData == 0); // can reset thread check only for ref free objects
|
|
125
|
-
dwThreadId = 0;
|
|
126
|
-
}
|
|
127
|
-
#else
|
|
128
|
-
static void SetThreadCheckMode(bool) {
|
|
129
|
-
}
|
|
130
|
-
void ResetThreadId() {
|
|
131
|
-
}
|
|
132
|
-
#endif
|
|
133
|
-
|
|
134
|
-
// class name of derived class
|
|
135
|
-
virtual const char* GetClassName() const = 0;
|
|
136
|
-
|
|
137
|
-
ui32 IsRefInvalid() const {
|
|
138
|
-
return (ObjData & 0x80000000);
|
|
139
|
-
}
|
|
140
|
-
ui32 IsRefValid() const {
|
|
141
|
-
return !IsRefInvalid();
|
|
142
|
-
}
|
|
143
|
-
// reset data in class to default values, saves RefCount from destruction
|
|
144
|
-
void Clear() {
|
|
145
|
-
AddRef();
|
|
146
|
-
DestroyContents();
|
|
147
|
-
DecRef();
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
virtual int operator&(IBinSaver&) {
|
|
151
|
-
return 0;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
struct TRefO {
|
|
155
|
-
void AddRef(IObjectBase* pObj) {
|
|
156
|
-
pObj->AddObj(1);
|
|
157
|
-
}
|
|
158
|
-
void DecRef(IObjectBase* pObj) {
|
|
159
|
-
pObj->DecObj(1);
|
|
160
|
-
}
|
|
161
|
-
void Release(IObjectBase* pObj) {
|
|
162
|
-
pObj->ReleaseObj(1, 0x000fffff);
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
struct TRefM {
|
|
166
|
-
void AddRef(IObjectBase* pObj) {
|
|
167
|
-
pObj->AddObj(0x100000);
|
|
168
|
-
}
|
|
169
|
-
void DecRef(IObjectBase* pObj) {
|
|
170
|
-
pObj->DecObj(0x100000);
|
|
171
|
-
}
|
|
172
|
-
void Release(IObjectBase* pObj) {
|
|
173
|
-
pObj->ReleaseObj(0x100000, 0x3ff00000);
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
struct TRef {
|
|
177
|
-
void AddRef(IObjectBase* pObj) {
|
|
178
|
-
pObj->AddRef();
|
|
179
|
-
}
|
|
180
|
-
void DecRef(IObjectBase* pObj) {
|
|
181
|
-
pObj->DecRef();
|
|
182
|
-
}
|
|
183
|
-
void Release(IObjectBase* pObj) {
|
|
184
|
-
pObj->ReleaseRef();
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
friend struct IObjectBase::TRef;
|
|
188
|
-
friend struct IObjectBase::TRefO;
|
|
189
|
-
friend struct IObjectBase::TRefM;
|
|
190
|
-
};
|
|
191
|
-
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
192
|
-
// macro that helps to create neccessary members for proper operation of refcount system
|
|
193
|
-
// if class needs special destructor, use CFundament
|
|
194
|
-
#define OBJECT_METHODS(classname) \
|
|
195
|
-
public: \
|
|
196
|
-
virtual const char* GetClassName() const override { \
|
|
197
|
-
return #classname; \
|
|
198
|
-
} \
|
|
199
|
-
static IObjectBase* NewSaveLoadNullItem() { \
|
|
200
|
-
return new classname(); \
|
|
201
|
-
} \
|
|
202
|
-
\
|
|
203
|
-
protected: \
|
|
204
|
-
virtual void DestroyContents() override { \
|
|
205
|
-
this->~classname(); \
|
|
206
|
-
int nHoldRefs = this->RefData, nHoldObjs = this->ObjData; \
|
|
207
|
-
new (this) classname(); \
|
|
208
|
-
this->RefData += nHoldRefs; \
|
|
209
|
-
this->ObjData += nHoldObjs; \
|
|
210
|
-
} \
|
|
211
|
-
\
|
|
212
|
-
private:
|
|
213
|
-
#define OBJECT_NOCOPY_METHODS(classname) OBJECT_METHODS(classname)
|
|
214
|
-
#define BASIC_REGISTER_CLASS(classname) \
|
|
215
|
-
Y_PRAGMA_DIAGNOSTIC_PUSH \
|
|
216
|
-
Y_PRAGMA_NO_UNUSED_FUNCTION \
|
|
217
|
-
template <> \
|
|
218
|
-
IObjectBase* CastToObjectBaseImpl<classname>(classname * p, void*) { \
|
|
219
|
-
return p; \
|
|
220
|
-
} \
|
|
221
|
-
template <> \
|
|
222
|
-
classname* CastToUserObjectImpl<classname>(IObjectBase * p, classname*, void*) { \
|
|
223
|
-
return dynamic_cast<classname*>(p); \
|
|
224
|
-
} \
|
|
225
|
-
Y_PRAGMA_DIAGNOSTIC_POP
|
|
226
|
-
|
|
227
|
-
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
228
|
-
template <class TUserObj>
|
|
229
|
-
IObjectBase* CastToObjectBaseImpl(TUserObj* p, void*);
|
|
230
|
-
template <class TUserObj>
|
|
231
|
-
IObjectBase* CastToObjectBaseImpl(TUserObj* p, IObjectBase*) {
|
|
232
|
-
return p;
|
|
233
|
-
}
|
|
234
|
-
template <class TUserObj>
|
|
235
|
-
TUserObj* CastToUserObjectImpl(IObjectBase* p, TUserObj*, void*);
|
|
236
|
-
template <class TUserObj>
|
|
237
|
-
TUserObj* CastToUserObjectImpl(IObjectBase* _p, TUserObj*, IObjectBase*) {
|
|
238
|
-
return dynamic_cast<TUserObj*>(_p);
|
|
239
|
-
}
|
|
240
|
-
template <class TUserObj>
|
|
241
|
-
inline IObjectBase* CastToObjectBase(TUserObj* p) {
|
|
242
|
-
return CastToObjectBaseImpl(p, p);
|
|
243
|
-
}
|
|
244
|
-
template <class TUserObj>
|
|
245
|
-
inline const IObjectBase* CastToObjectBase(const TUserObj* p) {
|
|
246
|
-
return p;
|
|
247
|
-
}
|
|
248
|
-
template <class TUserObj>
|
|
249
|
-
inline TUserObj* CastToUserObject(IObjectBase* p, TUserObj* pu) {
|
|
250
|
-
return CastToUserObjectImpl(p, pu, pu);
|
|
251
|
-
}
|
|
252
|
-
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
253
|
-
// TObject - base object for reference counting, TUserObj - user object name
|
|
254
|
-
// TRef - struct with AddRef/DecRef/Release methods for refcounting to use
|
|
255
|
-
template <class TUserObj, class TRef>
|
|
256
|
-
class TPtrBase {
|
|
257
|
-
private:
|
|
258
|
-
TUserObj* ptr;
|
|
259
|
-
|
|
260
|
-
void AddRef(TUserObj* _ptr) {
|
|
261
|
-
TRef p;
|
|
262
|
-
if (_ptr)
|
|
263
|
-
p.AddRef(CastToObjectBase(_ptr));
|
|
264
|
-
}
|
|
265
|
-
void DecRef(TUserObj* _ptr) {
|
|
266
|
-
TRef p;
|
|
267
|
-
if (_ptr)
|
|
268
|
-
p.DecRef(CastToObjectBase(_ptr));
|
|
269
|
-
}
|
|
270
|
-
void Release(TUserObj* _ptr) {
|
|
271
|
-
TRef p;
|
|
272
|
-
if (_ptr)
|
|
273
|
-
p.Release(CastToObjectBase(_ptr));
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
protected:
|
|
277
|
-
void SetObject(TUserObj* _ptr) {
|
|
278
|
-
TUserObj* pOld = ptr;
|
|
279
|
-
ptr = _ptr;
|
|
280
|
-
AddRef(ptr);
|
|
281
|
-
Release(pOld);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
public:
|
|
285
|
-
TPtrBase()
|
|
286
|
-
: ptr(nullptr)
|
|
287
|
-
{
|
|
288
|
-
}
|
|
289
|
-
TPtrBase(TUserObj* _ptr)
|
|
290
|
-
: ptr(_ptr)
|
|
291
|
-
{
|
|
292
|
-
AddRef(ptr);
|
|
293
|
-
}
|
|
294
|
-
TPtrBase(const TPtrBase& a)
|
|
295
|
-
: ptr(a.ptr)
|
|
296
|
-
{
|
|
297
|
-
AddRef(ptr);
|
|
298
|
-
}
|
|
299
|
-
~TPtrBase() {
|
|
300
|
-
Release(ptr);
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
void Set(TUserObj* _ptr) {
|
|
304
|
-
SetObject(_ptr);
|
|
305
|
-
}
|
|
306
|
-
TUserObj* Extract() {
|
|
307
|
-
TUserObj* pRes = ptr;
|
|
308
|
-
DecRef(ptr);
|
|
309
|
-
ptr = nullptr;
|
|
310
|
-
return pRes;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
const char* GetClassName() const {
|
|
314
|
-
return ptr->GetClassName();
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// assignment operators
|
|
318
|
-
TPtrBase& operator=(TUserObj* _ptr) {
|
|
319
|
-
Set(_ptr);
|
|
320
|
-
return *this;
|
|
321
|
-
}
|
|
322
|
-
TPtrBase& operator=(const TPtrBase& a) {
|
|
323
|
-
Set(a.ptr);
|
|
324
|
-
return *this;
|
|
325
|
-
}
|
|
326
|
-
// access
|
|
327
|
-
TUserObj* operator->() const {
|
|
328
|
-
return ptr;
|
|
329
|
-
}
|
|
330
|
-
operator TUserObj*() const {
|
|
331
|
-
return ptr;
|
|
332
|
-
}
|
|
333
|
-
TUserObj* Get() const {
|
|
334
|
-
return ptr;
|
|
335
|
-
}
|
|
336
|
-
IObjectBase* GetBarePtr() const {
|
|
337
|
-
return CastToObjectBase(ptr);
|
|
338
|
-
}
|
|
339
|
-
int operator&(IBinSaver& f);
|
|
340
|
-
};
|
|
341
|
-
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
342
|
-
template <class T>
|
|
343
|
-
inline bool IsValid(T* p) {
|
|
344
|
-
return p != nullptr && !CastToObjectBase(p)->IsRefInvalid();
|
|
345
|
-
}
|
|
346
|
-
template <class T, class TRef>
|
|
347
|
-
inline bool IsValid(const TPtrBase<T, TRef>& p) {
|
|
348
|
-
return p.Get() && !p.GetBarePtr()->IsRefInvalid();
|
|
349
|
-
}
|
|
350
|
-
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
351
|
-
#define BASIC_PTR_DECLARE(TPtrName, TRef) \
|
|
352
|
-
template <class T> \
|
|
353
|
-
class TPtrName: public TPtrBase<T, TRef> { \
|
|
354
|
-
using CBase = TPtrBase<T, TRef>; \
|
|
355
|
-
\
|
|
356
|
-
public: \
|
|
357
|
-
using CDestType = T; \
|
|
358
|
-
TPtrName() { \
|
|
359
|
-
} \
|
|
360
|
-
TPtrName(T* _ptr) \
|
|
361
|
-
: CBase(_ptr) { \
|
|
362
|
-
} \
|
|
363
|
-
TPtrName(const TPtrName& a) \
|
|
364
|
-
: CBase(a) { \
|
|
365
|
-
} \
|
|
366
|
-
TPtrName& operator=(T* _ptr) { \
|
|
367
|
-
this->Set(_ptr); \
|
|
368
|
-
return *this; \
|
|
369
|
-
} \
|
|
370
|
-
TPtrName& operator=(const TPtrName& a) { \
|
|
371
|
-
this->SetObject(a.Get()); \
|
|
372
|
-
return *this; \
|
|
373
|
-
} \
|
|
374
|
-
int operator&(IBinSaver& f) { \
|
|
375
|
-
return (*(CBase*)this) & (f); \
|
|
376
|
-
} \
|
|
377
|
-
};
|
|
378
|
-
|
|
379
|
-
BASIC_PTR_DECLARE(TPtr, IObjectBase::TRef)
|
|
380
|
-
BASIC_PTR_DECLARE(TObj, IObjectBase::TRefO)
|
|
381
|
-
BASIC_PTR_DECLARE(TMObj, IObjectBase::TRefM)
|
|
382
|
-
// misuse guard
|
|
383
|
-
template <class T>
|
|
384
|
-
inline bool IsValid(TObj<T>* p) {
|
|
385
|
-
return p->YouHaveMadeMistake();
|
|
386
|
-
}
|
|
387
|
-
template <class T>
|
|
388
|
-
inline bool IsValid(TPtr<T>* p) {
|
|
389
|
-
return p->YouHaveMadeMistake();
|
|
390
|
-
}
|
|
391
|
-
template <class T>
|
|
392
|
-
inline bool IsValid(TMObj<T>* p) {
|
|
393
|
-
return p->YouHaveMadeMistake();
|
|
394
|
-
}
|
|
395
|
-
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
396
|
-
// assumes base class is IObjectBase
|
|
397
|
-
template <class T>
|
|
398
|
-
class TDynamicCast {
|
|
399
|
-
T* ptr;
|
|
400
|
-
|
|
401
|
-
public:
|
|
402
|
-
template <class TT>
|
|
403
|
-
TDynamicCast(TT* _ptr) {
|
|
404
|
-
ptr = dynamic_cast<T*>(CastToObjectBase(_ptr));
|
|
405
|
-
}
|
|
406
|
-
template <class TT>
|
|
407
|
-
TDynamicCast(const TT* _ptr) {
|
|
408
|
-
ptr = dynamic_cast<T*>(CastToObjectBase(const_cast<TT*>(_ptr)));
|
|
409
|
-
}
|
|
410
|
-
template <class T1, class T2>
|
|
411
|
-
TDynamicCast(const TPtrBase<T1, T2>& _ptr) {
|
|
412
|
-
ptr = dynamic_cast<T*>(_ptr.GetBarePtr());
|
|
413
|
-
}
|
|
414
|
-
operator T*() const {
|
|
415
|
-
return ptr;
|
|
416
|
-
}
|
|
417
|
-
T* operator->() const {
|
|
418
|
-
return ptr;
|
|
419
|
-
}
|
|
420
|
-
T* Get() const {
|
|
421
|
-
return ptr;
|
|
422
|
-
}
|
|
423
|
-
};
|
|
424
|
-
template <class T>
|
|
425
|
-
inline bool IsValid(const TDynamicCast<T>& p) {
|
|
426
|
-
return IsValid(p.Get());
|
|
427
|
-
}
|