summaryrefslogtreecommitdiff
path: root/deps/node/deps/icu-small/source/i18n/number_modifiers.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/icu-small/source/i18n/number_modifiers.h')
-rw-r--r--deps/node/deps/icu-small/source/i18n/number_modifiers.h338
1 files changed, 0 insertions, 338 deletions
diff --git a/deps/node/deps/icu-small/source/i18n/number_modifiers.h b/deps/node/deps/icu-small/source/i18n/number_modifiers.h
deleted file mode 100644
index 65ada937..00000000
--- a/deps/node/deps/icu-small/source/i18n/number_modifiers.h
+++ /dev/null
@@ -1,338 +0,0 @@
-// © 2017 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-#include "unicode/utypes.h"
-
-#if !UCONFIG_NO_FORMATTING
-#ifndef __NUMBER_MODIFIERS_H__
-#define __NUMBER_MODIFIERS_H__
-
-#include <algorithm>
-#include <cstdint>
-#include "unicode/uniset.h"
-#include "unicode/simpleformatter.h"
-#include "standardplural.h"
-#include "number_stringbuilder.h"
-#include "number_types.h"
-
-U_NAMESPACE_BEGIN namespace number {
-namespace impl {
-
-/**
- * The canonical implementation of {@link Modifier}, containing a prefix and suffix string.
- * TODO: This is not currently being used by real code and could be removed.
- */
-class U_I18N_API ConstantAffixModifier : public Modifier, public UObject {
- public:
- ConstantAffixModifier(const UnicodeString &prefix, const UnicodeString &suffix, Field field,
- bool strong)
- : fPrefix(prefix), fSuffix(suffix), fField(field), fStrong(strong) {}
-
- int32_t apply(NumberStringBuilder &output, int32_t leftIndex, int32_t rightIndex,
- UErrorCode &status) const U_OVERRIDE;
-
- int32_t getPrefixLength() const U_OVERRIDE;
-
- int32_t getCodePointCount() const U_OVERRIDE;
-
- bool isStrong() const U_OVERRIDE;
-
- bool containsField(UNumberFormatFields field) const U_OVERRIDE;
-
- void getParameters(Parameters& output) const U_OVERRIDE;
-
- bool semanticallyEquivalent(const Modifier& other) const U_OVERRIDE;
-
- private:
- UnicodeString fPrefix;
- UnicodeString fSuffix;
- Field fField;
- bool fStrong;
-};
-
-/**
- * The second primary implementation of {@link Modifier}, this one consuming a {@link SimpleFormatter}
- * pattern.
- */
-class U_I18N_API SimpleModifier : public Modifier, public UMemory {
- public:
- SimpleModifier(const SimpleFormatter &simpleFormatter, Field field, bool strong);
-
- SimpleModifier(const SimpleFormatter &simpleFormatter, Field field, bool strong,
- const Modifier::Parameters parameters);
-
- // Default constructor for LongNameHandler.h
- SimpleModifier();
-
- int32_t apply(NumberStringBuilder &output, int32_t leftIndex, int32_t rightIndex,
- UErrorCode &status) const U_OVERRIDE;
-
- int32_t getPrefixLength() const U_OVERRIDE;
-
- int32_t getCodePointCount() const U_OVERRIDE;
-
- bool isStrong() const U_OVERRIDE;
-
- bool containsField(UNumberFormatFields field) const U_OVERRIDE;
-
- void getParameters(Parameters& output) const U_OVERRIDE;
-
- bool semanticallyEquivalent(const Modifier& other) const U_OVERRIDE;
-
- /**
- * TODO: This belongs in SimpleFormatterImpl. The only reason I haven't moved it there yet is because
- * NumberStringBuilder is an internal class and SimpleFormatterImpl feels like it should not depend on it.
- *
- * <p>
- * Formats a value that is already stored inside the StringBuilder <code>result</code> between the indices
- * <code>startIndex</code> and <code>endIndex</code> by inserting characters before the start index and after the
- * end index.
- *
- * <p>
- * This is well-defined only for patterns with exactly one argument.
- *
- * @param result
- * The StringBuilder containing the value argument.
- * @param startIndex
- * The left index of the value within the string builder.
- * @param endIndex
- * The right index of the value within the string builder.
- * @return The number of characters (UTF-16 code points) that were added to the StringBuilder.
- */
- int32_t
- formatAsPrefixSuffix(NumberStringBuilder& result, int32_t startIndex, int32_t endIndex, Field field,
- UErrorCode& status) const;
-
- /**
- * TODO: Like above, this belongs with the rest of the SimpleFormatterImpl code.
- * I put it here so that the SimpleFormatter uses in NumberStringBuilder are near each other.
- *
- * <p>
- * Applies the compiled two-argument pattern to the NumberStringBuilder.
- *
- * <p>
- * This method is optimized for the case where the prefix and suffix are often empty, such as
- * in the range pattern like "{0}-{1}".
- */
- static int32_t
- formatTwoArgPattern(const SimpleFormatter& compiled, NumberStringBuilder& result,
- int32_t index, int32_t* outPrefixLength, int32_t* outSuffixLength,
- Field field, UErrorCode& status);
-
- private:
- UnicodeString fCompiledPattern;
- Field fField;
- bool fStrong = false;
- int32_t fPrefixLength = 0;
- int32_t fSuffixOffset = -1;
- int32_t fSuffixLength = 0;
- Modifier::Parameters fParameters;
-};
-
-/**
- * An implementation of {@link Modifier} that allows for multiple types of fields in the same modifier. Constructed
- * based on the contents of two {@link NumberStringBuilder} instances (one for the prefix, one for the suffix).
- */
-class U_I18N_API ConstantMultiFieldModifier : public Modifier, public UMemory {
- public:
- ConstantMultiFieldModifier(
- const NumberStringBuilder &prefix,
- const NumberStringBuilder &suffix,
- bool overwrite,
- bool strong,
- const Modifier::Parameters parameters)
- : fPrefix(prefix),
- fSuffix(suffix),
- fOverwrite(overwrite),
- fStrong(strong),
- fParameters(parameters) {}
-
- ConstantMultiFieldModifier(
- const NumberStringBuilder &prefix,
- const NumberStringBuilder &suffix,
- bool overwrite,
- bool strong)
- : fPrefix(prefix),
- fSuffix(suffix),
- fOverwrite(overwrite),
- fStrong(strong) {}
-
- int32_t apply(NumberStringBuilder &output, int32_t leftIndex, int32_t rightIndex,
- UErrorCode &status) const U_OVERRIDE;
-
- int32_t getPrefixLength() const U_OVERRIDE;
-
- int32_t getCodePointCount() const U_OVERRIDE;
-
- bool isStrong() const U_OVERRIDE;
-
- bool containsField(UNumberFormatFields field) const U_OVERRIDE;
-
- void getParameters(Parameters& output) const U_OVERRIDE;
-
- bool semanticallyEquivalent(const Modifier& other) const U_OVERRIDE;
-
- protected:
- // NOTE: In Java, these are stored as array pointers. In C++, the NumberStringBuilder is stored by
- // value and is treated internally as immutable.
- NumberStringBuilder fPrefix;
- NumberStringBuilder fSuffix;
- bool fOverwrite;
- bool fStrong;
- Modifier::Parameters fParameters;
-};
-
-/** Identical to {@link ConstantMultiFieldModifier}, but supports currency spacing. */
-class U_I18N_API CurrencySpacingEnabledModifier : public ConstantMultiFieldModifier {
- public:
- /** Safe code path */
- CurrencySpacingEnabledModifier(
- const NumberStringBuilder &prefix,
- const NumberStringBuilder &suffix,
- bool overwrite,
- bool strong,
- const DecimalFormatSymbols &symbols,
- UErrorCode &status);
-
- int32_t apply(NumberStringBuilder &output, int32_t leftIndex, int32_t rightIndex,
- UErrorCode &status) const U_OVERRIDE;
-
- /** Unsafe code path */
- static int32_t
- applyCurrencySpacing(NumberStringBuilder &output, int32_t prefixStart, int32_t prefixLen,
- int32_t suffixStart, int32_t suffixLen, const DecimalFormatSymbols &symbols,
- UErrorCode &status);
-
- private:
- UnicodeSet fAfterPrefixUnicodeSet;
- UnicodeString fAfterPrefixInsert;
- UnicodeSet fBeforeSuffixUnicodeSet;
- UnicodeString fBeforeSuffixInsert;
-
- enum EAffix {
- PREFIX, SUFFIX
- };
-
- enum EPosition {
- IN_CURRENCY, IN_NUMBER
- };
-
- /** Unsafe code path */
- static int32_t applyCurrencySpacingAffix(NumberStringBuilder &output, int32_t index, EAffix affix,
- const DecimalFormatSymbols &symbols, UErrorCode &status);
-
- static UnicodeSet
- getUnicodeSet(const DecimalFormatSymbols &symbols, EPosition position, EAffix affix,
- UErrorCode &status);
-
- static UnicodeString
- getInsertString(const DecimalFormatSymbols &symbols, EAffix affix, UErrorCode &status);
-};
-
-/** A Modifier that does not do anything. */
-class U_I18N_API EmptyModifier : public Modifier, public UMemory {
- public:
- explicit EmptyModifier(bool isStrong) : fStrong(isStrong) {}
-
- int32_t apply(NumberStringBuilder &output, int32_t leftIndex, int32_t rightIndex,
- UErrorCode &status) const U_OVERRIDE {
- (void)output;
- (void)leftIndex;
- (void)rightIndex;
- (void)status;
- return 0;
- }
-
- int32_t getPrefixLength() const U_OVERRIDE {
- return 0;
- }
-
- int32_t getCodePointCount() const U_OVERRIDE {
- return 0;
- }
-
- bool isStrong() const U_OVERRIDE {
- return fStrong;
- }
-
- bool containsField(UNumberFormatFields field) const U_OVERRIDE {
- (void)field;
- return false;
- }
-
- void getParameters(Parameters& output) const U_OVERRIDE {
- output.obj = nullptr;
- }
-
- bool semanticallyEquivalent(const Modifier& other) const U_OVERRIDE {
- return other.getCodePointCount() == 0;
- }
-
- private:
- bool fStrong;
-};
-
-/**
- * This implementation of ModifierStore adopts Modifer pointers.
- */
-class U_I18N_API AdoptingModifierStore : public ModifierStore, public UMemory {
- public:
- virtual ~AdoptingModifierStore();
-
- static constexpr StandardPlural::Form DEFAULT_STANDARD_PLURAL = StandardPlural::OTHER;
-
- AdoptingModifierStore() = default;
-
- // No copying!
- AdoptingModifierStore(const AdoptingModifierStore &other) = delete;
-
- /**
- * Sets the Modifier with the specified signum and plural form.
- */
- void adoptModifier(int8_t signum, StandardPlural::Form plural, const Modifier *mod) {
- U_ASSERT(mods[getModIndex(signum, plural)] == nullptr);
- mods[getModIndex(signum, plural)] = mod;
- }
-
- /**
- * Sets the Modifier with the specified signum.
- * The modifier will apply to all plural forms.
- */
- void adoptModifierWithoutPlural(int8_t signum, const Modifier *mod) {
- U_ASSERT(mods[getModIndex(signum, DEFAULT_STANDARD_PLURAL)] == nullptr);
- mods[getModIndex(signum, DEFAULT_STANDARD_PLURAL)] = mod;
- }
-
- /** Returns a reference to the modifier; no ownership change. */
- const Modifier *getModifier(int8_t signum, StandardPlural::Form plural) const U_OVERRIDE {
- const Modifier* modifier = mods[getModIndex(signum, plural)];
- if (modifier == nullptr && plural != DEFAULT_STANDARD_PLURAL) {
- modifier = mods[getModIndex(signum, DEFAULT_STANDARD_PLURAL)];
- }
- return modifier;
- }
-
- /** Returns a reference to the modifier; no ownership change. */
- const Modifier *getModifierWithoutPlural(int8_t signum) const {
- return mods[getModIndex(signum, DEFAULT_STANDARD_PLURAL)];
- }
-
- private:
- // NOTE: mods is zero-initialized (to nullptr)
- const Modifier *mods[3 * StandardPlural::COUNT] = {};
-
- inline static int32_t getModIndex(int8_t signum, StandardPlural::Form plural) {
- U_ASSERT(signum >= -1 && signum <= 1);
- U_ASSERT(plural >= 0 && plural < StandardPlural::COUNT);
- return static_cast<int32_t>(plural) * 3 + (signum + 1);
- }
-};
-
-} // namespace impl
-} // namespace number
-U_NAMESPACE_END
-
-
-#endif //__NUMBER_MODIFIERS_H__
-
-#endif /* #if !UCONFIG_NO_FORMATTING */