Linux tsuru-no-tsurugi 5.15.0-186-generic #196-Ubuntu SMP Sat Jun 20 16:09:34 UTC 2026 x86_64
Apache/2.4.52 (Ubuntu)
Server IP : 192.168.0.18 & Your IP : 216.73.217.105
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
include /
unicode /
Delete
Unzip
Name
Size
Permission
Date
Action
alphaindex.h
26.52
KB
-rw-r--r--
2021-11-04 15:01
appendable.h
8.53
KB
-rw-r--r--
2021-11-04 15:01
basictz.h
9.92
KB
-rw-r--r--
2021-11-04 15:01
brkiter.h
27.81
KB
-rw-r--r--
2021-11-04 15:01
bytestream.h
10.75
KB
-rw-r--r--
2021-11-04 15:01
bytestrie.h
20.77
KB
-rw-r--r--
2021-11-04 15:01
bytestriebuilder.h
7.46
KB
-rw-r--r--
2021-11-04 15:01
calendar.h
105.88
KB
-rw-r--r--
2021-11-04 15:01
caniter.h
7.44
KB
-rw-r--r--
2021-11-04 15:01
casemap.h
25.33
KB
-rw-r--r--
2021-11-04 15:01
char16ptr.h
7.22
KB
-rw-r--r--
2021-11-04 15:01
chariter.h
24.06
KB
-rw-r--r--
2021-11-04 15:01
choicfmt.h
23.97
KB
-rw-r--r--
2021-11-04 15:01
coleitr.h
13.77
KB
-rw-r--r--
2021-11-04 15:01
coll.h
56.26
KB
-rw-r--r--
2021-11-04 15:01
compactdecimalformat.h
6.88
KB
-rw-r--r--
2021-11-04 15:01
curramt.h
3.78
KB
-rw-r--r--
2021-11-04 15:01
currpinf.h
7.3
KB
-rw-r--r--
2021-11-04 15:01
currunit.h
4.02
KB
-rw-r--r--
2021-11-04 15:01
datefmt.h
40.71
KB
-rw-r--r--
2021-11-04 15:01
dbbi.h
1.19
KB
-rw-r--r--
2021-11-04 15:01
dcfmtsym.h
20.61
KB
-rw-r--r--
2021-11-04 15:01
decimfmt.h
87.57
KB
-rw-r--r--
2021-11-04 15:01
docmain.h
7.21
KB
-rw-r--r--
2021-11-04 15:01
dtfmtsym.h
38.21
KB
-rw-r--r--
2021-11-04 15:01
dtintrv.h
3.84
KB
-rw-r--r--
2021-11-04 15:01
dtitvfmt.h
49.27
KB
-rw-r--r--
2021-11-04 15:01
dtitvinf.h
18.63
KB
-rw-r--r--
2021-11-04 15:01
dtptngen.h
26.07
KB
-rw-r--r--
2021-11-04 15:01
dtrule.h
8.69
KB
-rw-r--r--
2021-11-04 15:01
edits.h
20.74
KB
-rw-r--r--
2021-11-04 15:01
enumset.h
2.08
KB
-rw-r--r--
2021-11-04 15:01
errorcode.h
4.84
KB
-rw-r--r--
2021-11-04 15:01
fieldpos.h
8.7
KB
-rw-r--r--
2021-11-04 15:01
filteredbrk.h
5.37
KB
-rw-r--r--
2021-11-04 15:01
fmtable.h
24.43
KB
-rw-r--r--
2021-11-04 15:01
format.h
12.5
KB
-rw-r--r--
2021-11-04 15:01
formattedvalue.h
9.75
KB
-rw-r--r--
2021-11-04 15:01
fpositer.h
3.03
KB
-rw-r--r--
2021-11-04 15:01
gender.h
3.33
KB
-rw-r--r--
2021-11-04 15:01
gregocal.h
31.88
KB
-rw-r--r--
2021-11-04 15:01
icudataver.h
1.02
KB
-rw-r--r--
2021-11-04 15:01
icuplug.h
11.83
KB
-rw-r--r--
2021-11-04 15:01
idna.h
12.7
KB
-rw-r--r--
2021-11-04 15:01
listformatter.h
8.79
KB
-rw-r--r--
2021-11-04 15:01
localebuilder.h
11.08
KB
-rw-r--r--
2021-11-04 15:01
localematcher.h
26.82
KB
-rw-r--r--
2021-11-04 15:01
localpointer.h
19.36
KB
-rw-r--r--
2021-11-04 15:01
locdspnm.h
7.12
KB
-rw-r--r--
2021-11-04 15:01
locid.h
47.66
KB
-rw-r--r--
2021-11-04 15:01
measfmt.h
11.42
KB
-rw-r--r--
2021-11-04 15:01
measunit.h
105.09
KB
-rw-r--r--
2021-11-04 15:01
measure.h
4.33
KB
-rw-r--r--
2021-11-04 15:01
messagepattern.h
33.71
KB
-rw-r--r--
2021-11-04 15:01
msgfmt.h
44.22
KB
-rw-r--r--
2021-11-04 15:01
normalizer2.h
33.66
KB
-rw-r--r--
2021-11-04 15:01
normlzr.h
30.95
KB
-rw-r--r--
2021-11-04 15:01
nounit.h
2.25
KB
-rw-r--r--
2021-11-04 15:01
numberformatter.h
92.29
KB
-rw-r--r--
2021-11-04 15:01
numberrangeformatter.h
25.19
KB
-rw-r--r--
2021-11-04 15:01
numfmt.h
49.84
KB
-rw-r--r--
2021-11-04 15:01
numsys.h
7.33
KB
-rw-r--r--
2021-11-04 15:01
parseerr.h
3.08
KB
-rw-r--r--
2021-11-04 15:01
parsepos.h
5.57
KB
-rw-r--r--
2021-11-04 15:01
platform.h
28.09
KB
-rw-r--r--
2021-11-04 15:01
plurfmt.h
25.24
KB
-rw-r--r--
2021-11-04 15:01
plurrule.h
20.82
KB
-rw-r--r--
2021-11-04 15:01
ptypes.h
3.49
KB
-rw-r--r--
2021-11-04 15:01
putil.h
6.32
KB
-rw-r--r--
2021-11-04 15:01
rbbi.h
27.75
KB
-rw-r--r--
2021-11-04 15:01
rbnf.h
48.85
KB
-rw-r--r--
2021-11-04 15:01
rbtz.h
15.83
KB
-rw-r--r--
2021-11-04 15:01
regex.h
84.36
KB
-rw-r--r--
2021-11-04 15:01
region.h
9.18
KB
-rw-r--r--
2021-11-04 15:01
reldatefmt.h
22.22
KB
-rw-r--r--
2021-11-04 15:01
rep.h
9.37
KB
-rw-r--r--
2021-11-04 15:01
resbund.h
18.08
KB
-rw-r--r--
2021-11-04 15:01
schriter.h
6.36
KB
-rw-r--r--
2021-11-04 15:01
scientificnumberformatter.h
6.43
KB
-rw-r--r--
2021-11-04 15:01
search.h
22.22
KB
-rw-r--r--
2021-11-04 15:01
selfmt.h
14.34
KB
-rw-r--r--
2021-11-04 15:01
simpleformatter.h
12.59
KB
-rw-r--r--
2021-11-04 15:01
simpletz.h
45.7
KB
-rw-r--r--
2021-11-04 15:01
smpdtfmt.h
71.07
KB
-rw-r--r--
2021-11-04 15:01
sortkey.h
11.18
KB
-rw-r--r--
2021-11-04 15:01
std_string.h
1.05
KB
-rw-r--r--
2021-11-04 15:01
strenum.h
9.92
KB
-rw-r--r--
2021-11-04 15:01
stringoptions.h
5.79
KB
-rw-r--r--
2021-11-04 15:01
stringpiece.h
10.05
KB
-rw-r--r--
2021-11-04 15:01
stringtriebuilder.h
15.47
KB
-rw-r--r--
2021-11-04 15:01
stsearch.h
21.41
KB
-rw-r--r--
2021-11-04 15:01
symtable.h
4.27
KB
-rw-r--r--
2021-11-04 15:01
tblcoll.h
36.92
KB
-rw-r--r--
2021-11-04 15:01
timezone.h
43.81
KB
-rw-r--r--
2021-11-04 15:01
tmunit.h
3.4
KB
-rw-r--r--
2021-11-04 15:01
tmutamt.h
4.91
KB
-rw-r--r--
2021-11-04 15:01
tmutfmt.h
7.42
KB
-rw-r--r--
2021-11-04 15:01
translit.h
65.82
KB
-rw-r--r--
2021-11-04 15:01
tzfmt.h
42.93
KB
-rw-r--r--
2021-11-04 15:01
tznames.h
16.85
KB
-rw-r--r--
2021-11-04 15:01
tzrule.h
35.6
KB
-rw-r--r--
2021-11-04 15:01
tztrans.h
6.13
KB
-rw-r--r--
2021-11-04 15:01
ubidi.h
89.61
KB
-rw-r--r--
2021-11-04 15:01
ubiditransform.h
12.7
KB
-rw-r--r--
2021-11-04 15:01
ubrk.h
24.46
KB
-rw-r--r--
2021-11-04 15:01
ucal.h
61
KB
-rw-r--r--
2021-11-04 15:01
ucasemap.h
15.21
KB
-rw-r--r--
2021-11-04 15:01
ucat.h
5.35
KB
-rw-r--r--
2021-11-04 15:01
uchar.h
144.64
KB
-rw-r--r--
2021-11-04 15:01
ucharstrie.h
22.53
KB
-rw-r--r--
2021-11-04 15:01
ucharstriebuilder.h
7.47
KB
-rw-r--r--
2021-11-04 15:01
uchriter.h
13.42
KB
-rw-r--r--
2021-11-04 15:01
uclean.h
11.2
KB
-rw-r--r--
2021-11-04 15:01
ucnv.h
83.06
KB
-rw-r--r--
2021-11-04 15:01
ucnv_cb.h
6.58
KB
-rw-r--r--
2021-11-04 15:01
ucnv_err.h
20.98
KB
-rw-r--r--
2021-11-04 15:01
ucnvsel.h
6.19
KB
-rw-r--r--
2021-11-04 15:01
ucol.h
61.51
KB
-rw-r--r--
2021-11-04 15:01
ucoleitr.h
9.82
KB
-rw-r--r--
2021-11-04 15:01
uconfig.h
12.07
KB
-rw-r--r--
2021-11-04 15:01
ucpmap.h
5.53
KB
-rw-r--r--
2021-11-04 15:01
ucptrie.h
22.5
KB
-rw-r--r--
2021-11-04 15:01
ucsdet.h
14.69
KB
-rw-r--r--
2021-11-04 15:01
ucurr.h
16.72
KB
-rw-r--r--
2021-11-04 15:01
udat.h
62.4
KB
-rw-r--r--
2021-11-04 15:01
udata.h
15.63
KB
-rw-r--r--
2021-11-04 15:01
udateintervalformat.h
11.93
KB
-rw-r--r--
2021-11-04 15:01
udatpg.h
26.76
KB
-rw-r--r--
2021-11-04 15:01
udisplaycontext.h
5.94
KB
-rw-r--r--
2021-11-04 15:01
uenum.h
7.79
KB
-rw-r--r--
2021-11-04 15:01
ufieldpositer.h
4.41
KB
-rw-r--r--
2021-11-04 15:01
uformattable.h
10.97
KB
-rw-r--r--
2021-11-04 15:01
uformattedvalue.h
12.3
KB
-rw-r--r--
2021-11-04 15:01
ugender.h
2.06
KB
-rw-r--r--
2021-11-04 15:01
uidna.h
33.43
KB
-rw-r--r--
2021-11-04 15:01
uiter.h
22.75
KB
-rw-r--r--
2021-11-04 15:01
uldnames.h
10.48
KB
-rw-r--r--
2021-11-04 15:01
ulistformatter.h
10.78
KB
-rw-r--r--
2021-11-04 15:01
uloc.h
54.63
KB
-rw-r--r--
2021-11-04 15:01
ulocdata.h
11.3
KB
-rw-r--r--
2021-11-04 15:01
umachine.h
16.05
KB
-rw-r--r--
2021-11-04 15:01
umisc.h
1.33
KB
-rw-r--r--
2021-11-04 15:01
umsg.h
24.25
KB
-rw-r--r--
2021-11-04 15:01
umutablecptrie.h
8.29
KB
-rw-r--r--
2021-11-04 15:01
unifilt.h
4
KB
-rw-r--r--
2021-11-04 15:01
unifunct.h
4.05
KB
-rw-r--r--
2021-11-04 15:01
unimatch.h
6.1
KB
-rw-r--r--
2021-11-04 15:01
unirepl.h
3.38
KB
-rw-r--r--
2021-11-04 15:01
uniset.h
66.51
KB
-rw-r--r--
2021-11-04 15:01
unistr.h
170.53
KB
-rw-r--r--
2021-11-04 15:01
unorm.h
20.55
KB
-rw-r--r--
2021-11-04 15:01
unorm2.h
24.68
KB
-rw-r--r--
2021-11-04 15:01
unum.h
54.95
KB
-rw-r--r--
2021-11-04 15:01
unumberformatter.h
30.45
KB
-rw-r--r--
2021-11-04 15:01
unumberrangeformatter.h
15.37
KB
-rw-r--r--
2021-11-04 15:01
unumsys.h
7.26
KB
-rw-r--r--
2021-11-04 15:01
uobject.h
10.68
KB
-rw-r--r--
2021-11-04 15:01
upluralrules.h
8.79
KB
-rw-r--r--
2021-11-04 15:01
uregex.h
71.99
KB
-rw-r--r--
2021-11-04 15:01
uregion.h
9.81
KB
-rw-r--r--
2021-11-04 15:01
ureldatefmt.h
17.04
KB
-rw-r--r--
2021-11-04 15:01
urename.h
134.62
KB
-rw-r--r--
2021-11-04 15:01
urep.h
5.38
KB
-rw-r--r--
2021-11-04 15:01
ures.h
36.54
KB
-rw-r--r--
2021-11-04 15:01
uscript.h
27.63
KB
-rw-r--r--
2021-11-04 15:01
usearch.h
39.21
KB
-rw-r--r--
2021-11-04 15:01
uset.h
44.44
KB
-rw-r--r--
2021-11-04 15:01
usetiter.h
9.68
KB
-rw-r--r--
2021-11-04 15:01
ushape.h
18
KB
-rw-r--r--
2021-11-04 15:01
uspoof.h
65.84
KB
-rw-r--r--
2021-11-04 15:01
usprep.h
8.19
KB
-rw-r--r--
2021-11-04 15:01
ustdio.h
38.56
KB
-rw-r--r--
2021-11-04 15:01
ustream.h
1.89
KB
-rw-r--r--
2021-11-04 15:01
ustring.h
72.36
KB
-rw-r--r--
2021-11-04 15:01
ustringtrie.h
3.15
KB
-rw-r--r--
2021-11-04 15:01
utext.h
58.08
KB
-rw-r--r--
2021-11-04 15:01
utf.h
7.87
KB
-rw-r--r--
2021-11-04 15:01
utf16.h
23.35
KB
-rw-r--r--
2021-11-04 15:01
utf32.h
763
B
-rw-r--r--
2021-11-04 15:01
utf8.h
30.83
KB
-rw-r--r--
2021-11-04 15:01
utf_old.h
45.83
KB
-rw-r--r--
2021-11-04 15:01
utmscale.h
13.78
KB
-rw-r--r--
2021-11-04 15:01
utrace.h
17.18
KB
-rw-r--r--
2021-11-04 15:01
utrans.h
25.54
KB
-rw-r--r--
2021-11-04 15:01
utypes.h
31.06
KB
-rw-r--r--
2021-11-04 15:01
uvernum.h
6.68
KB
-rw-r--r--
2021-11-04 15:01
uversion.h
5.99
KB
-rw-r--r--
2021-11-04 15:01
vtzone.h
20.8
KB
-rw-r--r--
2021-11-04 15:01
Save
Rename
// © 2018 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html #ifndef __NUMBERRANGEFORMATTER_H__ #define __NUMBERRANGEFORMATTER_H__ #include "unicode/utypes.h" #if U_SHOW_CPLUSPLUS_API #if !UCONFIG_NO_FORMATTING #include <atomic> #include "unicode/appendable.h" #include "unicode/fieldpos.h" #include "unicode/formattedvalue.h" #include "unicode/fpositer.h" #include "unicode/numberformatter.h" #include "unicode/unumberrangeformatter.h" /** * \file * \brief C++ API: Library for localized formatting of number, currency, and unit ranges. * * The main entrypoint to the formatting of ranges of numbers, including currencies and other units of measurement. * <p> * Usage example: * <p> * <pre> * NumberRangeFormatter::with() * .identityFallback(UNUM_IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUE) * .numberFormatterFirst(NumberFormatter::with().adoptUnit(MeasureUnit::createMeter())) * .numberFormatterSecond(NumberFormatter::with().adoptUnit(MeasureUnit::createKilometer())) * .locale("en-GB") * .formatFormattableRange(750, 1.2, status) * .toString(status); * // => "750 m - 1.2 km" * </pre> * <p> * Like NumberFormatter, NumberRangeFormatter instances (i.e., LocalizedNumberRangeFormatter * and UnlocalizedNumberRangeFormatter) are immutable and thread-safe. This API is based on the * <em>fluent</em> design pattern popularized by libraries such as Google's Guava. * * @author Shane Carr */ U_NAMESPACE_BEGIN // Forward declarations: class PluralRules; namespace number { // icu::number // Forward declarations: class UnlocalizedNumberRangeFormatter; class LocalizedNumberRangeFormatter; class FormattedNumberRange; namespace impl { // Forward declarations: struct RangeMacroProps; class DecimalQuantity; class UFormattedNumberRangeData; class NumberRangeFormatterImpl; struct UFormattedNumberRangeImpl; } // namespace impl /** * \cond * Export an explicit template instantiation. See datefmt.h * (When building DLLs for Windows this is required.) */ #if U_PLATFORM == U_PF_WINDOWS && !defined(U_IN_DOXYGEN) && !defined(U_STATIC_IMPLEMENTATION) } // namespace icu::number U_NAMESPACE_END template struct U_I18N_API std::atomic< U_NAMESPACE_QUALIFIER number::impl::NumberRangeFormatterImpl*>; U_NAMESPACE_BEGIN namespace number { // icu::number #endif /** \endcond */ // Other helper classes would go here, but there are none. namespace impl { // icu::number::impl // Do not enclose entire MacroProps with #ifndef U_HIDE_INTERNAL_API, needed for a protected field /** @internal */ struct U_I18N_API RangeMacroProps : public UMemory { /** @internal */ UnlocalizedNumberFormatter formatter1; // = NumberFormatter::with(); /** @internal */ UnlocalizedNumberFormatter formatter2; // = NumberFormatter::with(); /** @internal */ bool singleFormatter = true; /** @internal */ UNumberRangeCollapse collapse = UNUM_RANGE_COLLAPSE_AUTO; /** @internal */ UNumberRangeIdentityFallback identityFallback = UNUM_IDENTITY_FALLBACK_APPROXIMATELY; /** @internal */ Locale locale; // NOTE: Uses default copy and move constructors. /** * Check all members for errors. * @internal */ bool copyErrorTo(UErrorCode &status) const { return formatter1.copyErrorTo(status) || formatter2.copyErrorTo(status); } }; } // namespace impl /** * An abstract base class for specifying settings related to number formatting. This class is implemented by * {@link UnlocalizedNumberRangeFormatter} and {@link LocalizedNumberRangeFormatter}. This class is not intended for * public subclassing. */ template<typename Derived> class U_I18N_API NumberRangeFormatterSettings { public: /** * Sets the NumberFormatter instance to use for the numbers in the range. The same formatter is applied to both * sides of the range. * <p> * The NumberFormatter instances must not have a locale applied yet; the locale specified on the * NumberRangeFormatter will be used. * * @param formatter * The formatter to use for both numbers in the range. * @return The fluent chain. * @stable ICU 63 */ Derived numberFormatterBoth(const UnlocalizedNumberFormatter &formatter) const &; /** * Overload of numberFormatterBoth() for use on an rvalue reference. * * @param formatter * The formatter to use for both numbers in the range. * @return The fluent chain. * @see #numberFormatterBoth * @stable ICU 63 */ Derived numberFormatterBoth(const UnlocalizedNumberFormatter &formatter) &&; /** * Overload of numberFormatterBoth() for use on an rvalue reference. * * @param formatter * The formatter to use for both numbers in the range. * @return The fluent chain. * @see #numberFormatterBoth * @stable ICU 63 */ Derived numberFormatterBoth(UnlocalizedNumberFormatter &&formatter) const &; /** * Overload of numberFormatterBoth() for use on an rvalue reference. * * @param formatter * The formatter to use for both numbers in the range. * @return The fluent chain. * @see #numberFormatterBoth * @stable ICU 63 */ Derived numberFormatterBoth(UnlocalizedNumberFormatter &&formatter) &&; /** * Sets the NumberFormatter instance to use for the first number in the range. * <p> * The NumberFormatter instances must not have a locale applied yet; the locale specified on the * NumberRangeFormatter will be used. * * @param formatterFirst * The formatter to use for the first number in the range. * @return The fluent chain. * @stable ICU 63 */ Derived numberFormatterFirst(const UnlocalizedNumberFormatter &formatterFirst) const &; /** * Overload of numberFormatterFirst() for use on an rvalue reference. * * @param formatterFirst * The formatter to use for the first number in the range. * @return The fluent chain. * @see #numberFormatterFirst * @stable ICU 63 */ Derived numberFormatterFirst(const UnlocalizedNumberFormatter &formatterFirst) &&; /** * Overload of numberFormatterFirst() for use on an rvalue reference. * * @param formatterFirst * The formatter to use for the first number in the range. * @return The fluent chain. * @see #numberFormatterFirst * @stable ICU 63 */ Derived numberFormatterFirst(UnlocalizedNumberFormatter &&formatterFirst) const &; /** * Overload of numberFormatterFirst() for use on an rvalue reference. * * @param formatterFirst * The formatter to use for the first number in the range. * @return The fluent chain. * @see #numberFormatterFirst * @stable ICU 63 */ Derived numberFormatterFirst(UnlocalizedNumberFormatter &&formatterFirst) &&; /** * Sets the NumberFormatter instance to use for the second number in the range. * <p> * The NumberFormatter instances must not have a locale applied yet; the locale specified on the * NumberRangeFormatter will be used. * * @param formatterSecond * The formatter to use for the second number in the range. * @return The fluent chain. * @stable ICU 63 */ Derived numberFormatterSecond(const UnlocalizedNumberFormatter &formatterSecond) const &; /** * Overload of numberFormatterSecond() for use on an rvalue reference. * * @param formatterSecond * The formatter to use for the second number in the range. * @return The fluent chain. * @see #numberFormatterSecond * @stable ICU 63 */ Derived numberFormatterSecond(const UnlocalizedNumberFormatter &formatterSecond) &&; /** * Overload of numberFormatterSecond() for use on an rvalue reference. * * @param formatterSecond * The formatter to use for the second number in the range. * @return The fluent chain. * @see #numberFormatterSecond * @stable ICU 63 */ Derived numberFormatterSecond(UnlocalizedNumberFormatter &&formatterSecond) const &; /** * Overload of numberFormatterSecond() for use on an rvalue reference. * * @param formatterSecond * The formatter to use for the second number in the range. * @return The fluent chain. * @see #numberFormatterSecond * @stable ICU 63 */ Derived numberFormatterSecond(UnlocalizedNumberFormatter &&formatterSecond) &&; /** * Sets the aggressiveness of "collapsing" fields across the range separator. Possible values: * <p> * <ul> * <li>ALL: "3-5K miles"</li> * <li>UNIT: "3K - 5K miles"</li> * <li>NONE: "3K miles - 5K miles"</li> * <li>AUTO: usually UNIT or NONE, depending on the locale and formatter settings</li> * </ul> * <p> * The default value is AUTO. * * @param collapse * The collapsing strategy to use for this range. * @return The fluent chain. * @stable ICU 63 */ Derived collapse(UNumberRangeCollapse collapse) const &; /** * Overload of collapse() for use on an rvalue reference. * * @param collapse * The collapsing strategy to use for this range. * @return The fluent chain. * @see #collapse * @stable ICU 63 */ Derived collapse(UNumberRangeCollapse collapse) &&; /** * Sets the behavior when the two sides of the range are the same. This could happen if the same two numbers are * passed to the formatFormattableRange function, or if different numbers are passed to the function but they * become the same after rounding rules are applied. Possible values: * <p> * <ul> * <li>SINGLE_VALUE: "5 miles"</li> * <li>APPROXIMATELY_OR_SINGLE_VALUE: "~5 miles" or "5 miles", depending on whether the number was the same before * rounding was applied</li> * <li>APPROXIMATELY: "~5 miles"</li> * <li>RANGE: "5-5 miles" (with collapse=UNIT)</li> * </ul> * <p> * The default value is APPROXIMATELY. * * @param identityFallback * The strategy to use when formatting two numbers that end up being the same. * @return The fluent chain. * @stable ICU 63 */ Derived identityFallback(UNumberRangeIdentityFallback identityFallback) const &; /** * Overload of identityFallback() for use on an rvalue reference. * * @param identityFallback * The strategy to use when formatting two numbers that end up being the same. * @return The fluent chain. * @see #identityFallback * @stable ICU 63 */ Derived identityFallback(UNumberRangeIdentityFallback identityFallback) &&; /** * Returns the current (Un)LocalizedNumberRangeFormatter as a LocalPointer * wrapping a heap-allocated copy of the current object. * * This is equivalent to new-ing the move constructor with a value object * as the argument. * * @return A wrapped (Un)LocalizedNumberRangeFormatter pointer, or a wrapped * nullptr on failure. * @stable ICU 64 */ LocalPointer<Derived> clone() const &; /** * Overload of clone for use on an rvalue reference. * * @return A wrapped (Un)LocalizedNumberRangeFormatter pointer, or a wrapped * nullptr on failure. * @stable ICU 64 */ LocalPointer<Derived> clone() &&; /** * Sets the UErrorCode if an error occurred in the fluent chain. * Preserves older error codes in the outErrorCode. * @return true if U_FAILURE(outErrorCode) * @stable ICU 63 */ UBool copyErrorTo(UErrorCode &outErrorCode) const { if (U_FAILURE(outErrorCode)) { // Do not overwrite the older error code return true; } fMacros.copyErrorTo(outErrorCode); return U_FAILURE(outErrorCode); } // NOTE: Uses default copy and move constructors. private: impl::RangeMacroProps fMacros; // Don't construct me directly! Use (Un)LocalizedNumberFormatter. NumberRangeFormatterSettings() = default; friend class LocalizedNumberRangeFormatter; friend class UnlocalizedNumberRangeFormatter; }; /** * A NumberRangeFormatter that does not yet have a locale. In order to format, a locale must be specified. * * Instances of this class are immutable and thread-safe. * * @see NumberRangeFormatter * @stable ICU 63 */ class U_I18N_API UnlocalizedNumberRangeFormatter : public NumberRangeFormatterSettings<UnlocalizedNumberRangeFormatter>, public UMemory { public: /** * Associate the given locale with the number range formatter. The locale is used for picking the * appropriate symbols, formats, and other data for number display. * * @param locale * The locale to use when loading data for number formatting. * @return The fluent chain. * @stable ICU 63 */ LocalizedNumberRangeFormatter locale(const icu::Locale &locale) const &; /** * Overload of locale() for use on an rvalue reference. * * @param locale * The locale to use when loading data for number formatting. * @return The fluent chain. * @see #locale * @stable ICU 63 */ LocalizedNumberRangeFormatter locale(const icu::Locale &locale) &&; /** * Default constructor: puts the formatter into a valid but undefined state. * * @stable ICU 63 */ UnlocalizedNumberRangeFormatter() = default; /** * Returns a copy of this UnlocalizedNumberRangeFormatter. * @stable ICU 63 */ UnlocalizedNumberRangeFormatter(const UnlocalizedNumberRangeFormatter &other); /** * Move constructor: * The source UnlocalizedNumberRangeFormatter will be left in a valid but undefined state. * @stable ICU 63 */ UnlocalizedNumberRangeFormatter(UnlocalizedNumberRangeFormatter&& src) U_NOEXCEPT; /** * Copy assignment operator. * @stable ICU 63 */ UnlocalizedNumberRangeFormatter& operator=(const UnlocalizedNumberRangeFormatter& other); /** * Move assignment operator: * The source UnlocalizedNumberRangeFormatter will be left in a valid but undefined state. * @stable ICU 63 */ UnlocalizedNumberRangeFormatter& operator=(UnlocalizedNumberRangeFormatter&& src) U_NOEXCEPT; private: explicit UnlocalizedNumberRangeFormatter( const NumberRangeFormatterSettings<UnlocalizedNumberRangeFormatter>& other); explicit UnlocalizedNumberRangeFormatter( NumberRangeFormatterSettings<UnlocalizedNumberRangeFormatter>&& src) U_NOEXCEPT; // To give the fluent setters access to this class's constructor: friend class NumberRangeFormatterSettings<UnlocalizedNumberRangeFormatter>; // To give NumberRangeFormatter::with() access to this class's constructor: friend class NumberRangeFormatter; }; /** * A NumberRangeFormatter that has a locale associated with it; this means .formatRange() methods are available. * * Instances of this class are immutable and thread-safe. * * @see NumberFormatter * @stable ICU 63 */ class U_I18N_API LocalizedNumberRangeFormatter : public NumberRangeFormatterSettings<LocalizedNumberRangeFormatter>, public UMemory { public: /** * Format the given Formattables to a string using the settings specified in the NumberRangeFormatter fluent setting * chain. * * @param first * The first number in the range, usually to the left in LTR locales. * @param second * The second number in the range, usually to the right in LTR locales. * @param status * Set if an error occurs while formatting. * @return A FormattedNumberRange object; call .toString() to get the string. * @stable ICU 63 */ FormattedNumberRange formatFormattableRange( const Formattable& first, const Formattable& second, UErrorCode& status) const; /** * Default constructor: puts the formatter into a valid but undefined state. * * @stable ICU 63 */ LocalizedNumberRangeFormatter() = default; /** * Returns a copy of this LocalizedNumberRangeFormatter. * @stable ICU 63 */ LocalizedNumberRangeFormatter(const LocalizedNumberRangeFormatter &other); /** * Move constructor: * The source LocalizedNumberRangeFormatter will be left in a valid but undefined state. * @stable ICU 63 */ LocalizedNumberRangeFormatter(LocalizedNumberRangeFormatter&& src) U_NOEXCEPT; /** * Copy assignment operator. * @stable ICU 63 */ LocalizedNumberRangeFormatter& operator=(const LocalizedNumberRangeFormatter& other); /** * Move assignment operator: * The source LocalizedNumberRangeFormatter will be left in a valid but undefined state. * @stable ICU 63 */ LocalizedNumberRangeFormatter& operator=(LocalizedNumberRangeFormatter&& src) U_NOEXCEPT; #ifndef U_HIDE_INTERNAL_API /** * @param results * The results object. This method will mutate it to save the results. * @param equalBeforeRounding * Whether the number was equal before copying it into a DecimalQuantity. * Used for determining the identity fallback behavior. * @param status * Set if an error occurs while formatting. * @internal */ void formatImpl(impl::UFormattedNumberRangeData& results, bool equalBeforeRounding, UErrorCode& status) const; #endif /* U_HIDE_INTERNAL_API */ /** * Destruct this LocalizedNumberRangeFormatter, cleaning up any memory it might own. * @stable ICU 63 */ ~LocalizedNumberRangeFormatter(); private: std::atomic<impl::NumberRangeFormatterImpl*> fAtomicFormatter = {}; const impl::NumberRangeFormatterImpl* getFormatter(UErrorCode& stauts) const; explicit LocalizedNumberRangeFormatter( const NumberRangeFormatterSettings<LocalizedNumberRangeFormatter>& other); explicit LocalizedNumberRangeFormatter( NumberRangeFormatterSettings<LocalizedNumberRangeFormatter>&& src) U_NOEXCEPT; LocalizedNumberRangeFormatter(const impl::RangeMacroProps ¯os, const Locale &locale); LocalizedNumberRangeFormatter(impl::RangeMacroProps &¯os, const Locale &locale); void clear(); // To give the fluent setters access to this class's constructor: friend class NumberRangeFormatterSettings<UnlocalizedNumberRangeFormatter>; friend class NumberRangeFormatterSettings<LocalizedNumberRangeFormatter>; // To give UnlocalizedNumberRangeFormatter::locale() access to this class's constructor: friend class UnlocalizedNumberRangeFormatter; }; /** * The result of a number range formatting operation. This class allows the result to be exported in several data types, * including a UnicodeString and a FieldPositionIterator. * * Instances of this class are immutable and thread-safe. * * @stable ICU 63 */ class U_I18N_API FormattedNumberRange : public UMemory, public FormattedValue { public: // Copybrief: this method is older than the parent method /** * @copybrief FormattedValue::toString() * * For more information, see FormattedValue::toString() * * @stable ICU 63 */ UnicodeString toString(UErrorCode& status) const U_OVERRIDE; // Copydoc: this method is new in ICU 64 /** @copydoc FormattedValue::toTempString() */ UnicodeString toTempString(UErrorCode& status) const U_OVERRIDE; // Copybrief: this method is older than the parent method /** * @copybrief FormattedValue::appendTo() * * For more information, see FormattedValue::appendTo() * * @stable ICU 63 */ Appendable &appendTo(Appendable &appendable, UErrorCode& status) const U_OVERRIDE; // Copydoc: this method is new in ICU 64 /** @copydoc FormattedValue::nextPosition() */ UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE; /** * Extracts the formatted range as a pair of decimal numbers. This endpoint * is useful for obtaining the exact number being printed after scaling * and rounding have been applied by the number range formatting pipeline. * * The syntax of the unformatted numbers is a "numeric string" * as defined in the Decimal Arithmetic Specification, available at * http://speleotrove.com/decimal * * Example C++17 call site: * * auto [ first, second ] = range.getDecimalNumbers<std::string>(status); * * @tparam StringClass A string class compatible with StringByteSink; * for example, std::string. * @param status Set if an error occurs. * @return A pair of StringClasses containing the numeric strings. * @stable ICU 68 */ template<typename StringClass> inline std::pair<StringClass, StringClass> getDecimalNumbers(UErrorCode& status) const; /** * Returns whether the pair of numbers was successfully formatted as a range or whether an identity fallback was * used. For example, if the first and second number were the same either before or after rounding occurred, an * identity fallback was used. * * @return An indication the resulting identity situation in the formatted number range. * @stable ICU 63 * @see UNumberRangeIdentityFallback */ UNumberRangeIdentityResult getIdentityResult(UErrorCode& status) const; #ifndef U_HIDE_DRAFT_API /** * Default constructor; makes an empty FormattedNumberRange. * @draft ICU 70 */ FormattedNumberRange() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {} #endif /* U_HIDE_DRAFT_API */ /** * Copying not supported; use move constructor instead. */ FormattedNumberRange(const FormattedNumberRange&) = delete; /** * Copying not supported; use move assignment instead. */ FormattedNumberRange& operator=(const FormattedNumberRange&) = delete; /** * Move constructor: * Leaves the source FormattedNumberRange in an undefined state. * @stable ICU 63 */ FormattedNumberRange(FormattedNumberRange&& src) U_NOEXCEPT; /** * Move assignment: * Leaves the source FormattedNumberRange in an undefined state. * @stable ICU 63 */ FormattedNumberRange& operator=(FormattedNumberRange&& src) U_NOEXCEPT; /** * Destruct an instance of FormattedNumberRange, cleaning up any memory it might own. * @stable ICU 63 */ ~FormattedNumberRange(); private: // Can't use LocalPointer because UFormattedNumberRangeData is forward-declared const impl::UFormattedNumberRangeData *fData; // Error code for the terminal methods UErrorCode fErrorCode; /** * Internal constructor from data type. Adopts the data pointer. */ explicit FormattedNumberRange(impl::UFormattedNumberRangeData *results) : fData(results), fErrorCode(U_ZERO_ERROR) {} explicit FormattedNumberRange(UErrorCode errorCode) : fData(nullptr), fErrorCode(errorCode) {} void getAllFieldPositionsImpl(FieldPositionIteratorHandler& fpih, UErrorCode& status) const; void getDecimalNumbers(ByteSink& sink1, ByteSink& sink2, UErrorCode& status) const; const impl::UFormattedNumberRangeData* getData(UErrorCode& status) const; // To allow PluralRules to access the underlying data friend class ::icu::PluralRules; // To give LocalizedNumberRangeFormatter format methods access to this class's constructor: friend class LocalizedNumberRangeFormatter; // To give C API access to internals friend struct impl::UFormattedNumberRangeImpl; }; // inline impl of @stable ICU 68 method template<typename StringClass> std::pair<StringClass, StringClass> FormattedNumberRange::getDecimalNumbers(UErrorCode& status) const { StringClass str1; StringClass str2; StringByteSink<StringClass> sink1(&str1); StringByteSink<StringClass> sink2(&str2); getDecimalNumbers(sink1, sink2, status); return std::make_pair(str1, str2); } /** * See the main description in numberrangeformatter.h for documentation and examples. * * @stable ICU 63 */ class U_I18N_API NumberRangeFormatter final { public: /** * Call this method at the beginning of a NumberRangeFormatter fluent chain in which the locale is not currently * known at the call site. * * @return An {@link UnlocalizedNumberRangeFormatter}, to be used for chaining. * @stable ICU 63 */ static UnlocalizedNumberRangeFormatter with(); /** * Call this method at the beginning of a NumberRangeFormatter fluent chain in which the locale is known at the call * site. * * @param locale * The locale from which to load formats and symbols for number range formatting. * @return A {@link LocalizedNumberRangeFormatter}, to be used for chaining. * @stable ICU 63 */ static LocalizedNumberRangeFormatter withLocale(const Locale &locale); /** * Use factory methods instead of the constructor to create a NumberFormatter. */ NumberRangeFormatter() = delete; }; } // namespace number U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ #endif /* U_SHOW_CPLUSPLUS_API */ #endif // __NUMBERRANGEFORMATTER_H__