summaryrefslogtreecommitdiff
path: root/deps/node/deps/icu-small/source/i18n/number_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/icu-small/source/i18n/number_types.h')
-rw-r--r--deps/node/deps/icu-small/source/i18n/number_types.h355
1 files changed, 0 insertions, 355 deletions
diff --git a/deps/node/deps/icu-small/source/i18n/number_types.h b/deps/node/deps/icu-small/source/i18n/number_types.h
deleted file mode 100644
index 00a68188..00000000
--- a/deps/node/deps/icu-small/source/i18n/number_types.h
+++ /dev/null
@@ -1,355 +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_TYPES_H__
-#define __NUMBER_TYPES_H__
-
-#include <cstdint>
-#include "unicode/decimfmt.h"
-#include "unicode/unum.h"
-#include "unicode/numsys.h"
-#include "unicode/numberformatter.h"
-#include "unicode/utf16.h"
-#include "uassert.h"
-#include "unicode/platform.h"
-#include "unicode/uniset.h"
-#include "standardplural.h"
-
-U_NAMESPACE_BEGIN namespace number {
-namespace impl {
-
-// Typedef several enums for brevity and for easier comparison to Java.
-
-typedef UNumberFormatFields Field;
-
-typedef UNumberFormatRoundingMode RoundingMode;
-
-typedef UNumberFormatPadPosition PadPosition;
-
-typedef UNumberCompactStyle CompactStyle;
-
-// ICU4J Equivalent: RoundingUtils.MAX_INT_FRAC_SIG
-static constexpr int32_t kMaxIntFracSig = 999;
-
-// ICU4J Equivalent: RoundingUtils.DEFAULT_ROUNDING_MODE
-static constexpr RoundingMode kDefaultMode = RoundingMode::UNUM_FOUND_HALFEVEN;
-
-// ICU4J Equivalent: Padder.FALLBACK_PADDING_STRING
-static constexpr char16_t kFallbackPaddingString[] = u" ";
-
-// Forward declarations:
-
-class Modifier;
-class MutablePatternModifier;
-class DecimalQuantity;
-class NumberStringBuilder;
-class ModifierStore;
-struct MicroProps;
-
-
-enum AffixPatternType {
- // Represents a literal character; the value is stored in the code point field.
- TYPE_CODEPOINT = 0,
-
- // Represents a minus sign symbol '-'.
- TYPE_MINUS_SIGN = -1,
-
- // Represents a plus sign symbol '+'.
- TYPE_PLUS_SIGN = -2,
-
- // Represents a percent sign symbol '%'.
- TYPE_PERCENT = -3,
-
- // Represents a permille sign symbol '‰'.
- TYPE_PERMILLE = -4,
-
- // Represents a single currency symbol '¤'.
- TYPE_CURRENCY_SINGLE = -5,
-
- // Represents a double currency symbol '¤¤'.
- TYPE_CURRENCY_DOUBLE = -6,
-
- // Represents a triple currency symbol '¤¤¤'.
- TYPE_CURRENCY_TRIPLE = -7,
-
- // Represents a quadruple currency symbol '¤¤¤¤'.
- TYPE_CURRENCY_QUAD = -8,
-
- // Represents a quintuple currency symbol '¤¤¤¤¤'.
- TYPE_CURRENCY_QUINT = -9,
-
- // Represents a sequence of six or more currency symbols.
- TYPE_CURRENCY_OVERFLOW = -15
-};
-
-enum CompactType {
- TYPE_DECIMAL, TYPE_CURRENCY
-};
-
-
-class U_I18N_API AffixPatternProvider {
- public:
- static const int32_t AFFIX_PLURAL_MASK = 0xff;
- static const int32_t AFFIX_PREFIX = 0x100;
- static const int32_t AFFIX_NEGATIVE_SUBPATTERN = 0x200;
- static const int32_t AFFIX_PADDING = 0x400;
-
- // Convenience compound flags
- static const int32_t AFFIX_POS_PREFIX = AFFIX_PREFIX;
- static const int32_t AFFIX_POS_SUFFIX = 0;
- static const int32_t AFFIX_NEG_PREFIX = AFFIX_PREFIX | AFFIX_NEGATIVE_SUBPATTERN;
- static const int32_t AFFIX_NEG_SUFFIX = AFFIX_NEGATIVE_SUBPATTERN;
-
- virtual ~AffixPatternProvider();
-
- virtual char16_t charAt(int flags, int i) const = 0;
-
- virtual int length(int flags) const = 0;
-
- virtual UnicodeString getString(int flags) const = 0;
-
- virtual bool hasCurrencySign() const = 0;
-
- virtual bool positiveHasPlusSign() const = 0;
-
- virtual bool hasNegativeSubpattern() const = 0;
-
- virtual bool negativeHasMinusSign() const = 0;
-
- virtual bool containsSymbolType(AffixPatternType, UErrorCode&) const = 0;
-
- /**
- * True if the pattern has a number placeholder like "0" or "#,##0.00"; false if the pattern does not
- * have one. This is used in cases like compact notation, where the pattern replaces the entire
- * number instead of rendering the number.
- */
- virtual bool hasBody() const = 0;
-};
-
-
-/**
- * A Modifier is an object that can be passed through the formatting pipeline until it is finally applied to the string
- * builder. A Modifier usually contains a prefix and a suffix that are applied, but it could contain something else,
- * like a {@link com.ibm.icu.text.SimpleFormatter} pattern.
- *
- * A Modifier is usually immutable, except in cases such as {@link MutablePatternModifier}, which are mutable for performance
- * reasons.
- *
- * Exported as U_I18N_API because it is a base class for other exported types
- */
-class U_I18N_API Modifier {
- public:
- virtual ~Modifier();
-
- /**
- * Apply this Modifier to the string builder.
- *
- * @param output
- * The string builder to which to apply this modifier.
- * @param leftIndex
- * The left index of the string within the builder. Equal to 0 when only one number is being formatted.
- * @param rightIndex
- * The right index of the string within the string builder. Equal to length when only one number is being
- * formatted.
- * @return The number of characters (UTF-16 code units) that were added to the string builder.
- */
- virtual int32_t apply(NumberStringBuilder& output, int leftIndex, int rightIndex,
- UErrorCode& status) const = 0;
-
- /**
- * Gets the length of the prefix. This information can be used in combination with {@link #apply} to extract the
- * prefix and suffix strings.
- *
- * @return The number of characters (UTF-16 code units) in the prefix.
- */
- virtual int32_t getPrefixLength() const = 0;
-
- /**
- * Returns the number of code points in the modifier, prefix plus suffix.
- */
- virtual int32_t getCodePointCount() const = 0;
-
- /**
- * Whether this modifier is strong. If a modifier is strong, it should always be applied immediately and not allowed
- * to bubble up. With regard to padding, strong modifiers are considered to be on the inside of the prefix and
- * suffix.
- *
- * @return Whether the modifier is strong.
- */
- virtual bool isStrong() const = 0;
-
- /**
- * Whether the modifier contains at least one occurrence of the given field.
- */
- virtual bool containsField(UNumberFormatFields field) const = 0;
-
- /**
- * A fill-in for getParameters(). obj will always be set; if non-null, the other
- * two fields are also safe to read.
- */
- struct U_I18N_API Parameters {
- const ModifierStore* obj = nullptr;
- int8_t signum;
- StandardPlural::Form plural;
-
- Parameters();
- Parameters(const ModifierStore* _obj, int8_t _signum, StandardPlural::Form _plural);
- };
-
- /**
- * Gets a set of "parameters" for this Modifier.
- *
- * TODO: Make this return a `const Parameters*` more like Java?
- */
- virtual void getParameters(Parameters& output) const = 0;
-
- /**
- * Returns whether this Modifier is *semantically equivalent* to the other Modifier;
- * in many cases, this is the same as equal, but parameters should be ignored.
- */
- virtual bool semanticallyEquivalent(const Modifier& other) const = 0;
-};
-
-
-/**
- * This is *not* a modifier; rather, it is an object that can return modifiers
- * based on given parameters.
- *
- * Exported as U_I18N_API because it is a base class for other exported types.
- */
-class U_I18N_API ModifierStore {
- public:
- virtual ~ModifierStore();
-
- /**
- * Returns a Modifier with the given parameters (best-effort).
- */
- virtual const Modifier* getModifier(int8_t signum, StandardPlural::Form plural) const = 0;
-};
-
-
-/**
- * This interface is used when all number formatting settings, including the locale, are known, except for the quantity
- * itself. The {@link #processQuantity} method performs the final step in the number processing pipeline: it uses the
- * quantity to generate a finalized {@link MicroProps}, which can be used to render the number to output.
- *
- * <p>
- * In other words, this interface is used for the parts of number processing that are <em>quantity-dependent</em>.
- *
- * <p>
- * In order to allow for multiple different objects to all mutate the same MicroProps, a "chain" of MicroPropsGenerators
- * are linked together, and each one is responsible for manipulating a certain quantity-dependent part of the
- * MicroProps. At the tail of the linked list is a base instance of {@link MicroProps} with properties that are not
- * quantity-dependent. Each element in the linked list calls {@link #processQuantity} on its "parent", then does its
- * work, and then returns the result.
- *
- * Exported as U_I18N_API because it is a base class for other exported types
- *
- */
-class U_I18N_API MicroPropsGenerator {
- public:
- virtual ~MicroPropsGenerator();
-
- /**
- * Considers the given {@link DecimalQuantity}, optionally mutates it, and returns a {@link MicroProps}.
- *
- * @param quantity
- * The quantity for consideration and optional mutation.
- * @param micros
- * The MicroProps instance to populate.
- * @return A MicroProps instance resolved for the quantity.
- */
- virtual void processQuantity(DecimalQuantity& quantity, MicroProps& micros,
- UErrorCode& status) const = 0;
-};
-
-/**
- * An interface used by compact notation and scientific notation to choose a multiplier while rounding.
- */
-class MultiplierProducer {
- public:
- virtual ~MultiplierProducer();
-
- /**
- * Maps a magnitude to a multiplier in powers of ten. For example, in compact notation in English, a magnitude of 5
- * (e.g., 100,000) should return a multiplier of -3, since the number is displayed in thousands.
- *
- * @param magnitude
- * The power of ten of the input number.
- * @return The shift in powers of ten.
- */
- virtual int32_t getMultiplier(int32_t magnitude) const = 0;
-};
-
-// Exported as U_I18N_API because it is a public member field of exported DecimalFormatProperties
-template<typename T>
-class U_I18N_API NullableValue {
- public:
- NullableValue()
- : fNull(true) {}
-
- NullableValue(const NullableValue<T>& other) = default;
-
- explicit NullableValue(const T& other) {
- fValue = other;
- fNull = false;
- }
-
- NullableValue<T>& operator=(const NullableValue<T>& other) {
- fNull = other.fNull;
- if (!fNull) {
- fValue = other.fValue;
- }
- return *this;
- }
-
- NullableValue<T>& operator=(const T& other) {
- fValue = other;
- fNull = false;
- return *this;
- }
-
- bool operator==(const NullableValue& other) const {
- // "fValue == other.fValue" returns UBool, not bool (causes compiler warnings)
- return fNull ? other.fNull : (other.fNull ? false : static_cast<bool>(fValue == other.fValue));
- }
-
- void nullify() {
- // TODO: It might be nice to call the destructor here.
- fNull = true;
- }
-
- bool isNull() const {
- return fNull;
- }
-
- T get(UErrorCode& status) const {
- if (fNull) {
- status = U_UNDEFINED_VARIABLE;
- }
- return fValue;
- }
-
- T getNoError() const {
- return fValue;
- }
-
- T getOrDefault(T defaultValue) const {
- return fNull ? defaultValue : fValue;
- }
-
- private:
- bool fNull;
- T fValue;
-};
-
-} // namespace impl
-} // namespace number
-U_NAMESPACE_END
-
-#endif //__NUMBER_TYPES_H__
-
-#endif /* #if !UCONFIG_NO_FORMATTING */