summaryrefslogtreecommitdiff
path: root/deps/node/deps/icu-small/source/i18n/scriptset.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/icu-small/source/i18n/scriptset.cpp')
-rw-r--r--deps/node/deps/icu-small/source/i18n/scriptset.cpp321
1 files changed, 0 insertions, 321 deletions
diff --git a/deps/node/deps/icu-small/source/i18n/scriptset.cpp b/deps/node/deps/icu-small/source/i18n/scriptset.cpp
deleted file mode 100644
index 558d178e..00000000
--- a/deps/node/deps/icu-small/source/i18n/scriptset.cpp
+++ /dev/null
@@ -1,321 +0,0 @@
-// © 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-**********************************************************************
-* Copyright (C) 2014, International Business Machines
-* Corporation and others. All Rights Reserved.
-**********************************************************************
-*
-* scriptset.cpp
-*
-* created on: 2013 Jan 7
-* created by: Andy Heninger
-*/
-
-#include "unicode/utypes.h"
-
-#include "unicode/uchar.h"
-#include "unicode/unistr.h"
-
-#include "scriptset.h"
-#include "uassert.h"
-#include "cmemory.h"
-
-U_NAMESPACE_BEGIN
-
-//----------------------------------------------------------------------------
-//
-// ScriptSet implementation
-//
-//----------------------------------------------------------------------------
-ScriptSet::ScriptSet() {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- bits[i] = 0;
- }
-}
-
-ScriptSet::~ScriptSet() {
-}
-
-ScriptSet::ScriptSet(const ScriptSet &other) {
- *this = other;
-}
-
-
-ScriptSet & ScriptSet::operator =(const ScriptSet &other) {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- bits[i] = other.bits[i];
- }
- return *this;
-}
-
-
-UBool ScriptSet::operator == (const ScriptSet &other) const {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- if (bits[i] != other.bits[i]) {
- return FALSE;
- }
- }
- return TRUE;
-}
-
-UBool ScriptSet::test(UScriptCode script, UErrorCode &status) const {
- if (U_FAILURE(status)) {
- return FALSE;
- }
- if (script < 0 || script >= (int32_t)sizeof(bits) * 8) {
- status = U_ILLEGAL_ARGUMENT_ERROR;
- return FALSE;
- }
- uint32_t index = script / 32;
- uint32_t bit = 1 << (script & 31);
- return ((bits[index] & bit) != 0);
-}
-
-
-ScriptSet &ScriptSet::set(UScriptCode script, UErrorCode &status) {
- if (U_FAILURE(status)) {
- return *this;
- }
- if (script < 0 || script >= (int32_t)sizeof(bits) * 8) {
- status = U_ILLEGAL_ARGUMENT_ERROR;
- return *this;
- }
- uint32_t index = script / 32;
- uint32_t bit = 1 << (script & 31);
- bits[index] |= bit;
- return *this;
-}
-
-ScriptSet &ScriptSet::reset(UScriptCode script, UErrorCode &status) {
- if (U_FAILURE(status)) {
- return *this;
- }
- if (script < 0 || script >= (int32_t)sizeof(bits) * 8) {
- status = U_ILLEGAL_ARGUMENT_ERROR;
- return *this;
- }
- uint32_t index = script / 32;
- uint32_t bit = 1 << (script & 31);
- bits[index] &= ~bit;
- return *this;
-}
-
-
-
-ScriptSet &ScriptSet::Union(const ScriptSet &other) {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- bits[i] |= other.bits[i];
- }
- return *this;
-}
-
-ScriptSet &ScriptSet::intersect(const ScriptSet &other) {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- bits[i] &= other.bits[i];
- }
- return *this;
-}
-
-ScriptSet &ScriptSet::intersect(UScriptCode script, UErrorCode &status) {
- ScriptSet t;
- t.set(script, status);
- if (U_SUCCESS(status)) {
- this->intersect(t);
- }
- return *this;
-}
-
-UBool ScriptSet::intersects(const ScriptSet &other) const {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- if ((bits[i] & other.bits[i]) != 0) {
- return true;
- }
- }
- return false;
-}
-
-UBool ScriptSet::contains(const ScriptSet &other) const {
- ScriptSet t(*this);
- t.intersect(other);
- return (t == other);
-}
-
-
-ScriptSet &ScriptSet::setAll() {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- bits[i] = 0xffffffffu;
- }
- return *this;
-}
-
-
-ScriptSet &ScriptSet::resetAll() {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- bits[i] = 0;
- }
- return *this;
-}
-
-int32_t ScriptSet::countMembers() const {
- // This bit counter is good for sparse numbers of '1's, which is
- // very much the case that we will usually have.
- int32_t count = 0;
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- uint32_t x = bits[i];
- while (x > 0) {
- count++;
- x &= (x - 1); // and off the least significant one bit.
- }
- }
- return count;
-}
-
-int32_t ScriptSet::hashCode() const {
- int32_t hash = 0;
- for (int32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- hash ^= bits[i];
- }
- return hash;
-}
-
-int32_t ScriptSet::nextSetBit(int32_t fromIndex) const {
- // TODO: Wants a better implementation.
- if (fromIndex < 0) {
- return -1;
- }
- UErrorCode status = U_ZERO_ERROR;
- for (int32_t scriptIndex = fromIndex; scriptIndex < (int32_t)sizeof(bits)*8; scriptIndex++) {
- if (test((UScriptCode)scriptIndex, status)) {
- return scriptIndex;
- }
- }
- return -1;
-}
-
-UBool ScriptSet::isEmpty() const {
- for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
- if (bits[i] != 0) {
- return FALSE;
- }
- }
- return TRUE;
-}
-
-UnicodeString &ScriptSet::displayScripts(UnicodeString &dest) const {
- UBool firstTime = TRUE;
- for (int32_t i = nextSetBit(0); i >= 0; i = nextSetBit(i + 1)) {
- if (!firstTime) {
- dest.append((UChar)0x20);
- }
- firstTime = FALSE;
- const char *scriptName = uscript_getShortName((UScriptCode(i)));
- dest.append(UnicodeString(scriptName, -1, US_INV));
- }
- return dest;
-}
-
-ScriptSet &ScriptSet::parseScripts(const UnicodeString &scriptString, UErrorCode &status) {
- resetAll();
- if (U_FAILURE(status)) {
- return *this;
- }
- UnicodeString oneScriptName;
- for (int32_t i=0; i<scriptString.length();) {
- UChar32 c = scriptString.char32At(i);
- i = scriptString.moveIndex32(i, 1);
- if (!u_isUWhiteSpace(c)) {
- oneScriptName.append(c);
- if (i < scriptString.length()) {
- continue;
- }
- }
- if (oneScriptName.length() > 0) {
- char buf[40];
- oneScriptName.extract(0, oneScriptName.length(), buf, sizeof(buf)-1, US_INV);
- buf[sizeof(buf)-1] = 0;
- int32_t sc = u_getPropertyValueEnum(UCHAR_SCRIPT, buf);
- if (sc == UCHAR_INVALID_CODE) {
- status = U_ILLEGAL_ARGUMENT_ERROR;
- } else {
- this->set((UScriptCode)sc, status);
- }
- if (U_FAILURE(status)) {
- return *this;
- }
- oneScriptName.remove();
- }
- }
- return *this;
-}
-
-void ScriptSet::setScriptExtensions(UChar32 codePoint, UErrorCode& status) {
- if (U_FAILURE(status)) { return; }
- static const int32_t FIRST_GUESS_SCRIPT_CAPACITY = 5;
- MaybeStackArray<UScriptCode,FIRST_GUESS_SCRIPT_CAPACITY> scripts;
- UErrorCode internalStatus = U_ZERO_ERROR;
- int32_t script_count = -1;
-
- while (TRUE) {
- script_count = uscript_getScriptExtensions(
- codePoint, scripts.getAlias(), scripts.getCapacity(), &internalStatus);
- if (internalStatus == U_BUFFER_OVERFLOW_ERROR) {
- // Need to allocate more space
- if (scripts.resize(script_count) == NULL) {
- status = U_MEMORY_ALLOCATION_ERROR;
- return;
- }
- internalStatus = U_ZERO_ERROR;
- } else {
- break;
- }
- }
-
- // Check if we failed for some reason other than buffer overflow
- if (U_FAILURE(internalStatus)) {
- status = internalStatus;
- return;
- }
-
- // Load the scripts into the ScriptSet and return
- for (int32_t i = 0; i < script_count; i++) {
- this->set(scripts[i], status);
- if (U_FAILURE(status)) { return; }
- }
-}
-
-U_NAMESPACE_END
-
-U_CAPI UBool U_EXPORT2
-uhash_equalsScriptSet(const UElement key1, const UElement key2) {
- icu::ScriptSet *s1 = static_cast<icu::ScriptSet *>(key1.pointer);
- icu::ScriptSet *s2 = static_cast<icu::ScriptSet *>(key2.pointer);
- return (*s1 == *s2);
-}
-
-U_CAPI int8_t U_EXPORT2
-uhash_compareScriptSet(UElement key0, UElement key1) {
- icu::ScriptSet *s0 = static_cast<icu::ScriptSet *>(key0.pointer);
- icu::ScriptSet *s1 = static_cast<icu::ScriptSet *>(key1.pointer);
- int32_t diff = s0->countMembers() - s1->countMembers();
- if (diff != 0) return static_cast<UBool>(diff);
- int32_t i0 = s0->nextSetBit(0);
- int32_t i1 = s1->nextSetBit(0);
- while ((diff = i0-i1) == 0 && i0 > 0) {
- i0 = s0->nextSetBit(i0+1);
- i1 = s1->nextSetBit(i1+1);
- }
- return (int8_t)diff;
-}
-
-U_CAPI int32_t U_EXPORT2
-uhash_hashScriptSet(const UElement key) {
- icu::ScriptSet *s = static_cast<icu::ScriptSet *>(key.pointer);
- return s->hashCode();
-}
-
-U_CAPI void U_EXPORT2
-uhash_deleteScriptSet(void *obj) {
- icu::ScriptSet *s = static_cast<icu::ScriptSet *>(obj);
- delete s;
-}