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/src/model.h
CHANGED
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
// N-API (node-addon-api)
|
|
4
4
|
#include <napi.h>
|
|
5
5
|
// Catboost C API
|
|
6
|
-
#include <c_api.h>
|
|
6
|
+
#include <catboost/libs/model_interface/c_api.h>
|
|
7
7
|
|
|
8
|
-
#include <util/generic/vector.h>
|
|
9
8
|
|
|
10
9
|
namespace NNodeCatBoost {
|
|
11
10
|
|
|
@@ -19,7 +18,10 @@ public:
|
|
|
19
18
|
|
|
20
19
|
void LoadFullFromFile(const Napi::CallbackInfo& info);
|
|
21
20
|
|
|
22
|
-
//
|
|
21
|
+
// Set model predictions postprocessing type.
|
|
22
|
+
void SetPredictionType(const Napi::CallbackInfo& info);
|
|
23
|
+
|
|
24
|
+
// Calculate prediction for matrices of features.
|
|
23
25
|
Napi::Value CalcPrediction(const Napi::CallbackInfo& info);
|
|
24
26
|
|
|
25
27
|
// Enable GPU evaluation on the specified deivce.
|
|
@@ -28,19 +30,32 @@ public:
|
|
|
28
30
|
// Model parameter getters.
|
|
29
31
|
Napi::Value GetModelFloatFeaturesCount(const Napi::CallbackInfo& info);
|
|
30
32
|
Napi::Value GetModelCatFeaturesCount(const Napi::CallbackInfo& info);
|
|
33
|
+
Napi::Value GetModelTextFeaturesCount(const Napi::CallbackInfo& info);
|
|
34
|
+
Napi::Value GetModelEmbeddingFeaturesCount(const Napi::CallbackInfo& info);
|
|
31
35
|
Napi::Value GetModelTreeCount(const Napi::CallbackInfo& info);
|
|
32
36
|
Napi::Value GetModelDimensionsCount(const Napi::CallbackInfo& info);
|
|
37
|
+
Napi::Value GetPredictionDimensionsCount(const Napi::CallbackInfo& info);
|
|
33
38
|
|
|
34
39
|
private:
|
|
35
40
|
ModelCalcerHandle* Handle = nullptr;
|
|
36
41
|
bool ModelLoaded = false;
|
|
37
42
|
|
|
38
|
-
Napi::Array
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
Napi::Array CalcPredictionWithCatFeaturesAsHashes(
|
|
44
|
+
Napi::Env env,
|
|
45
|
+
const uint32_t sampleCount,
|
|
46
|
+
const Napi::Array& floatFeatures,
|
|
47
|
+
const Napi::Value& catFeatures, // array or undefined
|
|
48
|
+
const Napi::Value& textFeatures, // array or undefined
|
|
49
|
+
const Napi::Value& embeddingFeatures // array or undefined
|
|
50
|
+
);
|
|
51
|
+
Napi::Array CalcPredictionWithCatFeaturesAsStrings(
|
|
52
|
+
Napi::Env env,
|
|
53
|
+
const uint32_t sampleCount,
|
|
54
|
+
const Napi::Array& floatFeatures,
|
|
55
|
+
const Napi::Value& catFeatures, // array or undefined
|
|
56
|
+
const Napi::Value& textFeatures, // array or undefined
|
|
57
|
+
const Napi::Value& embeddingFeatures // array or undefined
|
|
58
|
+
);
|
|
44
59
|
|
|
45
60
|
TModel(const TModel&) = delete;
|
|
46
61
|
TModel(TModel&&) = delete;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
// STL "forwarding" for the poor
|
|
4
|
-
|
|
5
|
-
#include <cstddef>
|
|
6
|
-
#include <string>
|
|
7
|
-
#include <string_view>
|
|
8
|
-
#include <utility>
|
|
9
|
-
#include <vector>
|
|
10
|
-
#include <list>
|
|
11
|
-
#include <deque>
|
|
12
|
-
#include <map>
|
|
13
|
-
#include <set>
|
|
14
|
-
#include <functional>
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <util/system/yassert.h>
|
|
4
|
-
#include <util/system/defaults.h>
|
|
5
|
-
#include <util/generic/typetraits.h>
|
|
6
|
-
|
|
7
|
-
namespace NUnicodeTable {
|
|
8
|
-
template <class Value>
|
|
9
|
-
struct TValueSelector;
|
|
10
|
-
|
|
11
|
-
template <class Value>
|
|
12
|
-
struct TValueSelector {
|
|
13
|
-
using TStored = const Value;
|
|
14
|
-
using TValueRef = const Value&;
|
|
15
|
-
using TValuePtr = const Value*;
|
|
16
|
-
|
|
17
|
-
static inline TValueRef Get(TValuePtr val) {
|
|
18
|
-
return *val;
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
template <class Value>
|
|
23
|
-
struct TValueSelector<const Value*> {
|
|
24
|
-
using TStored = const Value[];
|
|
25
|
-
using TValueRef = const Value*;
|
|
26
|
-
using TValuePtr = const Value*;
|
|
27
|
-
|
|
28
|
-
static inline TValueRef Get(TValuePtr val) {
|
|
29
|
-
return val;
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
template <class Value>
|
|
34
|
-
struct TValues {
|
|
35
|
-
using TSelector = TValueSelector<Value>;
|
|
36
|
-
|
|
37
|
-
using TStored = typename TSelector::TStored;
|
|
38
|
-
using TValueRef = typename TSelector::TValueRef;
|
|
39
|
-
using TValuePtr = typename TSelector::TValuePtr;
|
|
40
|
-
|
|
41
|
-
using TData = const TValuePtr*;
|
|
42
|
-
|
|
43
|
-
static inline TValuePtr Get(TData table, size_t index) {
|
|
44
|
-
static_assert(std::is_pointer<TData>::value, "expect std::is_pointer<TData>::value");
|
|
45
|
-
return table[index];
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
static inline TValueRef Get(TValuePtr val) {
|
|
49
|
-
return TSelector::Get(val);
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
template <int Shift, class TChild>
|
|
54
|
-
struct TSubtable {
|
|
55
|
-
using TStored = typename TChild::TStored;
|
|
56
|
-
using TValueRef = typename TChild::TValueRef;
|
|
57
|
-
using TValuePtr = typename TChild::TValuePtr;
|
|
58
|
-
using TData = const typename TChild::TData*;
|
|
59
|
-
|
|
60
|
-
static inline TValuePtr Get(TData table, size_t key) {
|
|
61
|
-
static_assert(std::is_pointer<TData>::value, "expect std::is_pointer<TData>::value");
|
|
62
|
-
return TChild::Get(table[key >> Shift], key & ((1 << Shift) - 1));
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
static inline TValueRef Get(TValuePtr val) {
|
|
66
|
-
return TChild::Get(val);
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
template <class T>
|
|
71
|
-
class TTable {
|
|
72
|
-
private:
|
|
73
|
-
using TImpl = T;
|
|
74
|
-
using TData = typename TImpl::TData;
|
|
75
|
-
|
|
76
|
-
const TData Data;
|
|
77
|
-
const size_t MSize;
|
|
78
|
-
|
|
79
|
-
public:
|
|
80
|
-
using TStored = typename TImpl::TStored;
|
|
81
|
-
using TValueRef = typename TImpl::TValueRef;
|
|
82
|
-
using TValuePtr = typename TImpl::TValuePtr;
|
|
83
|
-
|
|
84
|
-
private:
|
|
85
|
-
inline TValueRef GetImpl(size_t key) const {
|
|
86
|
-
TValuePtr val = TImpl::Get(Data, key);
|
|
87
|
-
|
|
88
|
-
return TImpl::Get(val);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
inline TValueRef Get(size_t key) const {
|
|
92
|
-
return GetImpl(key);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
public:
|
|
96
|
-
TTable(TData data, size_t size)
|
|
97
|
-
: Data(data)
|
|
98
|
-
, MSize(size)
|
|
99
|
-
{
|
|
100
|
-
static_assert(std::is_pointer<TData>::value, "expect std::is_pointer<TData>::value");
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
inline TValueRef Get(size_t key, TValueRef value) const {
|
|
104
|
-
if (key >= Size())
|
|
105
|
-
return value;
|
|
106
|
-
|
|
107
|
-
return GetImpl(key);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
inline TValueRef Get(size_t key, size_t defaultKey) const {
|
|
111
|
-
if (key >= Size())
|
|
112
|
-
return Get(defaultKey);
|
|
113
|
-
|
|
114
|
-
return GetImpl(key);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
inline size_t Size() const {
|
|
118
|
-
return MSize;
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
const size_t UNICODE_TABLE_SHIFT = 5;
|
|
123
|
-
}
|
|
@@ -1,421 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "unicode_table.h"
|
|
4
|
-
|
|
5
|
-
#include <util/system/defaults.h> // wchar32, ui64, ULL()
|
|
6
|
-
|
|
7
|
-
enum WC_TYPE { // TODO move no NUnicode
|
|
8
|
-
Lu_UPPER = 1, // 'Ъ'
|
|
9
|
-
Ll_LOWER = 2, // 'ъ'
|
|
10
|
-
Lt_TITLE = 3, // 'Ъ'
|
|
11
|
-
Lm_EXTENDER = 4, // '-'
|
|
12
|
-
Lm_LETTER = 5, // 'ъ'
|
|
13
|
-
Lo_OTHER = 6, // '?'
|
|
14
|
-
Lo_IDEOGRAPH = 7, // '?'
|
|
15
|
-
Lo_KATAKANA = 8, // '?'
|
|
16
|
-
Lo_HIRAGANA = 9, // '?'
|
|
17
|
-
Lo_LEADING = 10, // '?'
|
|
18
|
-
Lo_VOWEL = 11, // '?'
|
|
19
|
-
Lo_TRAILING = 12, // '?'
|
|
20
|
-
|
|
21
|
-
Mn_NONSPACING = 13, // '`'
|
|
22
|
-
Me_ENCLOSING = 14, // '`'
|
|
23
|
-
Mc_SPACING = 15, // '`'
|
|
24
|
-
|
|
25
|
-
Nd_DIGIT = 16, // '9' // convert to digit
|
|
26
|
-
Nl_LETTER = 17, // 'X' // X,V,C,L,I ...
|
|
27
|
-
Nl_IDEOGRAPH = 18, // '?'
|
|
28
|
-
No_OTHER = 19, // '9'
|
|
29
|
-
|
|
30
|
-
Zs_SPACE = 20, // ' ' [\40\240] SPACE ... NO-BREAK SPACE (00A0)
|
|
31
|
-
Zs_ZWSPACE = 21, // ' ' // nothing ?
|
|
32
|
-
Zl_LINE = 22, // '\n'
|
|
33
|
-
Zp_PARAGRAPH = 23, // '\n'
|
|
34
|
-
|
|
35
|
-
Cc_ASCII = 24, // '\x1A' // can not happen
|
|
36
|
-
Cc_SPACE = 25, // '\x1A' // can not happen
|
|
37
|
-
Cc_SEPARATOR = 26, // '\x1A' // can not happen
|
|
38
|
-
|
|
39
|
-
Cf_FORMAT = 27, // '\x1A' // nothing ?
|
|
40
|
-
Cf_JOIN = 28, // '\x1A' // nothing ?
|
|
41
|
-
Cf_BIDI = 29, // '\x1A' // nothing ?
|
|
42
|
-
Cf_ZWNBSP = 30, // '\x1A' // nothing ?
|
|
43
|
-
|
|
44
|
-
Cn_UNASSIGNED = 0, // '?'
|
|
45
|
-
Co_PRIVATE = 0, // '?'
|
|
46
|
-
Cs_LOW = 31, // '?'
|
|
47
|
-
Cs_HIGH = 32, // '?'
|
|
48
|
-
|
|
49
|
-
Pd_DASH = 33, // '-'
|
|
50
|
-
Pd_HYPHEN = 34, // '-' [-] HYPHEN-MINUS
|
|
51
|
-
Ps_START = 35, // '(' [([{] LEFT PARENTHESIS ... LEFT CURLY BRACKET
|
|
52
|
-
Ps_QUOTE = 36, // '"'
|
|
53
|
-
Pe_END = 37, // ')' [)]}] RIGHT PARENTHESIS ... RIGHT CURLY BRACKET
|
|
54
|
-
Pe_QUOTE = 38, // '"'
|
|
55
|
-
Pi_QUOTE = 39, // '"'
|
|
56
|
-
Pf_QUOTE = 40, // '"'
|
|
57
|
-
Pc_CONNECTOR = 41, // '_' [_] LOW LINE
|
|
58
|
-
Po_OTHER = 42, // '*' [#%&*/@\] NUMBER SIGN ... REVERSE SOLIDUS
|
|
59
|
-
Po_QUOTE = 43, // '"' ["] QUOTATION MARK
|
|
60
|
-
Po_TERMINAL = 44, // '.' [!,.:;?] EXCLAMATION MARK ... QUESTION MARK
|
|
61
|
-
Po_EXTENDER = 45, // '-' [№] MIDDLE DOT (00B7)
|
|
62
|
-
Po_HYPHEN = 46, // '-'
|
|
63
|
-
|
|
64
|
-
Sm_MATH = 47, // '=' [+<=>|~] PLUS SIGN ... TILDE
|
|
65
|
-
Sm_MINUS = 48, // '-'
|
|
66
|
-
Sc_CURRENCY = 49, // '$' [$] DOLLAR SIGN
|
|
67
|
-
Sk_MODIFIER = 50, // '`' [^`] CIRCUMFLEX ACCENT ... GRAVE ACCENT
|
|
68
|
-
So_OTHER = 51, // '°' [°] DEGREE SIGN (00B0)
|
|
69
|
-
|
|
70
|
-
Ps_SINGLE_QUOTE = 52, // '\'' ['] OPENING SINGLE QUOTE
|
|
71
|
-
Pe_SINGLE_QUOTE = 53, // '\'' ['] CLOSING SINGLE QUOTE
|
|
72
|
-
Pi_SINGLE_QUOTE = 54, // '\'' ['] INITIAL SINGLE QUOTE
|
|
73
|
-
Pf_SINGLE_QUOTE = 55, // '\'' ['] FINAL SINGLE QUOTE
|
|
74
|
-
Po_SINGLE_QUOTE = 56, // '\'' ['] APOSTROPHE and PRIME
|
|
75
|
-
|
|
76
|
-
CCL_NUM = 57,
|
|
77
|
-
CCL_MASK = 0x3F,
|
|
78
|
-
|
|
79
|
-
IS_ASCII_XDIGIT = 1 << 6,
|
|
80
|
-
IS_DIGIT = 1 << 7,
|
|
81
|
-
IS_NONBREAK = 1 << 8,
|
|
82
|
-
|
|
83
|
-
IS_PRIVATE = 1 << 9,
|
|
84
|
-
|
|
85
|
-
IS_COMPAT = 1 << 10,
|
|
86
|
-
IS_CANON = 1 << 11,
|
|
87
|
-
|
|
88
|
-
NFD_QC = 1 << 12,
|
|
89
|
-
NFC_QC = 1 << 13,
|
|
90
|
-
NFKD_QC = 1 << 14,
|
|
91
|
-
NFKC_QC = 1 << 15,
|
|
92
|
-
|
|
93
|
-
BIDI_OFFSET = 16,
|
|
94
|
-
SVAL_OFFSET = 22,
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
const size_t DEFCHAR_BUF = 58; // CCL_NUM + 1
|
|
98
|
-
|
|
99
|
-
#define SHIFT(i) (ULL(1) << (i))
|
|
100
|
-
|
|
101
|
-
namespace NUnicode {
|
|
102
|
-
using TCombining = ui8;
|
|
103
|
-
|
|
104
|
-
namespace NPrivate {
|
|
105
|
-
struct TProperty {
|
|
106
|
-
ui32 Info;
|
|
107
|
-
i32 Lower;
|
|
108
|
-
i32 Upper;
|
|
109
|
-
i32 Title;
|
|
110
|
-
TCombining Combining;
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
extern const size_t DEFAULT_KEY;
|
|
114
|
-
|
|
115
|
-
using TUnidataTable = NUnicodeTable::TTable<NUnicodeTable::TSubtable<NUnicodeTable::UNICODE_TABLE_SHIFT, NUnicodeTable::TValues<TProperty>>>;
|
|
116
|
-
const TUnidataTable& UnidataTable();
|
|
117
|
-
|
|
118
|
-
inline const TProperty& CharProperty(wchar32 ch) {
|
|
119
|
-
return UnidataTable().Get(ch, DEFAULT_KEY);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
inline ui32 CharInfo(wchar32 ch) {
|
|
123
|
-
return CharProperty(ch).Info;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
inline bool IsBidi(wchar32 ch, ui32 type) {
|
|
127
|
-
return ((NUnicode::NPrivate::CharInfo(ch) >> BIDI_OFFSET) & 15) == type;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
inline size_t UnicodeInstancesLimit() {
|
|
132
|
-
return NPrivate::UnidataTable().Size();
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
inline TCombining DecompositionCombining(wchar32 ch) {
|
|
136
|
-
return NPrivate::CharProperty(ch).Combining;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
inline WC_TYPE CharType(wchar32 ch) {
|
|
140
|
-
return (WC_TYPE)(NUnicode::NPrivate::CharInfo(ch) & CCL_MASK);
|
|
141
|
-
}
|
|
142
|
-
inline bool CharHasType(wchar32 ch, ui64 type_bits) {
|
|
143
|
-
return (SHIFT(NUnicode::CharType(ch)) & type_bits) != 0;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// all usefull properties
|
|
148
|
-
|
|
149
|
-
inline bool IsComposed(wchar32 ch) {
|
|
150
|
-
return NUnicode::NPrivate::CharInfo(ch) & (IS_COMPAT | IS_CANON);
|
|
151
|
-
}
|
|
152
|
-
inline bool IsCanonComposed(wchar32 ch) {
|
|
153
|
-
return NUnicode::NPrivate::CharInfo(ch) & IS_CANON;
|
|
154
|
-
}
|
|
155
|
-
inline bool IsCompatComposed(wchar32 ch) {
|
|
156
|
-
return NUnicode::NPrivate::CharInfo(ch) & IS_COMPAT;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
inline bool IsWhitespace(wchar32 ch) {
|
|
160
|
-
return NUnicode::CharHasType(ch, SHIFT(Cc_SPACE) | SHIFT(Zs_SPACE) | SHIFT(Zs_ZWSPACE) | SHIFT(Zl_LINE) | SHIFT(Zp_PARAGRAPH));
|
|
161
|
-
}
|
|
162
|
-
inline bool IsAsciiCntrl(wchar32 ch) {
|
|
163
|
-
return NUnicode::CharHasType(ch, SHIFT(Cc_ASCII) | SHIFT(Cc_SPACE) | SHIFT(Cc_SEPARATOR));
|
|
164
|
-
}
|
|
165
|
-
inline bool IsBidiCntrl(wchar32 ch) {
|
|
166
|
-
return NUnicode::CharHasType(ch, SHIFT(Cf_BIDI));
|
|
167
|
-
}
|
|
168
|
-
inline bool IsJoinCntrl(wchar32 ch) {
|
|
169
|
-
return NUnicode::CharHasType(ch, SHIFT(Cf_JOIN));
|
|
170
|
-
}
|
|
171
|
-
inline bool IsFormatCntrl(wchar32 ch) {
|
|
172
|
-
return NUnicode::CharHasType(ch, SHIFT(Cf_FORMAT));
|
|
173
|
-
}
|
|
174
|
-
inline bool IsIgnorableCntrl(wchar32 ch) {
|
|
175
|
-
return NUnicode::CharHasType(ch, SHIFT(Cf_FORMAT) | SHIFT(Cf_JOIN) | SHIFT(Cf_BIDI) | SHIFT(Cf_ZWNBSP));
|
|
176
|
-
}
|
|
177
|
-
inline bool IsCntrl(wchar32 ch) {
|
|
178
|
-
return NUnicode::CharHasType(ch,
|
|
179
|
-
SHIFT(Cf_FORMAT) | SHIFT(Cf_JOIN) | SHIFT(Cf_BIDI) | SHIFT(Cf_ZWNBSP) |
|
|
180
|
-
SHIFT(Cc_ASCII) | SHIFT(Cc_SPACE) | SHIFT(Cc_SEPARATOR));
|
|
181
|
-
}
|
|
182
|
-
inline bool IsZerowidth(wchar32 ch) {
|
|
183
|
-
return NUnicode::CharHasType(ch, SHIFT(Cf_FORMAT) | SHIFT(Cf_JOIN) | SHIFT(Cf_BIDI) | SHIFT(Cf_ZWNBSP) | SHIFT(Zs_ZWSPACE));
|
|
184
|
-
}
|
|
185
|
-
inline bool IsLineSep(wchar32 ch) {
|
|
186
|
-
return NUnicode::CharHasType(ch, SHIFT(Zl_LINE));
|
|
187
|
-
}
|
|
188
|
-
inline bool IsParaSep(wchar32 ch) {
|
|
189
|
-
return NUnicode::CharHasType(ch, SHIFT(Zp_PARAGRAPH));
|
|
190
|
-
}
|
|
191
|
-
inline bool IsDash(wchar32 ch) {
|
|
192
|
-
return NUnicode::CharHasType(ch, SHIFT(Pd_DASH) | SHIFT(Pd_HYPHEN) | SHIFT(Sm_MINUS));
|
|
193
|
-
}
|
|
194
|
-
inline bool IsHyphen(wchar32 ch) {
|
|
195
|
-
return NUnicode::CharHasType(ch, SHIFT(Pd_HYPHEN) | SHIFT(Po_HYPHEN));
|
|
196
|
-
}
|
|
197
|
-
inline bool IsQuotation(wchar32 ch) {
|
|
198
|
-
return NUnicode::CharHasType(ch,
|
|
199
|
-
SHIFT(Po_QUOTE) | SHIFT(Ps_QUOTE) | SHIFT(Pe_QUOTE) | SHIFT(Pi_QUOTE) |
|
|
200
|
-
SHIFT(Pf_QUOTE) | SHIFT(Po_SINGLE_QUOTE) | SHIFT(Ps_SINGLE_QUOTE) |
|
|
201
|
-
SHIFT(Pe_SINGLE_QUOTE) | SHIFT(Pi_SINGLE_QUOTE) | SHIFT(Pf_SINGLE_QUOTE));
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
inline bool IsSingleQuotation(wchar32 ch) {
|
|
205
|
-
return NUnicode::CharHasType(ch,
|
|
206
|
-
SHIFT(Po_SINGLE_QUOTE) | SHIFT(Ps_SINGLE_QUOTE) | SHIFT(Pe_SINGLE_QUOTE) |
|
|
207
|
-
SHIFT(Pi_SINGLE_QUOTE) | SHIFT(Pf_SINGLE_QUOTE));
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
inline bool IsTerminal(wchar32 ch) {
|
|
211
|
-
return NUnicode::CharHasType(ch, SHIFT(Po_TERMINAL));
|
|
212
|
-
}
|
|
213
|
-
inline bool IsPairedPunct(wchar32 ch) {
|
|
214
|
-
return NUnicode::CharHasType(ch,
|
|
215
|
-
SHIFT(Ps_START) | SHIFT(Pe_END) | SHIFT(Ps_QUOTE) | SHIFT(Pe_QUOTE) |
|
|
216
|
-
SHIFT(Pi_QUOTE) | SHIFT(Pf_QUOTE) | SHIFT(Ps_SINGLE_QUOTE) |
|
|
217
|
-
SHIFT(Pe_SINGLE_QUOTE) | SHIFT(Pi_SINGLE_QUOTE) | SHIFT(Pf_SINGLE_QUOTE));
|
|
218
|
-
}
|
|
219
|
-
inline bool IsLeftPunct(wchar32 ch) {
|
|
220
|
-
return NUnicode::CharHasType(ch, SHIFT(Ps_START) | SHIFT(Ps_QUOTE) | SHIFT(Ps_SINGLE_QUOTE));
|
|
221
|
-
}
|
|
222
|
-
inline bool IsRightPunct(wchar32 ch) {
|
|
223
|
-
return NUnicode::CharHasType(ch, SHIFT(Pe_END) | SHIFT(Pe_QUOTE) | SHIFT(Pe_SINGLE_QUOTE));
|
|
224
|
-
}
|
|
225
|
-
inline bool IsCombining(wchar32 ch) {
|
|
226
|
-
return NUnicode::CharHasType(ch, SHIFT(Mc_SPACING) | SHIFT(Mn_NONSPACING) | SHIFT(Me_ENCLOSING));
|
|
227
|
-
}
|
|
228
|
-
inline bool IsNonspacing(wchar32 ch) {
|
|
229
|
-
return NUnicode::CharHasType(ch, SHIFT(Mn_NONSPACING) | SHIFT(Me_ENCLOSING));
|
|
230
|
-
}
|
|
231
|
-
inline bool IsAlphabetic(wchar32 ch) {
|
|
232
|
-
return NUnicode::CharHasType(ch,
|
|
233
|
-
SHIFT(Lu_UPPER) | SHIFT(Ll_LOWER) | SHIFT(Lt_TITLE) | SHIFT(Lm_EXTENDER) | SHIFT(Lm_LETTER) | SHIFT(Lo_OTHER) | SHIFT(Nl_LETTER));
|
|
234
|
-
}
|
|
235
|
-
inline bool IsIdeographic(wchar32 ch) {
|
|
236
|
-
return NUnicode::CharHasType(ch, SHIFT(Lo_IDEOGRAPH) | SHIFT(Nl_IDEOGRAPH));
|
|
237
|
-
}
|
|
238
|
-
inline bool IsKatakana(wchar32 ch) {
|
|
239
|
-
return NUnicode::CharHasType(ch, SHIFT(Lo_KATAKANA));
|
|
240
|
-
}
|
|
241
|
-
inline bool IsHiragana(wchar32 ch) {
|
|
242
|
-
return NUnicode::CharHasType(ch, SHIFT(Lo_HIRAGANA));
|
|
243
|
-
}
|
|
244
|
-
inline bool IsHangulLeading(wchar32 ch) {
|
|
245
|
-
return NUnicode::CharHasType(ch, SHIFT(Lo_LEADING));
|
|
246
|
-
}
|
|
247
|
-
inline bool IsHangulVowel(wchar32 ch) {
|
|
248
|
-
return NUnicode::CharHasType(ch, SHIFT(Lo_VOWEL));
|
|
249
|
-
}
|
|
250
|
-
inline bool IsHangulTrailing(wchar32 ch) {
|
|
251
|
-
return NUnicode::CharHasType(ch, SHIFT(Lo_TRAILING));
|
|
252
|
-
}
|
|
253
|
-
inline bool IsHexdigit(wchar32 ch) {
|
|
254
|
-
return NUnicode::NPrivate::CharInfo(ch) & IS_ASCII_XDIGIT;
|
|
255
|
-
}
|
|
256
|
-
inline bool IsDecdigit(wchar32 ch) {
|
|
257
|
-
return NUnicode::CharHasType(ch, SHIFT(Nd_DIGIT));
|
|
258
|
-
}
|
|
259
|
-
inline bool IsNumeric(wchar32 ch) {
|
|
260
|
-
return NUnicode::CharHasType(ch, SHIFT(Nd_DIGIT) | SHIFT(Nl_LETTER) | SHIFT(Nl_IDEOGRAPH) | SHIFT(No_OTHER));
|
|
261
|
-
}
|
|
262
|
-
inline bool IsCurrency(wchar32 ch) {
|
|
263
|
-
return NUnicode::CharHasType(ch, SHIFT(Sc_CURRENCY));
|
|
264
|
-
}
|
|
265
|
-
inline bool IsMath(wchar32 ch) {
|
|
266
|
-
return NUnicode::CharHasType(ch, SHIFT(Sm_MATH));
|
|
267
|
-
}
|
|
268
|
-
inline bool IsSymbol(wchar32 ch) {
|
|
269
|
-
return NUnicode::CharHasType(ch, SHIFT(Sm_MATH) | SHIFT(Sm_MINUS) | SHIFT(Sc_CURRENCY) | SHIFT(Sk_MODIFIER) | SHIFT(So_OTHER));
|
|
270
|
-
}
|
|
271
|
-
inline bool IsLowSurrogate(wchar32 ch) {
|
|
272
|
-
return NUnicode::CharHasType(ch, SHIFT(Cs_LOW));
|
|
273
|
-
}
|
|
274
|
-
inline bool IsHighSurrogate(wchar32 ch) {
|
|
275
|
-
return NUnicode::CharHasType(ch, SHIFT(Cs_HIGH));
|
|
276
|
-
}
|
|
277
|
-
inline bool IsNonbreak(wchar32 ch) {
|
|
278
|
-
return NUnicode::NPrivate::CharInfo(ch) & IS_NONBREAK;
|
|
279
|
-
}
|
|
280
|
-
inline bool IsPrivate(wchar32 ch) {
|
|
281
|
-
return (NUnicode::NPrivate::CharInfo(ch) & IS_PRIVATE) && !NUnicode::CharHasType(ch, SHIFT(Cs_HIGH));
|
|
282
|
-
}
|
|
283
|
-
inline bool IsUnassigned(wchar32 ch) {
|
|
284
|
-
return (NUnicode::CharType(ch) == 0) && !(NUnicode::NPrivate::CharInfo(ch) & IS_PRIVATE);
|
|
285
|
-
}
|
|
286
|
-
inline bool IsPrivateHighSurrogate(wchar32 ch) {
|
|
287
|
-
return NUnicode::CharHasType(ch, SHIFT(Cs_HIGH)) && (NUnicode::NPrivate::CharInfo(ch) & IS_PRIVATE);
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// transformations
|
|
291
|
-
|
|
292
|
-
inline wchar32 ToLower(wchar32 ch) {
|
|
293
|
-
return static_cast<wchar32>(ch + NUnicode::NPrivate::CharProperty(ch).Lower);
|
|
294
|
-
}
|
|
295
|
-
inline wchar32 ToUpper(wchar32 ch) {
|
|
296
|
-
return static_cast<wchar32>(ch + NUnicode::NPrivate::CharProperty(ch).Upper);
|
|
297
|
-
}
|
|
298
|
-
inline wchar32 ToTitle(wchar32 ch) {
|
|
299
|
-
return static_cast<wchar32>(ch + NUnicode::NPrivate::CharProperty(ch).Title);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
inline int ToDigit(wchar32 ch) {
|
|
303
|
-
ui32 i = NUnicode::NPrivate::CharInfo(ch);
|
|
304
|
-
return (i & IS_DIGIT) ? static_cast<int>(i >> SVAL_OFFSET) : -1;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// BIDI properties
|
|
308
|
-
|
|
309
|
-
inline bool IsBidiLeft(wchar32 ch) {
|
|
310
|
-
return NUnicode::NPrivate::IsBidi(ch, 1);
|
|
311
|
-
}
|
|
312
|
-
inline bool IsBidiRight(wchar32 ch) {
|
|
313
|
-
return NUnicode::NPrivate::IsBidi(ch, 2);
|
|
314
|
-
}
|
|
315
|
-
inline bool IsBidiEuronum(wchar32 ch) {
|
|
316
|
-
return NUnicode::NPrivate::IsBidi(ch, 3);
|
|
317
|
-
}
|
|
318
|
-
inline bool IsBidiEurosep(wchar32 ch) {
|
|
319
|
-
return NUnicode::NPrivate::IsBidi(ch, 4);
|
|
320
|
-
}
|
|
321
|
-
inline bool IsBidiEuroterm(wchar32 ch) {
|
|
322
|
-
return NUnicode::NPrivate::IsBidi(ch, 5);
|
|
323
|
-
}
|
|
324
|
-
inline bool IsBidiArabnum(wchar32 ch) {
|
|
325
|
-
return NUnicode::NPrivate::IsBidi(ch, 6);
|
|
326
|
-
}
|
|
327
|
-
inline bool IsBidiCommsep(wchar32 ch) {
|
|
328
|
-
return NUnicode::NPrivate::IsBidi(ch, 7);
|
|
329
|
-
}
|
|
330
|
-
inline bool IsBidiBlocksep(wchar32 ch) {
|
|
331
|
-
return NUnicode::NPrivate::IsBidi(ch, 8);
|
|
332
|
-
}
|
|
333
|
-
inline bool IsBidiSegmsep(wchar32 ch) {
|
|
334
|
-
return NUnicode::NPrivate::IsBidi(ch, 9);
|
|
335
|
-
}
|
|
336
|
-
inline bool IsBidiSpace(wchar32 ch) {
|
|
337
|
-
return NUnicode::NPrivate::IsBidi(ch, 10);
|
|
338
|
-
}
|
|
339
|
-
inline bool IsBidiNeutral(wchar32 ch) {
|
|
340
|
-
return NUnicode::NPrivate::IsBidi(ch, 11);
|
|
341
|
-
}
|
|
342
|
-
inline bool IsBidiNotappl(wchar32 ch) {
|
|
343
|
-
return NUnicode::NPrivate::IsBidi(ch, 0);
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
inline bool IsSpace(wchar32 ch) {
|
|
347
|
-
return IsWhitespace(ch);
|
|
348
|
-
}
|
|
349
|
-
inline bool IsLower(wchar32 ch) {
|
|
350
|
-
return NUnicode::CharHasType(ch, SHIFT(Ll_LOWER));
|
|
351
|
-
}
|
|
352
|
-
inline bool IsUpper(wchar32 ch) {
|
|
353
|
-
return NUnicode::CharHasType(ch, SHIFT(Lu_UPPER));
|
|
354
|
-
}
|
|
355
|
-
inline bool IsTitle(wchar32 ch) {
|
|
356
|
-
return NUnicode::CharHasType(ch, SHIFT(Lt_TITLE));
|
|
357
|
-
}
|
|
358
|
-
inline bool IsAlpha(wchar32 ch) {
|
|
359
|
-
return NUnicode::CharHasType(ch,
|
|
360
|
-
SHIFT(Lu_UPPER) | SHIFT(Ll_LOWER) | SHIFT(Lt_TITLE) | SHIFT(Lm_LETTER) | SHIFT(Lm_EXTENDER) |
|
|
361
|
-
SHIFT(Lo_OTHER) | SHIFT(Lo_IDEOGRAPH) | SHIFT(Lo_KATAKANA) | SHIFT(Lo_HIRAGANA) |
|
|
362
|
-
SHIFT(Lo_LEADING) | SHIFT(Lo_VOWEL) | SHIFT(Lo_TRAILING));
|
|
363
|
-
}
|
|
364
|
-
inline bool IsAlnum(wchar32 ch) {
|
|
365
|
-
return NUnicode::CharHasType(ch,
|
|
366
|
-
SHIFT(Lu_UPPER) | SHIFT(Ll_LOWER) | SHIFT(Lt_TITLE) | SHIFT(Lm_LETTER) | SHIFT(Lm_EXTENDER) |
|
|
367
|
-
SHIFT(Lo_OTHER) | SHIFT(Lo_IDEOGRAPH) | SHIFT(Lo_KATAKANA) | SHIFT(Lo_HIRAGANA) |
|
|
368
|
-
SHIFT(Lo_LEADING) | SHIFT(Lo_VOWEL) | SHIFT(Lo_TRAILING) |
|
|
369
|
-
SHIFT(Nd_DIGIT) | SHIFT(Nl_LETTER) | SHIFT(Nl_IDEOGRAPH) | SHIFT(No_OTHER));
|
|
370
|
-
}
|
|
371
|
-
inline bool IsPunct(wchar32 ch) {
|
|
372
|
-
return NUnicode::CharHasType(ch,
|
|
373
|
-
SHIFT(Pd_DASH) |
|
|
374
|
-
SHIFT(Pd_HYPHEN) | SHIFT(Ps_START) | SHIFT(Ps_QUOTE) | SHIFT(Pe_END) | SHIFT(Pe_QUOTE) | SHIFT(Pc_CONNECTOR) |
|
|
375
|
-
SHIFT(Po_OTHER) | SHIFT(Po_QUOTE) | SHIFT(Po_TERMINAL) | SHIFT(Po_EXTENDER) | SHIFT(Po_HYPHEN) |
|
|
376
|
-
SHIFT(Pi_QUOTE) | SHIFT(Pf_QUOTE));
|
|
377
|
-
}
|
|
378
|
-
inline bool IsXdigit(wchar32 ch) {
|
|
379
|
-
return IsHexdigit(ch);
|
|
380
|
-
}
|
|
381
|
-
inline bool IsDigit(wchar32 ch) {
|
|
382
|
-
return IsDecdigit(ch);
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
inline bool IsCommonDigit(wchar32 ch) {
|
|
386
|
-
// IsDigit returns true for some exotic symbols like "VAI DIGIT TWO" (U+A622)
|
|
387
|
-
// and cannot be used safely with FromString() convertors
|
|
388
|
-
const wchar32 ZERO = '0';
|
|
389
|
-
const wchar32 NINE = '9';
|
|
390
|
-
return ch >= ZERO && ch <= NINE;
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
inline bool IsGraph(wchar32 ch) {
|
|
394
|
-
return IsAlnum(ch) || IsPunct(ch) || IsSymbol(ch);
|
|
395
|
-
}
|
|
396
|
-
inline bool IsBlank(wchar32 ch) {
|
|
397
|
-
return NUnicode::CharHasType(ch, SHIFT(Zs_SPACE) | SHIFT(Zs_ZWSPACE)) || ch == '\t';
|
|
398
|
-
}
|
|
399
|
-
inline bool IsPrint(wchar32 ch) {
|
|
400
|
-
return IsAlnum(ch) || IsPunct(ch) || IsSymbol(ch) || IsBlank(ch);
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
inline bool IsRomanDigit(wchar32 ch) {
|
|
404
|
-
if (NUnicode::CharHasType(ch, SHIFT(Nl_LETTER)) && 0x2160 <= ch && ch <= 0x2188)
|
|
405
|
-
return true;
|
|
406
|
-
if (ch < 127) {
|
|
407
|
-
switch (static_cast<char>(::ToLower(ch))) {
|
|
408
|
-
case 'i':
|
|
409
|
-
case 'v':
|
|
410
|
-
case 'x':
|
|
411
|
-
case 'l':
|
|
412
|
-
case 'c':
|
|
413
|
-
case 'd':
|
|
414
|
-
case 'm':
|
|
415
|
-
return true;
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
return false;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
#undef SHIFT
|