pango 2.2.4-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README +33 -0
- data/Rakefile +65 -0
- data/ext/pango/depend +12 -0
- data/ext/pango/extconf.rb +90 -0
- data/ext/pango/pango.def +18 -0
- data/ext/pango/rbpango.c +318 -0
- data/ext/pango/rbpango.h +96 -0
- data/ext/pango/rbpangoanalysis.c +218 -0
- data/ext/pango/rbpangoattribute.c +499 -0
- data/ext/pango/rbpangoattriterator.c +141 -0
- data/ext/pango/rbpangoattrlist.c +101 -0
- data/ext/pango/rbpangocairo.c +122 -0
- data/ext/pango/rbpangocairocontext.c +131 -0
- data/ext/pango/rbpangocolor.c +120 -0
- data/ext/pango/rbpangocontext.c +309 -0
- data/ext/pango/rbpangoconversions.h +111 -0
- data/ext/pango/rbpangocoverage.c +106 -0
- data/ext/pango/rbpangoengine.c +73 -0
- data/ext/pango/rbpangofont.c +110 -0
- data/ext/pango/rbpangofontdescription.c +282 -0
- data/ext/pango/rbpangofontface.c +73 -0
- data/ext/pango/rbpangofontfamily.c +79 -0
- data/ext/pango/rbpangofontmap.c +102 -0
- data/ext/pango/rbpangofontmetrics.c +85 -0
- data/ext/pango/rbpangofontset.c +69 -0
- data/ext/pango/rbpangofontsetsimple.c +60 -0
- data/ext/pango/rbpangoglyphinfo.c +123 -0
- data/ext/pango/rbpangoglyphitem.c +125 -0
- data/ext/pango/rbpangoglyphstring.c +151 -0
- data/ext/pango/rbpangogravity.c +54 -0
- data/ext/pango/rbpangoitem.c +95 -0
- data/ext/pango/rbpangolanguage.c +86 -0
- data/ext/pango/rbpangolayout.c +572 -0
- data/ext/pango/rbpangolayoutiter.c +189 -0
- data/ext/pango/rbpangolayoutline.c +239 -0
- data/ext/pango/rbpangologattr.c +109 -0
- data/ext/pango/rbpangomatrix.c +143 -0
- data/ext/pango/rbpangoprivate.h +49 -0
- data/ext/pango/rbpangorectangle.c +170 -0
- data/ext/pango/rbpangorenderer.c +193 -0
- data/ext/pango/rbpangoscript.c +84 -0
- data/ext/pango/rbpangoscriptiter.c +92 -0
- data/ext/pango/rbpangotabarray.c +128 -0
- data/extconf.rb +49 -0
- data/lib/2.0/pango.so +0 -0
- data/lib/2.1/pango.so +0 -0
- data/lib/2.2/pango.so +0 -0
- data/lib/pango.rb +79 -0
- data/sample/attribute.rb +82 -0
- data/sample/break.rb +28 -0
- data/sample/gdk_layout.rb +27 -0
- data/sample/glyphstring.rb +61 -0
- data/sample/item.rb +37 -0
- data/sample/label.rb +23 -0
- data/sample/layout.rb +102 -0
- data/sample/pango_cairo.rb +66 -0
- data/sample/parse.rb +33 -0
- data/sample/sample.txt +10 -0
- data/sample/script.rb +23 -0
- data/test/pango-test-utils.rb +9 -0
- data/test/run-test.rb +28 -0
- data/test/test-analysis.rb +26 -0
- data/test/test-attribute.rb +19 -0
- data/test/test-color.rb +47 -0
- data/test/test-language.rb +7 -0
- data/test/test-layout.rb +34 -0
- data/test/test-log-attr.rb +26 -0
- data/test/test-matrix.rb +26 -0
- data/test/test-rectangle.rb +26 -0
- data/vendor/local/bin/derb.exe +0 -0
- data/vendor/local/bin/genbrk.exe +0 -0
- data/vendor/local/bin/genccode.exe +0 -0
- data/vendor/local/bin/gencfu.exe +0 -0
- data/vendor/local/bin/gencmn.exe +0 -0
- data/vendor/local/bin/gencnval.exe +0 -0
- data/vendor/local/bin/gendict.exe +0 -0
- data/vendor/local/bin/gennorm2.exe +0 -0
- data/vendor/local/bin/genrb.exe +0 -0
- data/vendor/local/bin/gensprep.exe +0 -0
- data/vendor/local/bin/hb-ot-shape-closure.exe +0 -0
- data/vendor/local/bin/hb-shape.exe +0 -0
- data/vendor/local/bin/hb-view.exe +0 -0
- data/vendor/local/bin/icu-config +820 -0
- data/vendor/local/bin/icuinfo.exe +0 -0
- data/vendor/local/bin/icupkg.exe +0 -0
- data/vendor/local/bin/libharfbuzz-0.dll +0 -0
- data/vendor/local/bin/libpango-1.0-0.dll +0 -0
- data/vendor/local/bin/libpangocairo-1.0-0.dll +0 -0
- data/vendor/local/bin/libpangoft2-1.0-0.dll +0 -0
- data/vendor/local/bin/libpangowin32-1.0-0.dll +0 -0
- data/vendor/local/bin/makeconv.exe +0 -0
- data/vendor/local/bin/pango-querymodules.exe +0 -0
- data/vendor/local/bin/pango-view.exe +0 -0
- data/vendor/local/bin/pkgdata.exe +0 -0
- data/vendor/local/bin/uconv.exe +0 -0
- data/vendor/local/etc/pango/pango.modules +19 -0
- data/vendor/local/include/harfbuzz/hb-blob.h +126 -0
- data/vendor/local/include/harfbuzz/hb-buffer.h +344 -0
- data/vendor/local/include/harfbuzz/hb-common.h +344 -0
- data/vendor/local/include/harfbuzz/hb-deprecated.h +51 -0
- data/vendor/local/include/harfbuzz/hb-face.h +117 -0
- data/vendor/local/include/harfbuzz/hb-font.h +507 -0
- data/vendor/local/include/harfbuzz/hb-ft.h +62 -0
- data/vendor/local/include/harfbuzz/hb-glib.h +52 -0
- data/vendor/local/include/harfbuzz/hb-icu.h +52 -0
- data/vendor/local/include/harfbuzz/hb-ot-font.h +41 -0
- data/vendor/local/include/harfbuzz/hb-ot-layout.h +302 -0
- data/vendor/local/include/harfbuzz/hb-ot-shape.h +53 -0
- data/vendor/local/include/harfbuzz/hb-ot-tag.h +59 -0
- data/vendor/local/include/harfbuzz/hb-ot.h +43 -0
- data/vendor/local/include/harfbuzz/hb-set.h +154 -0
- data/vendor/local/include/harfbuzz/hb-shape-plan.h +89 -0
- data/vendor/local/include/harfbuzz/hb-shape.h +81 -0
- data/vendor/local/include/harfbuzz/hb-unicode.h +445 -0
- data/vendor/local/include/harfbuzz/hb-version.h +66 -0
- data/vendor/local/include/harfbuzz/hb.h +47 -0
- data/vendor/local/include/layout/LEFontInstance.h +550 -0
- data/vendor/local/include/layout/LEGlyphFilter.h +45 -0
- data/vendor/local/include/layout/LEGlyphStorage.h +546 -0
- data/vendor/local/include/layout/LEInsertionList.h +177 -0
- data/vendor/local/include/layout/LELanguages.h +112 -0
- data/vendor/local/include/layout/LEScripts.h +263 -0
- data/vendor/local/include/layout/LESwaps.h +100 -0
- data/vendor/local/include/layout/LETableReference.h +418 -0
- data/vendor/local/include/layout/LETypes.h +728 -0
- data/vendor/local/include/layout/LayoutEngine.h +518 -0
- data/vendor/local/include/layout/ParagraphLayout.h +747 -0
- data/vendor/local/include/layout/RunArrays.h +676 -0
- data/vendor/local/include/layout/loengine.h +225 -0
- data/vendor/local/include/layout/playout.h +466 -0
- data/vendor/local/include/layout/plruns.h +441 -0
- data/vendor/local/include/pango-1.0/pango/pango-attributes.h +514 -0
- data/vendor/local/include/pango-1.0/pango/pango-bidi-type.h +136 -0
- data/vendor/local/include/pango-1.0/pango/pango-break.h +173 -0
- data/vendor/local/include/pango-1.0/pango/pango-context.h +112 -0
- data/vendor/local/include/pango-1.0/pango/pango-coverage.h +79 -0
- data/vendor/local/include/pango-1.0/pango/pango-engine.h +429 -0
- data/vendor/local/include/pango-1.0/pango/pango-enum-types.h +69 -0
- data/vendor/local/include/pango-1.0/pango/pango-features.h +12 -0
- data/vendor/local/include/pango-1.0/pango/pango-font.h +622 -0
- data/vendor/local/include/pango-1.0/pango/pango-fontmap.h +167 -0
- data/vendor/local/include/pango-1.0/pango/pango-fontset.h +169 -0
- data/vendor/local/include/pango-1.0/pango/pango-glyph-item.h +158 -0
- data/vendor/local/include/pango-1.0/pango/pango-glyph.h +197 -0
- data/vendor/local/include/pango-1.0/pango/pango-gravity.h +128 -0
- data/vendor/local/include/pango-1.0/pango/pango-item.h +109 -0
- data/vendor/local/include/pango-1.0/pango/pango-language.h +61 -0
- data/vendor/local/include/pango-1.0/pango/pango-layout.h +340 -0
- data/vendor/local/include/pango-1.0/pango/pango-matrix.h +117 -0
- data/vendor/local/include/pango-1.0/pango/pango-modules.h +71 -0
- data/vendor/local/include/pango-1.0/pango/pango-ot.h +391 -0
- data/vendor/local/include/pango-1.0/pango/pango-renderer.h +260 -0
- data/vendor/local/include/pango-1.0/pango/pango-script.h +260 -0
- data/vendor/local/include/pango-1.0/pango/pango-tabs.h +87 -0
- data/vendor/local/include/pango-1.0/pango/pango-types.h +200 -0
- data/vendor/local/include/pango-1.0/pango/pango-utils.h +189 -0
- data/vendor/local/include/pango-1.0/pango/pango.h +48 -0
- data/vendor/local/include/pango-1.0/pango/pangocairo.h +169 -0
- data/vendor/local/include/pango-1.0/pango/pangofc-decoder.h +110 -0
- data/vendor/local/include/pango-1.0/pango/pangofc-font.h +153 -0
- data/vendor/local/include/pango-1.0/pango/pangofc-fontmap.h +289 -0
- data/vendor/local/include/pango-1.0/pango/pangoft2.h +133 -0
- data/vendor/local/include/pango-1.0/pango/pangowin32.h +128 -0
- data/vendor/local/include/unicode/alphaindex.h +752 -0
- data/vendor/local/include/unicode/appendable.h +232 -0
- data/vendor/local/include/unicode/basictz.h +214 -0
- data/vendor/local/include/unicode/brkiter.h +655 -0
- data/vendor/local/include/unicode/bytestream.h +257 -0
- data/vendor/local/include/unicode/bytestrie.h +519 -0
- data/vendor/local/include/unicode/bytestriebuilder.h +181 -0
- data/vendor/local/include/unicode/calendar.h +2519 -0
- data/vendor/local/include/unicode/caniter.h +208 -0
- data/vendor/local/include/unicode/chariter.h +722 -0
- data/vendor/local/include/unicode/choicfmt.h +594 -0
- data/vendor/local/include/unicode/coleitr.h +404 -0
- data/vendor/local/include/unicode/coll.h +1267 -0
- data/vendor/local/include/unicode/compactdecimalformat.h +330 -0
- data/vendor/local/include/unicode/curramt.h +130 -0
- data/vendor/local/include/unicode/currpinf.h +258 -0
- data/vendor/local/include/unicode/currunit.h +110 -0
- data/vendor/local/include/unicode/datefmt.h +883 -0
- data/vendor/local/include/unicode/dbbi.h +40 -0
- data/vendor/local/include/unicode/dcfmtsym.h +482 -0
- data/vendor/local/include/unicode/decimfmt.h +2479 -0
- data/vendor/local/include/unicode/docmain.h +215 -0
- data/vendor/local/include/unicode/dtfmtsym.h +912 -0
- data/vendor/local/include/unicode/dtintrv.h +158 -0
- data/vendor/local/include/unicode/dtitvfmt.h +985 -0
- data/vendor/local/include/unicode/dtitvinf.h +514 -0
- data/vendor/local/include/unicode/dtptngen.h +498 -0
- data/vendor/local/include/unicode/dtrule.h +250 -0
- data/vendor/local/include/unicode/enumset.h +64 -0
- data/vendor/local/include/unicode/errorcode.h +137 -0
- data/vendor/local/include/unicode/fieldpos.h +291 -0
- data/vendor/local/include/unicode/filteredbrk.h +131 -0
- data/vendor/local/include/unicode/fmtable.h +760 -0
- data/vendor/local/include/unicode/format.h +305 -0
- data/vendor/local/include/unicode/fpositer.h +117 -0
- data/vendor/local/include/unicode/gender.h +111 -0
- data/vendor/local/include/unicode/gregocal.h +777 -0
- data/vendor/local/include/unicode/icudataver.h +41 -0
- data/vendor/local/include/unicode/icuplug.h +371 -0
- data/vendor/local/include/unicode/idna.h +323 -0
- data/vendor/local/include/unicode/listformatter.h +167 -0
- data/vendor/local/include/unicode/localpointer.h +304 -0
- data/vendor/local/include/unicode/locdspnm.h +204 -0
- data/vendor/local/include/unicode/locid.h +815 -0
- data/vendor/local/include/unicode/measfmt.h +389 -0
- data/vendor/local/include/unicode/measunit.h +1443 -0
- data/vendor/local/include/unicode/measure.h +159 -0
- data/vendor/local/include/unicode/messagepattern.h +943 -0
- data/vendor/local/include/unicode/msgfmt.h +1093 -0
- data/vendor/local/include/unicode/normalizer2.h +658 -0
- data/vendor/local/include/unicode/normlzr.h +797 -0
- data/vendor/local/include/unicode/numfmt.h +1187 -0
- data/vendor/local/include/unicode/numsys.h +208 -0
- data/vendor/local/include/unicode/parseerr.h +92 -0
- data/vendor/local/include/unicode/parsepos.h +230 -0
- data/vendor/local/include/unicode/platform.h +751 -0
- data/vendor/local/include/unicode/plurfmt.h +615 -0
- data/vendor/local/include/unicode/plurrule.h +501 -0
- data/vendor/local/include/unicode/ptypes.h +126 -0
- data/vendor/local/include/unicode/putil.h +181 -0
- data/vendor/local/include/unicode/rbbi.h +782 -0
- data/vendor/local/include/unicode/rbnf.h +1032 -0
- data/vendor/local/include/unicode/rbtz.h +362 -0
- data/vendor/local/include/unicode/regex.h +1857 -0
- data/vendor/local/include/unicode/region.h +228 -0
- data/vendor/local/include/unicode/reldatefmt.h +498 -0
- data/vendor/local/include/unicode/rep.h +261 -0
- data/vendor/local/include/unicode/resbund.h +490 -0
- data/vendor/local/include/unicode/schriter.h +187 -0
- data/vendor/local/include/unicode/scientificformathelper.h +139 -0
- data/vendor/local/include/unicode/search.h +575 -0
- data/vendor/local/include/unicode/selfmt.h +367 -0
- data/vendor/local/include/unicode/simpletz.h +928 -0
- data/vendor/local/include/unicode/smpdtfmt.h +1592 -0
- data/vendor/local/include/unicode/sortkey.h +338 -0
- data/vendor/local/include/unicode/std_string.h +37 -0
- data/vendor/local/include/unicode/strenum.h +276 -0
- data/vendor/local/include/unicode/stringpiece.h +224 -0
- data/vendor/local/include/unicode/stringtriebuilder.h +402 -0
- data/vendor/local/include/unicode/stsearch.h +504 -0
- data/vendor/local/include/unicode/symtable.h +112 -0
- data/vendor/local/include/unicode/tblcoll.h +873 -0
- data/vendor/local/include/unicode/timezone.h +948 -0
- data/vendor/local/include/unicode/tmunit.h +129 -0
- data/vendor/local/include/unicode/tmutamt.h +168 -0
- data/vendor/local/include/unicode/tmutfmt.h +243 -0
- data/vendor/local/include/unicode/translit.h +1342 -0
- data/vendor/local/include/unicode/tzfmt.h +1098 -0
- data/vendor/local/include/unicode/tznames.h +404 -0
- data/vendor/local/include/unicode/tzrule.h +828 -0
- data/vendor/local/include/unicode/tztrans.h +195 -0
- data/vendor/local/include/unicode/ubidi.h +2186 -0
- data/vendor/local/include/unicode/ubrk.h +540 -0
- data/vendor/local/include/unicode/ucal.h +1560 -0
- data/vendor/local/include/unicode/ucasemap.h +423 -0
- data/vendor/local/include/unicode/ucat.h +158 -0
- data/vendor/local/include/unicode/uchar.h +3426 -0
- data/vendor/local/include/unicode/ucharstrie.h +576 -0
- data/vendor/local/include/unicode/ucharstriebuilder.h +185 -0
- data/vendor/local/include/unicode/uchriter.h +381 -0
- data/vendor/local/include/unicode/uclean.h +258 -0
- data/vendor/local/include/unicode/ucnv.h +2036 -0
- data/vendor/local/include/unicode/ucnv_cb.h +162 -0
- data/vendor/local/include/unicode/ucnv_err.h +463 -0
- data/vendor/local/include/unicode/ucnvsel.h +187 -0
- data/vendor/local/include/unicode/ucol.h +1474 -0
- data/vendor/local/include/unicode/ucoleitr.h +266 -0
- data/vendor/local/include/unicode/uconfig.h +430 -0
- data/vendor/local/include/unicode/ucsdet.h +413 -0
- data/vendor/local/include/unicode/ucurr.h +424 -0
- data/vendor/local/include/unicode/udat.h +1536 -0
- data/vendor/local/include/unicode/udata.h +430 -0
- data/vendor/local/include/unicode/udateintervalformat.h +181 -0
- data/vendor/local/include/unicode/udatpg.h +588 -0
- data/vendor/local/include/unicode/udisplaycontext.h +150 -0
- data/vendor/local/include/unicode/uenum.h +206 -0
- data/vendor/local/include/unicode/uformattable.h +280 -0
- data/vendor/local/include/unicode/ugender.h +82 -0
- data/vendor/local/include/unicode/uidna.h +762 -0
- data/vendor/local/include/unicode/uiter.h +707 -0
- data/vendor/local/include/unicode/uldnames.h +302 -0
- data/vendor/local/include/unicode/uloc.h +1256 -0
- data/vendor/local/include/unicode/ulocdata.h +277 -0
- data/vendor/local/include/unicode/umachine.h +356 -0
- data/vendor/local/include/unicode/umisc.h +60 -0
- data/vendor/local/include/unicode/umsg.h +623 -0
- data/vendor/local/include/unicode/unifilt.h +120 -0
- data/vendor/local/include/unicode/unifunct.h +125 -0
- data/vendor/local/include/unicode/unimatch.h +163 -0
- data/vendor/local/include/unicode/unirepl.h +97 -0
- data/vendor/local/include/unicode/uniset.h +1691 -0
- data/vendor/local/include/unicode/unistr.h +4470 -0
- data/vendor/local/include/unicode/unorm.h +561 -0
- data/vendor/local/include/unicode/unorm2.h +528 -0
- data/vendor/local/include/unicode/unum.h +1328 -0
- data/vendor/local/include/unicode/unumsys.h +170 -0
- data/vendor/local/include/unicode/uobject.h +320 -0
- data/vendor/local/include/unicode/upluralrules.h +145 -0
- data/vendor/local/include/unicode/uregex.h +1591 -0
- data/vendor/local/include/unicode/uregion.h +248 -0
- data/vendor/local/include/unicode/urename.h +1784 -0
- data/vendor/local/include/unicode/urep.h +155 -0
- data/vendor/local/include/unicode/ures.h +887 -0
- data/vendor/local/include/unicode/uscript.h +642 -0
- data/vendor/local/include/unicode/usearch.h +885 -0
- data/vendor/local/include/unicode/uset.h +1126 -0
- data/vendor/local/include/unicode/usetiter.h +318 -0
- data/vendor/local/include/unicode/ushape.h +474 -0
- data/vendor/local/include/unicode/uspoof.h +1064 -0
- data/vendor/local/include/unicode/usprep.h +269 -0
- data/vendor/local/include/unicode/ustdio.h +1018 -0
- data/vendor/local/include/unicode/ustream.h +68 -0
- data/vendor/local/include/unicode/ustring.h +1700 -0
- data/vendor/local/include/unicode/ustringtrie.h +95 -0
- data/vendor/local/include/unicode/utext.h +1600 -0
- data/vendor/local/include/unicode/utf.h +223 -0
- data/vendor/local/include/unicode/utf16.h +623 -0
- data/vendor/local/include/unicode/utf32.h +23 -0
- data/vendor/local/include/unicode/utf8.h +824 -0
- data/vendor/local/include/unicode/utf_old.h +1169 -0
- data/vendor/local/include/unicode/utmscale.h +481 -0
- data/vendor/local/include/unicode/utrace.h +359 -0
- data/vendor/local/include/unicode/utrans.h +658 -0
- data/vendor/local/include/unicode/utypes.h +723 -0
- data/vendor/local/include/unicode/uvernum.h +170 -0
- data/vendor/local/include/unicode/uversion.h +193 -0
- data/vendor/local/include/unicode/vtzone.h +455 -0
- data/vendor/local/lib/girepository-1.0/Pango-1.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/PangoCairo-1.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/PangoFT2-1.0.typelib +0 -0
- data/vendor/local/lib/icu/54.1/Makefile.inc +293 -0
- data/vendor/local/lib/icu/54.1/pkgdata.inc +17 -0
- data/vendor/local/lib/icu/Makefile.inc +293 -0
- data/vendor/local/lib/icu/pkgdata.inc +17 -0
- data/vendor/local/lib/icudt.dll +0 -0
- data/vendor/local/lib/icudt54.dll +0 -0
- data/vendor/local/lib/icuin.dll +0 -0
- data/vendor/local/lib/icuin54.dll +0 -0
- data/vendor/local/lib/icuio.dll +0 -0
- data/vendor/local/lib/icuio54.dll +0 -0
- data/vendor/local/lib/icule.dll +0 -0
- data/vendor/local/lib/icule54.dll +0 -0
- data/vendor/local/lib/iculx.dll +0 -0
- data/vendor/local/lib/iculx54.dll +0 -0
- data/vendor/local/lib/icutest.dll +0 -0
- data/vendor/local/lib/icutest54.dll +0 -0
- data/vendor/local/lib/icutu.dll +0 -0
- data/vendor/local/lib/icutu54.dll +0 -0
- data/vendor/local/lib/icuuc.dll +0 -0
- data/vendor/local/lib/icuuc54.dll +0 -0
- data/vendor/local/lib/libharfbuzz-icu.a +0 -0
- data/vendor/local/lib/libharfbuzz-icu.la +41 -0
- data/vendor/local/lib/libharfbuzz.dll.a +0 -0
- data/vendor/local/lib/libharfbuzz.la +41 -0
- data/vendor/local/lib/libicudt.dll.a +0 -0
- data/vendor/local/lib/libicuin.dll.a +0 -0
- data/vendor/local/lib/libicuio.dll.a +0 -0
- data/vendor/local/lib/libicule.dll.a +0 -0
- data/vendor/local/lib/libiculx.dll.a +0 -0
- data/vendor/local/lib/libicutest.dll.a +0 -0
- data/vendor/local/lib/libicutu.dll.a +0 -0
- data/vendor/local/lib/libicuuc.dll.a +0 -0
- data/vendor/local/lib/libpango-1.0.dll.a +0 -0
- data/vendor/local/lib/libpango-1.0.la +41 -0
- data/vendor/local/lib/libpangocairo-1.0.dll.a +0 -0
- data/vendor/local/lib/libpangocairo-1.0.la +41 -0
- data/vendor/local/lib/libpangoft2-1.0.dll.a +0 -0
- data/vendor/local/lib/libpangoft2-1.0.la +41 -0
- data/vendor/local/lib/libpangowin32-1.0.dll.a +0 -0
- data/vendor/local/lib/libpangowin32-1.0.la +41 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-arabic-lang.dll +0 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-arabic-lang.dll.a +0 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-arabic-lang.la +41 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-basic-fc.dll +0 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-basic-fc.dll.a +0 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-basic-fc.la +41 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-basic-win32.dll +0 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-basic-win32.dll.a +0 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-basic-win32.la +41 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-indic-lang.dll +0 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-indic-lang.dll.a +0 -0
- data/vendor/local/lib/pango/1.8.0/modules/pango-indic-lang.la +41 -0
- data/vendor/local/lib/pkgconfig/harfbuzz-icu.pc +13 -0
- data/vendor/local/lib/pkgconfig/harfbuzz.pc +11 -0
- data/vendor/local/lib/pkgconfig/icu-i18n.pc +38 -0
- data/vendor/local/lib/pkgconfig/icu-io.pc +38 -0
- data/vendor/local/lib/pkgconfig/icu-le.pc +38 -0
- data/vendor/local/lib/pkgconfig/icu-lx.pc +38 -0
- data/vendor/local/lib/pkgconfig/icu-uc.pc +38 -0
- data/vendor/local/lib/pkgconfig/pango.pc +14 -0
- data/vendor/local/lib/pkgconfig/pangocairo.pc +11 -0
- data/vendor/local/lib/pkgconfig/pangoft2.pc +12 -0
- data/vendor/local/lib/pkgconfig/pangowin32.pc +11 -0
- data/vendor/local/share/gir-1.0/Pango-1.0.gir +13329 -0
- data/vendor/local/share/gir-1.0/PangoCairo-1.0.gir +833 -0
- data/vendor/local/share/gir-1.0/PangoFT2-1.0.gir +354 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/annotation-glossary.html +75 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/api-index-full.html +1449 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/ch01.html +98 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/deprecated-api-index.html +46 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-blob.html +610 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-buffer.html +1780 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-common.html +1337 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-coretext.html +144 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-deprecated.html +99 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-face.html +630 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-font.html +2529 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-ft.html +188 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-glib.html +120 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-gobject.html +50 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-graphite2.html +120 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-icu.html +120 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-ot-layout.html +771 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-ot-tag.html +172 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-ot.html +50 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-set.html +966 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-shape-plan.html +405 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-shape.html +286 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-unicode.html +1523 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-uniscribe.html +100 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb-version.html +182 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz-hb.html +50 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/harfbuzz.devhelp2 +378 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/home.png +0 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/index.html +105 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/index.sgml +496 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/left-insensitive.png +0 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/left.png +0 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/object-tree.html +59 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/right-insensitive.png +0 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/right.png +0 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/style.css +476 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/up-insensitive.png +0 -0
- data/vendor/local/share/gtk-doc/html/harfbuzz/up.png +0 -0
- data/vendor/local/share/gtk-doc/html/pango/PangoEngineLang.html +224 -0
- data/vendor/local/share/gtk-doc/html/pango/PangoEngineShape.html +255 -0
- data/vendor/local/share/gtk-doc/html/pango/PangoFcDecoder.html +246 -0
- data/vendor/local/share/gtk-doc/html/pango/PangoFcFont.html +500 -0
- data/vendor/local/share/gtk-doc/html/pango/PangoFcFontMap.html +1001 -0
- data/vendor/local/share/gtk-doc/html/pango/PangoMarkupFormat.html +301 -0
- data/vendor/local/share/gtk-doc/html/pango/PangoRenderer.html +1219 -0
- data/vendor/local/share/gtk-doc/html/pango/annotation-glossary.html +89 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-10.html +135 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-12.html +49 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-14.html +64 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-16.html +228 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-18.html +152 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-2.html +122 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-20.html +87 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-22.html +124 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-24.html +97 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-26.html +46 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-30.html +39 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-31-0.html +39 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-32-4.html +53 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-32.html +42 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-34.html +38 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-4.html +201 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-6.html +165 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-1-8.html +171 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-deprecated.html +284 -0
- data/vendor/local/share/gtk-doc/html/pango/api-index-full.html +2968 -0
- data/vendor/local/share/gtk-doc/html/pango/home.png +0 -0
- data/vendor/local/share/gtk-doc/html/pango/index.html +146 -0
- data/vendor/local/share/gtk-doc/html/pango/index.sgml +957 -0
- data/vendor/local/share/gtk-doc/html/pango/layout.gif +0 -0
- data/vendor/local/share/gtk-doc/html/pango/left-insensitive.png +0 -0
- data/vendor/local/share/gtk-doc/html/pango/left.png +0 -0
- data/vendor/local/share/gtk-doc/html/pango/lowlevel.html +68 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Bidirectional-Text.html +514 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Cairo-Rendering.html +1632 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-CoreText-Fonts.html +115 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Coverage-Maps.html +508 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Engines.html +358 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Fonts.html +4154 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-FreeType-Fonts-and-Rendering.html +956 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Glyph-Storage.html +2627 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Layout-Objects.html +4153 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Miscellaneous-Utilities.html +965 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Modules.html +331 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-OpenType-Font-Handling.html +2202 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Scripts-and-Languages.html +1430 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Tab-Stops.html +582 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Text-Attributes.html +3356 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Text-Processing.html +2079 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Version-Checking.html +325 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Vertical-Text.html +523 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Win32-Fonts-and-Rendering.html +1028 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-Xft-Fonts-and-Rendering.html +1275 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-hierarchy.html +91 -0
- data/vendor/local/share/gtk-doc/html/pango/pango-querymodules.html +131 -0
- data/vendor/local/share/gtk-doc/html/pango/pango.devhelp2 +786 -0
- data/vendor/local/share/gtk-doc/html/pango/pango.html +63 -0
- data/vendor/local/share/gtk-doc/html/pango/rendering.html +47 -0
- data/vendor/local/share/gtk-doc/html/pango/right-insensitive.png +0 -0
- data/vendor/local/share/gtk-doc/html/pango/right.png +0 -0
- data/vendor/local/share/gtk-doc/html/pango/rotated-text.png +0 -0
- data/vendor/local/share/gtk-doc/html/pango/style.css +476 -0
- data/vendor/local/share/gtk-doc/html/pango/tools.html +33 -0
- data/vendor/local/share/gtk-doc/html/pango/up-insensitive.png +0 -0
- data/vendor/local/share/gtk-doc/html/pango/up.png +0 -0
- data/vendor/local/share/icu/54.1/config/mh-mingw64 +158 -0
- data/vendor/local/share/icu/54.1/install-sh +251 -0
- data/vendor/local/share/icu/54.1/license.html +385 -0
- data/vendor/local/share/icu/54.1/mkinstalldirs +43 -0
- data/vendor/local/share/license/harfbuzz/AUTHORS +9 -0
- data/vendor/local/share/license/harfbuzz/COPYING +36 -0
- data/vendor/local/share/license/pango/AUTHORS +2 -0
- data/vendor/local/share/license/pango/COPYING +482 -0
- data/vendor/local/share/man/man1/derb.1 +196 -0
- data/vendor/local/share/man/man1/genbrk.1 +112 -0
- data/vendor/local/share/man/man1/gencfu.1 +91 -0
- data/vendor/local/share/man/man1/gencnval.1 +91 -0
- data/vendor/local/share/man/man1/gendict.1 +131 -0
- data/vendor/local/share/man/man1/genrb.1 +146 -0
- data/vendor/local/share/man/man1/icu-config.1 +288 -0
- data/vendor/local/share/man/man1/makeconv.1 +112 -0
- data/vendor/local/share/man/man1/pango-querymodules.1 +106 -0
- data/vendor/local/share/man/man1/pango-view.1 +1 -0
- data/vendor/local/share/man/man1/pkgdata.1 +258 -0
- data/vendor/local/share/man/man1/uconv.1 +443 -0
- data/vendor/local/share/man/man8/genccode.8 +106 -0
- data/vendor/local/share/man/man8/gencmn.8 +129 -0
- data/vendor/local/share/man/man8/gensprep.8 +102 -0
- data/vendor/local/share/man/man8/icupkg.8 +204 -0
- metadata +599 -0
@@ -0,0 +1,4470 @@
|
|
1
|
+
/*
|
2
|
+
**********************************************************************
|
3
|
+
* Copyright (C) 1998-2013, International Business Machines
|
4
|
+
* Corporation and others. All Rights Reserved.
|
5
|
+
**********************************************************************
|
6
|
+
*
|
7
|
+
* File unistr.h
|
8
|
+
*
|
9
|
+
* Modification History:
|
10
|
+
*
|
11
|
+
* Date Name Description
|
12
|
+
* 09/25/98 stephen Creation.
|
13
|
+
* 11/11/98 stephen Changed per 11/9 code review.
|
14
|
+
* 04/20/99 stephen Overhauled per 4/16 code review.
|
15
|
+
* 11/18/99 aliu Made to inherit from Replaceable. Added method
|
16
|
+
* handleReplaceBetween(); other methods unchanged.
|
17
|
+
* 06/25/01 grhoten Remove dependency on iostream.
|
18
|
+
******************************************************************************
|
19
|
+
*/
|
20
|
+
|
21
|
+
#ifndef UNISTR_H
|
22
|
+
#define UNISTR_H
|
23
|
+
|
24
|
+
/**
|
25
|
+
* \file
|
26
|
+
* \brief C++ API: Unicode String
|
27
|
+
*/
|
28
|
+
|
29
|
+
#include "unicode/utypes.h"
|
30
|
+
#include "unicode/rep.h"
|
31
|
+
#include "unicode/std_string.h"
|
32
|
+
#include "unicode/stringpiece.h"
|
33
|
+
#include "unicode/bytestream.h"
|
34
|
+
#include "unicode/ucasemap.h"
|
35
|
+
|
36
|
+
struct UConverter; // unicode/ucnv.h
|
37
|
+
class StringThreadTest;
|
38
|
+
|
39
|
+
#ifndef U_COMPARE_CODE_POINT_ORDER
|
40
|
+
/* see also ustring.h and unorm.h */
|
41
|
+
/**
|
42
|
+
* Option bit for u_strCaseCompare, u_strcasecmp, unorm_compare, etc:
|
43
|
+
* Compare strings in code point order instead of code unit order.
|
44
|
+
* @stable ICU 2.2
|
45
|
+
*/
|
46
|
+
#define U_COMPARE_CODE_POINT_ORDER 0x8000
|
47
|
+
#endif
|
48
|
+
|
49
|
+
#ifndef USTRING_H
|
50
|
+
/**
|
51
|
+
* \ingroup ustring_ustrlen
|
52
|
+
*/
|
53
|
+
U_STABLE int32_t U_EXPORT2
|
54
|
+
u_strlen(const UChar *s);
|
55
|
+
#endif
|
56
|
+
|
57
|
+
/**
|
58
|
+
* \def U_STRING_CASE_MAPPER_DEFINED
|
59
|
+
* @internal
|
60
|
+
*/
|
61
|
+
#ifndef U_STRING_CASE_MAPPER_DEFINED
|
62
|
+
#define U_STRING_CASE_MAPPER_DEFINED
|
63
|
+
|
64
|
+
/**
|
65
|
+
* Internal string case mapping function type.
|
66
|
+
* @internal
|
67
|
+
*/
|
68
|
+
typedef int32_t U_CALLCONV
|
69
|
+
UStringCaseMapper(const UCaseMap *csm,
|
70
|
+
UChar *dest, int32_t destCapacity,
|
71
|
+
const UChar *src, int32_t srcLength,
|
72
|
+
UErrorCode *pErrorCode);
|
73
|
+
|
74
|
+
#endif
|
75
|
+
|
76
|
+
U_NAMESPACE_BEGIN
|
77
|
+
|
78
|
+
class BreakIterator; // unicode/brkiter.h
|
79
|
+
class Locale; // unicode/locid.h
|
80
|
+
class StringCharacterIterator;
|
81
|
+
class UnicodeStringAppendable; // unicode/appendable.h
|
82
|
+
|
83
|
+
/* The <iostream> include has been moved to unicode/ustream.h */
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Constant to be used in the UnicodeString(char *, int32_t, EInvariant) constructor
|
87
|
+
* which constructs a Unicode string from an invariant-character char * string.
|
88
|
+
* About invariant characters see utypes.h.
|
89
|
+
* This constructor has no runtime dependency on conversion code and is
|
90
|
+
* therefore recommended over ones taking a charset name string
|
91
|
+
* (where the empty string "" indicates invariant-character conversion).
|
92
|
+
*
|
93
|
+
* @stable ICU 3.2
|
94
|
+
*/
|
95
|
+
#define US_INV icu::UnicodeString::kInvariant
|
96
|
+
|
97
|
+
/**
|
98
|
+
* Unicode String literals in C++.
|
99
|
+
* Dependent on the platform properties, different UnicodeString
|
100
|
+
* constructors should be used to create a UnicodeString object from
|
101
|
+
* a string literal.
|
102
|
+
* The macros are defined for maximum performance.
|
103
|
+
* They work only for strings that contain "invariant characters", i.e.,
|
104
|
+
* only latin letters, digits, and some punctuation.
|
105
|
+
* See utypes.h for details.
|
106
|
+
*
|
107
|
+
* The string parameter must be a C string literal.
|
108
|
+
* The length of the string, not including the terminating
|
109
|
+
* <code>NUL</code>, must be specified as a constant.
|
110
|
+
* The U_STRING_DECL macro should be invoked exactly once for one
|
111
|
+
* such string variable before it is used.
|
112
|
+
* @stable ICU 2.0
|
113
|
+
*/
|
114
|
+
#if defined(U_DECLARE_UTF16)
|
115
|
+
# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const UChar *)U_DECLARE_UTF16(cs), _length)
|
116
|
+
#elif U_SIZEOF_WCHAR_T==U_SIZEOF_UCHAR && (U_CHARSET_FAMILY==U_ASCII_FAMILY || (U_SIZEOF_UCHAR == 2 && defined(U_WCHAR_IS_UTF16)))
|
117
|
+
# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const UChar *)L ## cs, _length)
|
118
|
+
#elif U_SIZEOF_UCHAR==1 && U_CHARSET_FAMILY==U_ASCII_FAMILY
|
119
|
+
# define UNICODE_STRING(cs, _length) icu::UnicodeString(TRUE, (const UChar *)cs, _length)
|
120
|
+
#else
|
121
|
+
# define UNICODE_STRING(cs, _length) icu::UnicodeString(cs, _length, US_INV)
|
122
|
+
#endif
|
123
|
+
|
124
|
+
/**
|
125
|
+
* Unicode String literals in C++.
|
126
|
+
* Dependent on the platform properties, different UnicodeString
|
127
|
+
* constructors should be used to create a UnicodeString object from
|
128
|
+
* a string literal.
|
129
|
+
* The macros are defined for improved performance.
|
130
|
+
* They work only for strings that contain "invariant characters", i.e.,
|
131
|
+
* only latin letters, digits, and some punctuation.
|
132
|
+
* See utypes.h for details.
|
133
|
+
*
|
134
|
+
* The string parameter must be a C string literal.
|
135
|
+
* @stable ICU 2.0
|
136
|
+
*/
|
137
|
+
#define UNICODE_STRING_SIMPLE(cs) UNICODE_STRING(cs, -1)
|
138
|
+
|
139
|
+
/**
|
140
|
+
* \def UNISTR_FROM_CHAR_EXPLICIT
|
141
|
+
* This can be defined to be empty or "explicit".
|
142
|
+
* If explicit, then the UnicodeString(UChar) and UnicodeString(UChar32)
|
143
|
+
* constructors are marked as explicit, preventing their inadvertent use.
|
144
|
+
* @stable ICU 49
|
145
|
+
*/
|
146
|
+
#ifndef UNISTR_FROM_CHAR_EXPLICIT
|
147
|
+
# if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION)
|
148
|
+
// Auto-"explicit" in ICU library code.
|
149
|
+
# define UNISTR_FROM_CHAR_EXPLICIT explicit
|
150
|
+
# else
|
151
|
+
// Empty by default for source code compatibility.
|
152
|
+
# define UNISTR_FROM_CHAR_EXPLICIT
|
153
|
+
# endif
|
154
|
+
#endif
|
155
|
+
|
156
|
+
/**
|
157
|
+
* \def UNISTR_FROM_STRING_EXPLICIT
|
158
|
+
* This can be defined to be empty or "explicit".
|
159
|
+
* If explicit, then the UnicodeString(const char *) and UnicodeString(const UChar *)
|
160
|
+
* constructors are marked as explicit, preventing their inadvertent use.
|
161
|
+
*
|
162
|
+
* In particular, this helps prevent accidentally depending on ICU conversion code
|
163
|
+
* by passing a string literal into an API with a const UnicodeString & parameter.
|
164
|
+
* @stable ICU 49
|
165
|
+
*/
|
166
|
+
#ifndef UNISTR_FROM_STRING_EXPLICIT
|
167
|
+
# if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION)
|
168
|
+
// Auto-"explicit" in ICU library code.
|
169
|
+
# define UNISTR_FROM_STRING_EXPLICIT explicit
|
170
|
+
# else
|
171
|
+
// Empty by default for source code compatibility.
|
172
|
+
# define UNISTR_FROM_STRING_EXPLICIT
|
173
|
+
# endif
|
174
|
+
#endif
|
175
|
+
|
176
|
+
/**
|
177
|
+
* UnicodeString is a string class that stores Unicode characters directly and provides
|
178
|
+
* similar functionality as the Java String and StringBuffer classes.
|
179
|
+
* It is a concrete implementation of the abstract class Replaceable (for transliteration).
|
180
|
+
*
|
181
|
+
* The UnicodeString class is not suitable for subclassing.
|
182
|
+
*
|
183
|
+
* <p>For an overview of Unicode strings in C and C++ see the
|
184
|
+
* <a href="http://icu-project.org/userguide/strings.html">User Guide Strings chapter</a>.</p>
|
185
|
+
*
|
186
|
+
* <p>In ICU, a Unicode string consists of 16-bit Unicode <em>code units</em>.
|
187
|
+
* A Unicode character may be stored with either one code unit
|
188
|
+
* (the most common case) or with a matched pair of special code units
|
189
|
+
* ("surrogates"). The data type for code units is UChar.
|
190
|
+
* For single-character handling, a Unicode character code <em>point</em> is a value
|
191
|
+
* in the range 0..0x10ffff. ICU uses the UChar32 type for code points.</p>
|
192
|
+
*
|
193
|
+
* <p>Indexes and offsets into and lengths of strings always count code units, not code points.
|
194
|
+
* This is the same as with multi-byte char* strings in traditional string handling.
|
195
|
+
* Operations on partial strings typically do not test for code point boundaries.
|
196
|
+
* If necessary, the user needs to take care of such boundaries by testing for the code unit
|
197
|
+
* values or by using functions like
|
198
|
+
* UnicodeString::getChar32Start() and UnicodeString::getChar32Limit()
|
199
|
+
* (or, in C, the equivalent macros U16_SET_CP_START() and U16_SET_CP_LIMIT(), see utf.h).</p>
|
200
|
+
*
|
201
|
+
* UnicodeString methods are more lenient with regard to input parameter values
|
202
|
+
* than other ICU APIs. In particular:
|
203
|
+
* - If indexes are out of bounds for a UnicodeString object
|
204
|
+
* (<0 or >length()) then they are "pinned" to the nearest boundary.
|
205
|
+
* - If primitive string pointer values (e.g., const UChar * or char *)
|
206
|
+
* for input strings are NULL, then those input string parameters are treated
|
207
|
+
* as if they pointed to an empty string.
|
208
|
+
* However, this is <em>not</em> the case for char * parameters for charset names
|
209
|
+
* or other IDs.
|
210
|
+
* - Most UnicodeString methods do not take a UErrorCode parameter because
|
211
|
+
* there are usually very few opportunities for failure other than a shortage
|
212
|
+
* of memory, error codes in low-level C++ string methods would be inconvenient,
|
213
|
+
* and the error code as the last parameter (ICU convention) would prevent
|
214
|
+
* the use of default parameter values.
|
215
|
+
* Instead, such methods set the UnicodeString into a "bogus" state
|
216
|
+
* (see isBogus()) if an error occurs.
|
217
|
+
*
|
218
|
+
* In string comparisons, two UnicodeString objects that are both "bogus"
|
219
|
+
* compare equal (to be transitive and prevent endless loops in sorting),
|
220
|
+
* and a "bogus" string compares less than any non-"bogus" one.
|
221
|
+
*
|
222
|
+
* Const UnicodeString methods are thread-safe. Multiple threads can use
|
223
|
+
* const methods on the same UnicodeString object simultaneously,
|
224
|
+
* but non-const methods must not be called concurrently (in multiple threads)
|
225
|
+
* with any other (const or non-const) methods.
|
226
|
+
*
|
227
|
+
* Similarly, const UnicodeString & parameters are thread-safe.
|
228
|
+
* One object may be passed in as such a parameter concurrently in multiple threads.
|
229
|
+
* This includes the const UnicodeString & parameters for
|
230
|
+
* copy construction, assignment, and cloning.
|
231
|
+
*
|
232
|
+
* <p>UnicodeString uses several storage methods.
|
233
|
+
* String contents can be stored inside the UnicodeString object itself,
|
234
|
+
* in an allocated and shared buffer, or in an outside buffer that is "aliased".
|
235
|
+
* Most of this is done transparently, but careful aliasing in particular provides
|
236
|
+
* significant performance improvements.
|
237
|
+
* Also, the internal buffer is accessible via special functions.
|
238
|
+
* For details see the
|
239
|
+
* <a href="http://icu-project.org/userguide/strings.html">User Guide Strings chapter</a>.</p>
|
240
|
+
*
|
241
|
+
* @see utf.h
|
242
|
+
* @see CharacterIterator
|
243
|
+
* @stable ICU 2.0
|
244
|
+
*/
|
245
|
+
class U_COMMON_API UnicodeString : public Replaceable
|
246
|
+
{
|
247
|
+
public:
|
248
|
+
|
249
|
+
/**
|
250
|
+
* Constant to be used in the UnicodeString(char *, int32_t, EInvariant) constructor
|
251
|
+
* which constructs a Unicode string from an invariant-character char * string.
|
252
|
+
* Use the macro US_INV instead of the full qualification for this value.
|
253
|
+
*
|
254
|
+
* @see US_INV
|
255
|
+
* @stable ICU 3.2
|
256
|
+
*/
|
257
|
+
enum EInvariant {
|
258
|
+
/**
|
259
|
+
* @see EInvariant
|
260
|
+
* @stable ICU 3.2
|
261
|
+
*/
|
262
|
+
kInvariant
|
263
|
+
};
|
264
|
+
|
265
|
+
//========================================
|
266
|
+
// Read-only operations
|
267
|
+
//========================================
|
268
|
+
|
269
|
+
/* Comparison - bitwise only - for international comparison use collation */
|
270
|
+
|
271
|
+
/**
|
272
|
+
* Equality operator. Performs only bitwise comparison.
|
273
|
+
* @param text The UnicodeString to compare to this one.
|
274
|
+
* @return TRUE if <TT>text</TT> contains the same characters as this one,
|
275
|
+
* FALSE otherwise.
|
276
|
+
* @stable ICU 2.0
|
277
|
+
*/
|
278
|
+
inline UBool operator== (const UnicodeString& text) const;
|
279
|
+
|
280
|
+
/**
|
281
|
+
* Inequality operator. Performs only bitwise comparison.
|
282
|
+
* @param text The UnicodeString to compare to this one.
|
283
|
+
* @return FALSE if <TT>text</TT> contains the same characters as this one,
|
284
|
+
* TRUE otherwise.
|
285
|
+
* @stable ICU 2.0
|
286
|
+
*/
|
287
|
+
inline UBool operator!= (const UnicodeString& text) const;
|
288
|
+
|
289
|
+
/**
|
290
|
+
* Greater than operator. Performs only bitwise comparison.
|
291
|
+
* @param text The UnicodeString to compare to this one.
|
292
|
+
* @return TRUE if the characters in this are bitwise
|
293
|
+
* greater than the characters in <code>text</code>, FALSE otherwise
|
294
|
+
* @stable ICU 2.0
|
295
|
+
*/
|
296
|
+
inline UBool operator> (const UnicodeString& text) const;
|
297
|
+
|
298
|
+
/**
|
299
|
+
* Less than operator. Performs only bitwise comparison.
|
300
|
+
* @param text The UnicodeString to compare to this one.
|
301
|
+
* @return TRUE if the characters in this are bitwise
|
302
|
+
* less than the characters in <code>text</code>, FALSE otherwise
|
303
|
+
* @stable ICU 2.0
|
304
|
+
*/
|
305
|
+
inline UBool operator< (const UnicodeString& text) const;
|
306
|
+
|
307
|
+
/**
|
308
|
+
* Greater than or equal operator. Performs only bitwise comparison.
|
309
|
+
* @param text The UnicodeString to compare to this one.
|
310
|
+
* @return TRUE if the characters in this are bitwise
|
311
|
+
* greater than or equal to the characters in <code>text</code>, FALSE otherwise
|
312
|
+
* @stable ICU 2.0
|
313
|
+
*/
|
314
|
+
inline UBool operator>= (const UnicodeString& text) const;
|
315
|
+
|
316
|
+
/**
|
317
|
+
* Less than or equal operator. Performs only bitwise comparison.
|
318
|
+
* @param text The UnicodeString to compare to this one.
|
319
|
+
* @return TRUE if the characters in this are bitwise
|
320
|
+
* less than or equal to the characters in <code>text</code>, FALSE otherwise
|
321
|
+
* @stable ICU 2.0
|
322
|
+
*/
|
323
|
+
inline UBool operator<= (const UnicodeString& text) const;
|
324
|
+
|
325
|
+
/**
|
326
|
+
* Compare the characters bitwise in this UnicodeString to
|
327
|
+
* the characters in <code>text</code>.
|
328
|
+
* @param text The UnicodeString to compare to this one.
|
329
|
+
* @return The result of bitwise character comparison: 0 if this
|
330
|
+
* contains the same characters as <code>text</code>, -1 if the characters in
|
331
|
+
* this are bitwise less than the characters in <code>text</code>, +1 if the
|
332
|
+
* characters in this are bitwise greater than the characters
|
333
|
+
* in <code>text</code>.
|
334
|
+
* @stable ICU 2.0
|
335
|
+
*/
|
336
|
+
inline int8_t compare(const UnicodeString& text) const;
|
337
|
+
|
338
|
+
/**
|
339
|
+
* Compare the characters bitwise in the range
|
340
|
+
* [<TT>start</TT>, <TT>start + length</TT>) with the characters
|
341
|
+
* in the <b>entire string</b> <TT>text</TT>.
|
342
|
+
* (The parameters "start" and "length" are not applied to the other text "text".)
|
343
|
+
* @param start the offset at which the compare operation begins
|
344
|
+
* @param length the number of characters of text to compare.
|
345
|
+
* @param text the other text to be compared against this string.
|
346
|
+
* @return The result of bitwise character comparison: 0 if this
|
347
|
+
* contains the same characters as <code>text</code>, -1 if the characters in
|
348
|
+
* this are bitwise less than the characters in <code>text</code>, +1 if the
|
349
|
+
* characters in this are bitwise greater than the characters
|
350
|
+
* in <code>text</code>.
|
351
|
+
* @stable ICU 2.0
|
352
|
+
*/
|
353
|
+
inline int8_t compare(int32_t start,
|
354
|
+
int32_t length,
|
355
|
+
const UnicodeString& text) const;
|
356
|
+
|
357
|
+
/**
|
358
|
+
* Compare the characters bitwise in the range
|
359
|
+
* [<TT>start</TT>, <TT>start + length</TT>) with the characters
|
360
|
+
* in <TT>srcText</TT> in the range
|
361
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
|
362
|
+
* @param start the offset at which the compare operation begins
|
363
|
+
* @param length the number of characters in this to compare.
|
364
|
+
* @param srcText the text to be compared
|
365
|
+
* @param srcStart the offset into <TT>srcText</TT> to start comparison
|
366
|
+
* @param srcLength the number of characters in <TT>src</TT> to compare
|
367
|
+
* @return The result of bitwise character comparison: 0 if this
|
368
|
+
* contains the same characters as <code>srcText</code>, -1 if the characters in
|
369
|
+
* this are bitwise less than the characters in <code>srcText</code>, +1 if the
|
370
|
+
* characters in this are bitwise greater than the characters
|
371
|
+
* in <code>srcText</code>.
|
372
|
+
* @stable ICU 2.0
|
373
|
+
*/
|
374
|
+
inline int8_t compare(int32_t start,
|
375
|
+
int32_t length,
|
376
|
+
const UnicodeString& srcText,
|
377
|
+
int32_t srcStart,
|
378
|
+
int32_t srcLength) const;
|
379
|
+
|
380
|
+
/**
|
381
|
+
* Compare the characters bitwise in this UnicodeString with the first
|
382
|
+
* <TT>srcLength</TT> characters in <TT>srcChars</TT>.
|
383
|
+
* @param srcChars The characters to compare to this UnicodeString.
|
384
|
+
* @param srcLength the number of characters in <TT>srcChars</TT> to compare
|
385
|
+
* @return The result of bitwise character comparison: 0 if this
|
386
|
+
* contains the same characters as <code>srcChars</code>, -1 if the characters in
|
387
|
+
* this are bitwise less than the characters in <code>srcChars</code>, +1 if the
|
388
|
+
* characters in this are bitwise greater than the characters
|
389
|
+
* in <code>srcChars</code>.
|
390
|
+
* @stable ICU 2.0
|
391
|
+
*/
|
392
|
+
inline int8_t compare(const UChar *srcChars,
|
393
|
+
int32_t srcLength) const;
|
394
|
+
|
395
|
+
/**
|
396
|
+
* Compare the characters bitwise in the range
|
397
|
+
* [<TT>start</TT>, <TT>start + length</TT>) with the first
|
398
|
+
* <TT>length</TT> characters in <TT>srcChars</TT>
|
399
|
+
* @param start the offset at which the compare operation begins
|
400
|
+
* @param length the number of characters to compare.
|
401
|
+
* @param srcChars the characters to be compared
|
402
|
+
* @return The result of bitwise character comparison: 0 if this
|
403
|
+
* contains the same characters as <code>srcChars</code>, -1 if the characters in
|
404
|
+
* this are bitwise less than the characters in <code>srcChars</code>, +1 if the
|
405
|
+
* characters in this are bitwise greater than the characters
|
406
|
+
* in <code>srcChars</code>.
|
407
|
+
* @stable ICU 2.0
|
408
|
+
*/
|
409
|
+
inline int8_t compare(int32_t start,
|
410
|
+
int32_t length,
|
411
|
+
const UChar *srcChars) const;
|
412
|
+
|
413
|
+
/**
|
414
|
+
* Compare the characters bitwise in the range
|
415
|
+
* [<TT>start</TT>, <TT>start + length</TT>) with the characters
|
416
|
+
* in <TT>srcChars</TT> in the range
|
417
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
|
418
|
+
* @param start the offset at which the compare operation begins
|
419
|
+
* @param length the number of characters in this to compare
|
420
|
+
* @param srcChars the characters to be compared
|
421
|
+
* @param srcStart the offset into <TT>srcChars</TT> to start comparison
|
422
|
+
* @param srcLength the number of characters in <TT>srcChars</TT> to compare
|
423
|
+
* @return The result of bitwise character comparison: 0 if this
|
424
|
+
* contains the same characters as <code>srcChars</code>, -1 if the characters in
|
425
|
+
* this are bitwise less than the characters in <code>srcChars</code>, +1 if the
|
426
|
+
* characters in this are bitwise greater than the characters
|
427
|
+
* in <code>srcChars</code>.
|
428
|
+
* @stable ICU 2.0
|
429
|
+
*/
|
430
|
+
inline int8_t compare(int32_t start,
|
431
|
+
int32_t length,
|
432
|
+
const UChar *srcChars,
|
433
|
+
int32_t srcStart,
|
434
|
+
int32_t srcLength) const;
|
435
|
+
|
436
|
+
/**
|
437
|
+
* Compare the characters bitwise in the range
|
438
|
+
* [<TT>start</TT>, <TT>limit</TT>) with the characters
|
439
|
+
* in <TT>srcText</TT> in the range
|
440
|
+
* [<TT>srcStart</TT>, <TT>srcLimit</TT>).
|
441
|
+
* @param start the offset at which the compare operation begins
|
442
|
+
* @param limit the offset immediately following the compare operation
|
443
|
+
* @param srcText the text to be compared
|
444
|
+
* @param srcStart the offset into <TT>srcText</TT> to start comparison
|
445
|
+
* @param srcLimit the offset into <TT>srcText</TT> to limit comparison
|
446
|
+
* @return The result of bitwise character comparison: 0 if this
|
447
|
+
* contains the same characters as <code>srcText</code>, -1 if the characters in
|
448
|
+
* this are bitwise less than the characters in <code>srcText</code>, +1 if the
|
449
|
+
* characters in this are bitwise greater than the characters
|
450
|
+
* in <code>srcText</code>.
|
451
|
+
* @stable ICU 2.0
|
452
|
+
*/
|
453
|
+
inline int8_t compareBetween(int32_t start,
|
454
|
+
int32_t limit,
|
455
|
+
const UnicodeString& srcText,
|
456
|
+
int32_t srcStart,
|
457
|
+
int32_t srcLimit) const;
|
458
|
+
|
459
|
+
/**
|
460
|
+
* Compare two Unicode strings in code point order.
|
461
|
+
* The result may be different from the results of compare(), operator<, etc.
|
462
|
+
* if supplementary characters are present:
|
463
|
+
*
|
464
|
+
* In UTF-16, supplementary characters (with code points U+10000 and above) are
|
465
|
+
* stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
|
466
|
+
* which means that they compare as less than some other BMP characters like U+feff.
|
467
|
+
* This function compares Unicode strings in code point order.
|
468
|
+
* If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
|
469
|
+
*
|
470
|
+
* @param text Another string to compare this one to.
|
471
|
+
* @return a negative/zero/positive integer corresponding to whether
|
472
|
+
* this string is less than/equal to/greater than the second one
|
473
|
+
* in code point order
|
474
|
+
* @stable ICU 2.0
|
475
|
+
*/
|
476
|
+
inline int8_t compareCodePointOrder(const UnicodeString& text) const;
|
477
|
+
|
478
|
+
/**
|
479
|
+
* Compare two Unicode strings in code point order.
|
480
|
+
* The result may be different from the results of compare(), operator<, etc.
|
481
|
+
* if supplementary characters are present:
|
482
|
+
*
|
483
|
+
* In UTF-16, supplementary characters (with code points U+10000 and above) are
|
484
|
+
* stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
|
485
|
+
* which means that they compare as less than some other BMP characters like U+feff.
|
486
|
+
* This function compares Unicode strings in code point order.
|
487
|
+
* If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
|
488
|
+
*
|
489
|
+
* @param start The start offset in this string at which the compare operation begins.
|
490
|
+
* @param length The number of code units from this string to compare.
|
491
|
+
* @param srcText Another string to compare this one to.
|
492
|
+
* @return a negative/zero/positive integer corresponding to whether
|
493
|
+
* this string is less than/equal to/greater than the second one
|
494
|
+
* in code point order
|
495
|
+
* @stable ICU 2.0
|
496
|
+
*/
|
497
|
+
inline int8_t compareCodePointOrder(int32_t start,
|
498
|
+
int32_t length,
|
499
|
+
const UnicodeString& srcText) const;
|
500
|
+
|
501
|
+
/**
|
502
|
+
* Compare two Unicode strings in code point order.
|
503
|
+
* The result may be different from the results of compare(), operator<, etc.
|
504
|
+
* if supplementary characters are present:
|
505
|
+
*
|
506
|
+
* In UTF-16, supplementary characters (with code points U+10000 and above) are
|
507
|
+
* stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
|
508
|
+
* which means that they compare as less than some other BMP characters like U+feff.
|
509
|
+
* This function compares Unicode strings in code point order.
|
510
|
+
* If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
|
511
|
+
*
|
512
|
+
* @param start The start offset in this string at which the compare operation begins.
|
513
|
+
* @param length The number of code units from this string to compare.
|
514
|
+
* @param srcText Another string to compare this one to.
|
515
|
+
* @param srcStart The start offset in that string at which the compare operation begins.
|
516
|
+
* @param srcLength The number of code units from that string to compare.
|
517
|
+
* @return a negative/zero/positive integer corresponding to whether
|
518
|
+
* this string is less than/equal to/greater than the second one
|
519
|
+
* in code point order
|
520
|
+
* @stable ICU 2.0
|
521
|
+
*/
|
522
|
+
inline int8_t compareCodePointOrder(int32_t start,
|
523
|
+
int32_t length,
|
524
|
+
const UnicodeString& srcText,
|
525
|
+
int32_t srcStart,
|
526
|
+
int32_t srcLength) const;
|
527
|
+
|
528
|
+
/**
|
529
|
+
* Compare two Unicode strings in code point order.
|
530
|
+
* The result may be different from the results of compare(), operator<, etc.
|
531
|
+
* if supplementary characters are present:
|
532
|
+
*
|
533
|
+
* In UTF-16, supplementary characters (with code points U+10000 and above) are
|
534
|
+
* stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
|
535
|
+
* which means that they compare as less than some other BMP characters like U+feff.
|
536
|
+
* This function compares Unicode strings in code point order.
|
537
|
+
* If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
|
538
|
+
*
|
539
|
+
* @param srcChars A pointer to another string to compare this one to.
|
540
|
+
* @param srcLength The number of code units from that string to compare.
|
541
|
+
* @return a negative/zero/positive integer corresponding to whether
|
542
|
+
* this string is less than/equal to/greater than the second one
|
543
|
+
* in code point order
|
544
|
+
* @stable ICU 2.0
|
545
|
+
*/
|
546
|
+
inline int8_t compareCodePointOrder(const UChar *srcChars,
|
547
|
+
int32_t srcLength) const;
|
548
|
+
|
549
|
+
/**
|
550
|
+
* Compare two Unicode strings in code point order.
|
551
|
+
* The result may be different from the results of compare(), operator<, etc.
|
552
|
+
* if supplementary characters are present:
|
553
|
+
*
|
554
|
+
* In UTF-16, supplementary characters (with code points U+10000 and above) are
|
555
|
+
* stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
|
556
|
+
* which means that they compare as less than some other BMP characters like U+feff.
|
557
|
+
* This function compares Unicode strings in code point order.
|
558
|
+
* If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
|
559
|
+
*
|
560
|
+
* @param start The start offset in this string at which the compare operation begins.
|
561
|
+
* @param length The number of code units from this string to compare.
|
562
|
+
* @param srcChars A pointer to another string to compare this one to.
|
563
|
+
* @return a negative/zero/positive integer corresponding to whether
|
564
|
+
* this string is less than/equal to/greater than the second one
|
565
|
+
* in code point order
|
566
|
+
* @stable ICU 2.0
|
567
|
+
*/
|
568
|
+
inline int8_t compareCodePointOrder(int32_t start,
|
569
|
+
int32_t length,
|
570
|
+
const UChar *srcChars) const;
|
571
|
+
|
572
|
+
/**
|
573
|
+
* Compare two Unicode strings in code point order.
|
574
|
+
* The result may be different from the results of compare(), operator<, etc.
|
575
|
+
* if supplementary characters are present:
|
576
|
+
*
|
577
|
+
* In UTF-16, supplementary characters (with code points U+10000 and above) are
|
578
|
+
* stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
|
579
|
+
* which means that they compare as less than some other BMP characters like U+feff.
|
580
|
+
* This function compares Unicode strings in code point order.
|
581
|
+
* If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
|
582
|
+
*
|
583
|
+
* @param start The start offset in this string at which the compare operation begins.
|
584
|
+
* @param length The number of code units from this string to compare.
|
585
|
+
* @param srcChars A pointer to another string to compare this one to.
|
586
|
+
* @param srcStart The start offset in that string at which the compare operation begins.
|
587
|
+
* @param srcLength The number of code units from that string to compare.
|
588
|
+
* @return a negative/zero/positive integer corresponding to whether
|
589
|
+
* this string is less than/equal to/greater than the second one
|
590
|
+
* in code point order
|
591
|
+
* @stable ICU 2.0
|
592
|
+
*/
|
593
|
+
inline int8_t compareCodePointOrder(int32_t start,
|
594
|
+
int32_t length,
|
595
|
+
const UChar *srcChars,
|
596
|
+
int32_t srcStart,
|
597
|
+
int32_t srcLength) const;
|
598
|
+
|
599
|
+
/**
|
600
|
+
* Compare two Unicode strings in code point order.
|
601
|
+
* The result may be different from the results of compare(), operator<, etc.
|
602
|
+
* if supplementary characters are present:
|
603
|
+
*
|
604
|
+
* In UTF-16, supplementary characters (with code points U+10000 and above) are
|
605
|
+
* stored with pairs of surrogate code units. These have values from 0xd800 to 0xdfff,
|
606
|
+
* which means that they compare as less than some other BMP characters like U+feff.
|
607
|
+
* This function compares Unicode strings in code point order.
|
608
|
+
* If either of the UTF-16 strings is malformed (i.e., it contains unpaired surrogates), then the result is not defined.
|
609
|
+
*
|
610
|
+
* @param start The start offset in this string at which the compare operation begins.
|
611
|
+
* @param limit The offset after the last code unit from this string to compare.
|
612
|
+
* @param srcText Another string to compare this one to.
|
613
|
+
* @param srcStart The start offset in that string at which the compare operation begins.
|
614
|
+
* @param srcLimit The offset after the last code unit from that string to compare.
|
615
|
+
* @return a negative/zero/positive integer corresponding to whether
|
616
|
+
* this string is less than/equal to/greater than the second one
|
617
|
+
* in code point order
|
618
|
+
* @stable ICU 2.0
|
619
|
+
*/
|
620
|
+
inline int8_t compareCodePointOrderBetween(int32_t start,
|
621
|
+
int32_t limit,
|
622
|
+
const UnicodeString& srcText,
|
623
|
+
int32_t srcStart,
|
624
|
+
int32_t srcLimit) const;
|
625
|
+
|
626
|
+
/**
|
627
|
+
* Compare two strings case-insensitively using full case folding.
|
628
|
+
* This is equivalent to this->foldCase(options).compare(text.foldCase(options)).
|
629
|
+
*
|
630
|
+
* @param text Another string to compare this one to.
|
631
|
+
* @param options A bit set of options:
|
632
|
+
* - U_FOLD_CASE_DEFAULT or 0 is used for default options:
|
633
|
+
* Comparison in code unit order with default case folding.
|
634
|
+
*
|
635
|
+
* - U_COMPARE_CODE_POINT_ORDER
|
636
|
+
* Set to choose code point order instead of code unit order
|
637
|
+
* (see u_strCompare for details).
|
638
|
+
*
|
639
|
+
* - U_FOLD_CASE_EXCLUDE_SPECIAL_I
|
640
|
+
*
|
641
|
+
* @return A negative, zero, or positive integer indicating the comparison result.
|
642
|
+
* @stable ICU 2.0
|
643
|
+
*/
|
644
|
+
inline int8_t caseCompare(const UnicodeString& text, uint32_t options) const;
|
645
|
+
|
646
|
+
/**
|
647
|
+
* Compare two strings case-insensitively using full case folding.
|
648
|
+
* This is equivalent to this->foldCase(options).compare(srcText.foldCase(options)).
|
649
|
+
*
|
650
|
+
* @param start The start offset in this string at which the compare operation begins.
|
651
|
+
* @param length The number of code units from this string to compare.
|
652
|
+
* @param srcText Another string to compare this one to.
|
653
|
+
* @param options A bit set of options:
|
654
|
+
* - U_FOLD_CASE_DEFAULT or 0 is used for default options:
|
655
|
+
* Comparison in code unit order with default case folding.
|
656
|
+
*
|
657
|
+
* - U_COMPARE_CODE_POINT_ORDER
|
658
|
+
* Set to choose code point order instead of code unit order
|
659
|
+
* (see u_strCompare for details).
|
660
|
+
*
|
661
|
+
* - U_FOLD_CASE_EXCLUDE_SPECIAL_I
|
662
|
+
*
|
663
|
+
* @return A negative, zero, or positive integer indicating the comparison result.
|
664
|
+
* @stable ICU 2.0
|
665
|
+
*/
|
666
|
+
inline int8_t caseCompare(int32_t start,
|
667
|
+
int32_t length,
|
668
|
+
const UnicodeString& srcText,
|
669
|
+
uint32_t options) const;
|
670
|
+
|
671
|
+
/**
|
672
|
+
* Compare two strings case-insensitively using full case folding.
|
673
|
+
* This is equivalent to this->foldCase(options).compare(srcText.foldCase(options)).
|
674
|
+
*
|
675
|
+
* @param start The start offset in this string at which the compare operation begins.
|
676
|
+
* @param length The number of code units from this string to compare.
|
677
|
+
* @param srcText Another string to compare this one to.
|
678
|
+
* @param srcStart The start offset in that string at which the compare operation begins.
|
679
|
+
* @param srcLength The number of code units from that string to compare.
|
680
|
+
* @param options A bit set of options:
|
681
|
+
* - U_FOLD_CASE_DEFAULT or 0 is used for default options:
|
682
|
+
* Comparison in code unit order with default case folding.
|
683
|
+
*
|
684
|
+
* - U_COMPARE_CODE_POINT_ORDER
|
685
|
+
* Set to choose code point order instead of code unit order
|
686
|
+
* (see u_strCompare for details).
|
687
|
+
*
|
688
|
+
* - U_FOLD_CASE_EXCLUDE_SPECIAL_I
|
689
|
+
*
|
690
|
+
* @return A negative, zero, or positive integer indicating the comparison result.
|
691
|
+
* @stable ICU 2.0
|
692
|
+
*/
|
693
|
+
inline int8_t caseCompare(int32_t start,
|
694
|
+
int32_t length,
|
695
|
+
const UnicodeString& srcText,
|
696
|
+
int32_t srcStart,
|
697
|
+
int32_t srcLength,
|
698
|
+
uint32_t options) const;
|
699
|
+
|
700
|
+
/**
|
701
|
+
* Compare two strings case-insensitively using full case folding.
|
702
|
+
* This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)).
|
703
|
+
*
|
704
|
+
* @param srcChars A pointer to another string to compare this one to.
|
705
|
+
* @param srcLength The number of code units from that string to compare.
|
706
|
+
* @param options A bit set of options:
|
707
|
+
* - U_FOLD_CASE_DEFAULT or 0 is used for default options:
|
708
|
+
* Comparison in code unit order with default case folding.
|
709
|
+
*
|
710
|
+
* - U_COMPARE_CODE_POINT_ORDER
|
711
|
+
* Set to choose code point order instead of code unit order
|
712
|
+
* (see u_strCompare for details).
|
713
|
+
*
|
714
|
+
* - U_FOLD_CASE_EXCLUDE_SPECIAL_I
|
715
|
+
*
|
716
|
+
* @return A negative, zero, or positive integer indicating the comparison result.
|
717
|
+
* @stable ICU 2.0
|
718
|
+
*/
|
719
|
+
inline int8_t caseCompare(const UChar *srcChars,
|
720
|
+
int32_t srcLength,
|
721
|
+
uint32_t options) const;
|
722
|
+
|
723
|
+
/**
|
724
|
+
* Compare two strings case-insensitively using full case folding.
|
725
|
+
* This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)).
|
726
|
+
*
|
727
|
+
* @param start The start offset in this string at which the compare operation begins.
|
728
|
+
* @param length The number of code units from this string to compare.
|
729
|
+
* @param srcChars A pointer to another string to compare this one to.
|
730
|
+
* @param options A bit set of options:
|
731
|
+
* - U_FOLD_CASE_DEFAULT or 0 is used for default options:
|
732
|
+
* Comparison in code unit order with default case folding.
|
733
|
+
*
|
734
|
+
* - U_COMPARE_CODE_POINT_ORDER
|
735
|
+
* Set to choose code point order instead of code unit order
|
736
|
+
* (see u_strCompare for details).
|
737
|
+
*
|
738
|
+
* - U_FOLD_CASE_EXCLUDE_SPECIAL_I
|
739
|
+
*
|
740
|
+
* @return A negative, zero, or positive integer indicating the comparison result.
|
741
|
+
* @stable ICU 2.0
|
742
|
+
*/
|
743
|
+
inline int8_t caseCompare(int32_t start,
|
744
|
+
int32_t length,
|
745
|
+
const UChar *srcChars,
|
746
|
+
uint32_t options) const;
|
747
|
+
|
748
|
+
/**
|
749
|
+
* Compare two strings case-insensitively using full case folding.
|
750
|
+
* This is equivalent to this->foldCase(options).compare(srcChars.foldCase(options)).
|
751
|
+
*
|
752
|
+
* @param start The start offset in this string at which the compare operation begins.
|
753
|
+
* @param length The number of code units from this string to compare.
|
754
|
+
* @param srcChars A pointer to another string to compare this one to.
|
755
|
+
* @param srcStart The start offset in that string at which the compare operation begins.
|
756
|
+
* @param srcLength The number of code units from that string to compare.
|
757
|
+
* @param options A bit set of options:
|
758
|
+
* - U_FOLD_CASE_DEFAULT or 0 is used for default options:
|
759
|
+
* Comparison in code unit order with default case folding.
|
760
|
+
*
|
761
|
+
* - U_COMPARE_CODE_POINT_ORDER
|
762
|
+
* Set to choose code point order instead of code unit order
|
763
|
+
* (see u_strCompare for details).
|
764
|
+
*
|
765
|
+
* - U_FOLD_CASE_EXCLUDE_SPECIAL_I
|
766
|
+
*
|
767
|
+
* @return A negative, zero, or positive integer indicating the comparison result.
|
768
|
+
* @stable ICU 2.0
|
769
|
+
*/
|
770
|
+
inline int8_t caseCompare(int32_t start,
|
771
|
+
int32_t length,
|
772
|
+
const UChar *srcChars,
|
773
|
+
int32_t srcStart,
|
774
|
+
int32_t srcLength,
|
775
|
+
uint32_t options) const;
|
776
|
+
|
777
|
+
/**
|
778
|
+
* Compare two strings case-insensitively using full case folding.
|
779
|
+
* This is equivalent to this->foldCase(options).compareBetween(text.foldCase(options)).
|
780
|
+
*
|
781
|
+
* @param start The start offset in this string at which the compare operation begins.
|
782
|
+
* @param limit The offset after the last code unit from this string to compare.
|
783
|
+
* @param srcText Another string to compare this one to.
|
784
|
+
* @param srcStart The start offset in that string at which the compare operation begins.
|
785
|
+
* @param srcLimit The offset after the last code unit from that string to compare.
|
786
|
+
* @param options A bit set of options:
|
787
|
+
* - U_FOLD_CASE_DEFAULT or 0 is used for default options:
|
788
|
+
* Comparison in code unit order with default case folding.
|
789
|
+
*
|
790
|
+
* - U_COMPARE_CODE_POINT_ORDER
|
791
|
+
* Set to choose code point order instead of code unit order
|
792
|
+
* (see u_strCompare for details).
|
793
|
+
*
|
794
|
+
* - U_FOLD_CASE_EXCLUDE_SPECIAL_I
|
795
|
+
*
|
796
|
+
* @return A negative, zero, or positive integer indicating the comparison result.
|
797
|
+
* @stable ICU 2.0
|
798
|
+
*/
|
799
|
+
inline int8_t caseCompareBetween(int32_t start,
|
800
|
+
int32_t limit,
|
801
|
+
const UnicodeString& srcText,
|
802
|
+
int32_t srcStart,
|
803
|
+
int32_t srcLimit,
|
804
|
+
uint32_t options) const;
|
805
|
+
|
806
|
+
/**
|
807
|
+
* Determine if this starts with the characters in <TT>text</TT>
|
808
|
+
* @param text The text to match.
|
809
|
+
* @return TRUE if this starts with the characters in <TT>text</TT>,
|
810
|
+
* FALSE otherwise
|
811
|
+
* @stable ICU 2.0
|
812
|
+
*/
|
813
|
+
inline UBool startsWith(const UnicodeString& text) const;
|
814
|
+
|
815
|
+
/**
|
816
|
+
* Determine if this starts with the characters in <TT>srcText</TT>
|
817
|
+
* in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
|
818
|
+
* @param srcText The text to match.
|
819
|
+
* @param srcStart the offset into <TT>srcText</TT> to start matching
|
820
|
+
* @param srcLength the number of characters in <TT>srcText</TT> to match
|
821
|
+
* @return TRUE if this starts with the characters in <TT>text</TT>,
|
822
|
+
* FALSE otherwise
|
823
|
+
* @stable ICU 2.0
|
824
|
+
*/
|
825
|
+
inline UBool startsWith(const UnicodeString& srcText,
|
826
|
+
int32_t srcStart,
|
827
|
+
int32_t srcLength) const;
|
828
|
+
|
829
|
+
/**
|
830
|
+
* Determine if this starts with the characters in <TT>srcChars</TT>
|
831
|
+
* @param srcChars The characters to match.
|
832
|
+
* @param srcLength the number of characters in <TT>srcChars</TT>
|
833
|
+
* @return TRUE if this starts with the characters in <TT>srcChars</TT>,
|
834
|
+
* FALSE otherwise
|
835
|
+
* @stable ICU 2.0
|
836
|
+
*/
|
837
|
+
inline UBool startsWith(const UChar *srcChars,
|
838
|
+
int32_t srcLength) const;
|
839
|
+
|
840
|
+
/**
|
841
|
+
* Determine if this ends with the characters in <TT>srcChars</TT>
|
842
|
+
* in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
|
843
|
+
* @param srcChars The characters to match.
|
844
|
+
* @param srcStart the offset into <TT>srcText</TT> to start matching
|
845
|
+
* @param srcLength the number of characters in <TT>srcChars</TT> to match
|
846
|
+
* @return TRUE if this ends with the characters in <TT>srcChars</TT>, FALSE otherwise
|
847
|
+
* @stable ICU 2.0
|
848
|
+
*/
|
849
|
+
inline UBool startsWith(const UChar *srcChars,
|
850
|
+
int32_t srcStart,
|
851
|
+
int32_t srcLength) const;
|
852
|
+
|
853
|
+
/**
|
854
|
+
* Determine if this ends with the characters in <TT>text</TT>
|
855
|
+
* @param text The text to match.
|
856
|
+
* @return TRUE if this ends with the characters in <TT>text</TT>,
|
857
|
+
* FALSE otherwise
|
858
|
+
* @stable ICU 2.0
|
859
|
+
*/
|
860
|
+
inline UBool endsWith(const UnicodeString& text) const;
|
861
|
+
|
862
|
+
/**
|
863
|
+
* Determine if this ends with the characters in <TT>srcText</TT>
|
864
|
+
* in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
|
865
|
+
* @param srcText The text to match.
|
866
|
+
* @param srcStart the offset into <TT>srcText</TT> to start matching
|
867
|
+
* @param srcLength the number of characters in <TT>srcText</TT> to match
|
868
|
+
* @return TRUE if this ends with the characters in <TT>text</TT>,
|
869
|
+
* FALSE otherwise
|
870
|
+
* @stable ICU 2.0
|
871
|
+
*/
|
872
|
+
inline UBool endsWith(const UnicodeString& srcText,
|
873
|
+
int32_t srcStart,
|
874
|
+
int32_t srcLength) const;
|
875
|
+
|
876
|
+
/**
|
877
|
+
* Determine if this ends with the characters in <TT>srcChars</TT>
|
878
|
+
* @param srcChars The characters to match.
|
879
|
+
* @param srcLength the number of characters in <TT>srcChars</TT>
|
880
|
+
* @return TRUE if this ends with the characters in <TT>srcChars</TT>,
|
881
|
+
* FALSE otherwise
|
882
|
+
* @stable ICU 2.0
|
883
|
+
*/
|
884
|
+
inline UBool endsWith(const UChar *srcChars,
|
885
|
+
int32_t srcLength) const;
|
886
|
+
|
887
|
+
/**
|
888
|
+
* Determine if this ends with the characters in <TT>srcChars</TT>
|
889
|
+
* in the range [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
|
890
|
+
* @param srcChars The characters to match.
|
891
|
+
* @param srcStart the offset into <TT>srcText</TT> to start matching
|
892
|
+
* @param srcLength the number of characters in <TT>srcChars</TT> to match
|
893
|
+
* @return TRUE if this ends with the characters in <TT>srcChars</TT>,
|
894
|
+
* FALSE otherwise
|
895
|
+
* @stable ICU 2.0
|
896
|
+
*/
|
897
|
+
inline UBool endsWith(const UChar *srcChars,
|
898
|
+
int32_t srcStart,
|
899
|
+
int32_t srcLength) const;
|
900
|
+
|
901
|
+
|
902
|
+
/* Searching - bitwise only */
|
903
|
+
|
904
|
+
/**
|
905
|
+
* Locate in this the first occurrence of the characters in <TT>text</TT>,
|
906
|
+
* using bitwise comparison.
|
907
|
+
* @param text The text to search for.
|
908
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
909
|
+
* or -1 if not found.
|
910
|
+
* @stable ICU 2.0
|
911
|
+
*/
|
912
|
+
inline int32_t indexOf(const UnicodeString& text) const;
|
913
|
+
|
914
|
+
/**
|
915
|
+
* Locate in this the first occurrence of the characters in <TT>text</TT>
|
916
|
+
* starting at offset <TT>start</TT>, using bitwise comparison.
|
917
|
+
* @param text The text to search for.
|
918
|
+
* @param start The offset at which searching will start.
|
919
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
920
|
+
* or -1 if not found.
|
921
|
+
* @stable ICU 2.0
|
922
|
+
*/
|
923
|
+
inline int32_t indexOf(const UnicodeString& text,
|
924
|
+
int32_t start) const;
|
925
|
+
|
926
|
+
/**
|
927
|
+
* Locate in this the first occurrence in the range
|
928
|
+
* [<TT>start</TT>, <TT>start + length</TT>) of the characters
|
929
|
+
* in <TT>text</TT>, using bitwise comparison.
|
930
|
+
* @param text The text to search for.
|
931
|
+
* @param start The offset at which searching will start.
|
932
|
+
* @param length The number of characters to search
|
933
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
934
|
+
* or -1 if not found.
|
935
|
+
* @stable ICU 2.0
|
936
|
+
*/
|
937
|
+
inline int32_t indexOf(const UnicodeString& text,
|
938
|
+
int32_t start,
|
939
|
+
int32_t length) const;
|
940
|
+
|
941
|
+
/**
|
942
|
+
* Locate in this the first occurrence in the range
|
943
|
+
* [<TT>start</TT>, <TT>start + length</TT>) of the characters
|
944
|
+
* in <TT>srcText</TT> in the range
|
945
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>),
|
946
|
+
* using bitwise comparison.
|
947
|
+
* @param srcText The text to search for.
|
948
|
+
* @param srcStart the offset into <TT>srcText</TT> at which
|
949
|
+
* to start matching
|
950
|
+
* @param srcLength the number of characters in <TT>srcText</TT> to match
|
951
|
+
* @param start the offset into this at which to start matching
|
952
|
+
* @param length the number of characters in this to search
|
953
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
954
|
+
* or -1 if not found.
|
955
|
+
* @stable ICU 2.0
|
956
|
+
*/
|
957
|
+
inline int32_t indexOf(const UnicodeString& srcText,
|
958
|
+
int32_t srcStart,
|
959
|
+
int32_t srcLength,
|
960
|
+
int32_t start,
|
961
|
+
int32_t length) const;
|
962
|
+
|
963
|
+
/**
|
964
|
+
* Locate in this the first occurrence of the characters in
|
965
|
+
* <TT>srcChars</TT>
|
966
|
+
* starting at offset <TT>start</TT>, using bitwise comparison.
|
967
|
+
* @param srcChars The text to search for.
|
968
|
+
* @param srcLength the number of characters in <TT>srcChars</TT> to match
|
969
|
+
* @param start the offset into this at which to start matching
|
970
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
971
|
+
* or -1 if not found.
|
972
|
+
* @stable ICU 2.0
|
973
|
+
*/
|
974
|
+
inline int32_t indexOf(const UChar *srcChars,
|
975
|
+
int32_t srcLength,
|
976
|
+
int32_t start) const;
|
977
|
+
|
978
|
+
/**
|
979
|
+
* Locate in this the first occurrence in the range
|
980
|
+
* [<TT>start</TT>, <TT>start + length</TT>) of the characters
|
981
|
+
* in <TT>srcChars</TT>, using bitwise comparison.
|
982
|
+
* @param srcChars The text to search for.
|
983
|
+
* @param srcLength the number of characters in <TT>srcChars</TT>
|
984
|
+
* @param start The offset at which searching will start.
|
985
|
+
* @param length The number of characters to search
|
986
|
+
* @return The offset into this of the start of <TT>srcChars</TT>,
|
987
|
+
* or -1 if not found.
|
988
|
+
* @stable ICU 2.0
|
989
|
+
*/
|
990
|
+
inline int32_t indexOf(const UChar *srcChars,
|
991
|
+
int32_t srcLength,
|
992
|
+
int32_t start,
|
993
|
+
int32_t length) const;
|
994
|
+
|
995
|
+
/**
|
996
|
+
* Locate in this the first occurrence in the range
|
997
|
+
* [<TT>start</TT>, <TT>start + length</TT>) of the characters
|
998
|
+
* in <TT>srcChars</TT> in the range
|
999
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>),
|
1000
|
+
* using bitwise comparison.
|
1001
|
+
* @param srcChars The text to search for.
|
1002
|
+
* @param srcStart the offset into <TT>srcChars</TT> at which
|
1003
|
+
* to start matching
|
1004
|
+
* @param srcLength the number of characters in <TT>srcChars</TT> to match
|
1005
|
+
* @param start the offset into this at which to start matching
|
1006
|
+
* @param length the number of characters in this to search
|
1007
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
1008
|
+
* or -1 if not found.
|
1009
|
+
* @stable ICU 2.0
|
1010
|
+
*/
|
1011
|
+
int32_t indexOf(const UChar *srcChars,
|
1012
|
+
int32_t srcStart,
|
1013
|
+
int32_t srcLength,
|
1014
|
+
int32_t start,
|
1015
|
+
int32_t length) const;
|
1016
|
+
|
1017
|
+
/**
|
1018
|
+
* Locate in this the first occurrence of the BMP code point <code>c</code>,
|
1019
|
+
* using bitwise comparison.
|
1020
|
+
* @param c The code unit to search for.
|
1021
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1022
|
+
* @stable ICU 2.0
|
1023
|
+
*/
|
1024
|
+
inline int32_t indexOf(UChar c) const;
|
1025
|
+
|
1026
|
+
/**
|
1027
|
+
* Locate in this the first occurrence of the code point <TT>c</TT>,
|
1028
|
+
* using bitwise comparison.
|
1029
|
+
*
|
1030
|
+
* @param c The code point to search for.
|
1031
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1032
|
+
* @stable ICU 2.0
|
1033
|
+
*/
|
1034
|
+
inline int32_t indexOf(UChar32 c) const;
|
1035
|
+
|
1036
|
+
/**
|
1037
|
+
* Locate in this the first occurrence of the BMP code point <code>c</code>,
|
1038
|
+
* starting at offset <TT>start</TT>, using bitwise comparison.
|
1039
|
+
* @param c The code unit to search for.
|
1040
|
+
* @param start The offset at which searching will start.
|
1041
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1042
|
+
* @stable ICU 2.0
|
1043
|
+
*/
|
1044
|
+
inline int32_t indexOf(UChar c,
|
1045
|
+
int32_t start) const;
|
1046
|
+
|
1047
|
+
/**
|
1048
|
+
* Locate in this the first occurrence of the code point <TT>c</TT>
|
1049
|
+
* starting at offset <TT>start</TT>, using bitwise comparison.
|
1050
|
+
*
|
1051
|
+
* @param c The code point to search for.
|
1052
|
+
* @param start The offset at which searching will start.
|
1053
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1054
|
+
* @stable ICU 2.0
|
1055
|
+
*/
|
1056
|
+
inline int32_t indexOf(UChar32 c,
|
1057
|
+
int32_t start) const;
|
1058
|
+
|
1059
|
+
/**
|
1060
|
+
* Locate in this the first occurrence of the BMP code point <code>c</code>
|
1061
|
+
* in the range [<TT>start</TT>, <TT>start + length</TT>),
|
1062
|
+
* using bitwise comparison.
|
1063
|
+
* @param c The code unit to search for.
|
1064
|
+
* @param start the offset into this at which to start matching
|
1065
|
+
* @param length the number of characters in this to search
|
1066
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1067
|
+
* @stable ICU 2.0
|
1068
|
+
*/
|
1069
|
+
inline int32_t indexOf(UChar c,
|
1070
|
+
int32_t start,
|
1071
|
+
int32_t length) const;
|
1072
|
+
|
1073
|
+
/**
|
1074
|
+
* Locate in this the first occurrence of the code point <TT>c</TT>
|
1075
|
+
* in the range [<TT>start</TT>, <TT>start + length</TT>),
|
1076
|
+
* using bitwise comparison.
|
1077
|
+
*
|
1078
|
+
* @param c The code point to search for.
|
1079
|
+
* @param start the offset into this at which to start matching
|
1080
|
+
* @param length the number of characters in this to search
|
1081
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1082
|
+
* @stable ICU 2.0
|
1083
|
+
*/
|
1084
|
+
inline int32_t indexOf(UChar32 c,
|
1085
|
+
int32_t start,
|
1086
|
+
int32_t length) const;
|
1087
|
+
|
1088
|
+
/**
|
1089
|
+
* Locate in this the last occurrence of the characters in <TT>text</TT>,
|
1090
|
+
* using bitwise comparison.
|
1091
|
+
* @param text The text to search for.
|
1092
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
1093
|
+
* or -1 if not found.
|
1094
|
+
* @stable ICU 2.0
|
1095
|
+
*/
|
1096
|
+
inline int32_t lastIndexOf(const UnicodeString& text) const;
|
1097
|
+
|
1098
|
+
/**
|
1099
|
+
* Locate in this the last occurrence of the characters in <TT>text</TT>
|
1100
|
+
* starting at offset <TT>start</TT>, using bitwise comparison.
|
1101
|
+
* @param text The text to search for.
|
1102
|
+
* @param start The offset at which searching will start.
|
1103
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
1104
|
+
* or -1 if not found.
|
1105
|
+
* @stable ICU 2.0
|
1106
|
+
*/
|
1107
|
+
inline int32_t lastIndexOf(const UnicodeString& text,
|
1108
|
+
int32_t start) const;
|
1109
|
+
|
1110
|
+
/**
|
1111
|
+
* Locate in this the last occurrence in the range
|
1112
|
+
* [<TT>start</TT>, <TT>start + length</TT>) of the characters
|
1113
|
+
* in <TT>text</TT>, using bitwise comparison.
|
1114
|
+
* @param text The text to search for.
|
1115
|
+
* @param start The offset at which searching will start.
|
1116
|
+
* @param length The number of characters to search
|
1117
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
1118
|
+
* or -1 if not found.
|
1119
|
+
* @stable ICU 2.0
|
1120
|
+
*/
|
1121
|
+
inline int32_t lastIndexOf(const UnicodeString& text,
|
1122
|
+
int32_t start,
|
1123
|
+
int32_t length) const;
|
1124
|
+
|
1125
|
+
/**
|
1126
|
+
* Locate in this the last occurrence in the range
|
1127
|
+
* [<TT>start</TT>, <TT>start + length</TT>) of the characters
|
1128
|
+
* in <TT>srcText</TT> in the range
|
1129
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>),
|
1130
|
+
* using bitwise comparison.
|
1131
|
+
* @param srcText The text to search for.
|
1132
|
+
* @param srcStart the offset into <TT>srcText</TT> at which
|
1133
|
+
* to start matching
|
1134
|
+
* @param srcLength the number of characters in <TT>srcText</TT> to match
|
1135
|
+
* @param start the offset into this at which to start matching
|
1136
|
+
* @param length the number of characters in this to search
|
1137
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
1138
|
+
* or -1 if not found.
|
1139
|
+
* @stable ICU 2.0
|
1140
|
+
*/
|
1141
|
+
inline int32_t lastIndexOf(const UnicodeString& srcText,
|
1142
|
+
int32_t srcStart,
|
1143
|
+
int32_t srcLength,
|
1144
|
+
int32_t start,
|
1145
|
+
int32_t length) const;
|
1146
|
+
|
1147
|
+
/**
|
1148
|
+
* Locate in this the last occurrence of the characters in <TT>srcChars</TT>
|
1149
|
+
* starting at offset <TT>start</TT>, using bitwise comparison.
|
1150
|
+
* @param srcChars The text to search for.
|
1151
|
+
* @param srcLength the number of characters in <TT>srcChars</TT> to match
|
1152
|
+
* @param start the offset into this at which to start matching
|
1153
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
1154
|
+
* or -1 if not found.
|
1155
|
+
* @stable ICU 2.0
|
1156
|
+
*/
|
1157
|
+
inline int32_t lastIndexOf(const UChar *srcChars,
|
1158
|
+
int32_t srcLength,
|
1159
|
+
int32_t start) const;
|
1160
|
+
|
1161
|
+
/**
|
1162
|
+
* Locate in this the last occurrence in the range
|
1163
|
+
* [<TT>start</TT>, <TT>start + length</TT>) of the characters
|
1164
|
+
* in <TT>srcChars</TT>, using bitwise comparison.
|
1165
|
+
* @param srcChars The text to search for.
|
1166
|
+
* @param srcLength the number of characters in <TT>srcChars</TT>
|
1167
|
+
* @param start The offset at which searching will start.
|
1168
|
+
* @param length The number of characters to search
|
1169
|
+
* @return The offset into this of the start of <TT>srcChars</TT>,
|
1170
|
+
* or -1 if not found.
|
1171
|
+
* @stable ICU 2.0
|
1172
|
+
*/
|
1173
|
+
inline int32_t lastIndexOf(const UChar *srcChars,
|
1174
|
+
int32_t srcLength,
|
1175
|
+
int32_t start,
|
1176
|
+
int32_t length) const;
|
1177
|
+
|
1178
|
+
/**
|
1179
|
+
* Locate in this the last occurrence in the range
|
1180
|
+
* [<TT>start</TT>, <TT>start + length</TT>) of the characters
|
1181
|
+
* in <TT>srcChars</TT> in the range
|
1182
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>),
|
1183
|
+
* using bitwise comparison.
|
1184
|
+
* @param srcChars The text to search for.
|
1185
|
+
* @param srcStart the offset into <TT>srcChars</TT> at which
|
1186
|
+
* to start matching
|
1187
|
+
* @param srcLength the number of characters in <TT>srcChars</TT> to match
|
1188
|
+
* @param start the offset into this at which to start matching
|
1189
|
+
* @param length the number of characters in this to search
|
1190
|
+
* @return The offset into this of the start of <TT>text</TT>,
|
1191
|
+
* or -1 if not found.
|
1192
|
+
* @stable ICU 2.0
|
1193
|
+
*/
|
1194
|
+
int32_t lastIndexOf(const UChar *srcChars,
|
1195
|
+
int32_t srcStart,
|
1196
|
+
int32_t srcLength,
|
1197
|
+
int32_t start,
|
1198
|
+
int32_t length) const;
|
1199
|
+
|
1200
|
+
/**
|
1201
|
+
* Locate in this the last occurrence of the BMP code point <code>c</code>,
|
1202
|
+
* using bitwise comparison.
|
1203
|
+
* @param c The code unit to search for.
|
1204
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1205
|
+
* @stable ICU 2.0
|
1206
|
+
*/
|
1207
|
+
inline int32_t lastIndexOf(UChar c) const;
|
1208
|
+
|
1209
|
+
/**
|
1210
|
+
* Locate in this the last occurrence of the code point <TT>c</TT>,
|
1211
|
+
* using bitwise comparison.
|
1212
|
+
*
|
1213
|
+
* @param c The code point to search for.
|
1214
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1215
|
+
* @stable ICU 2.0
|
1216
|
+
*/
|
1217
|
+
inline int32_t lastIndexOf(UChar32 c) const;
|
1218
|
+
|
1219
|
+
/**
|
1220
|
+
* Locate in this the last occurrence of the BMP code point <code>c</code>
|
1221
|
+
* starting at offset <TT>start</TT>, using bitwise comparison.
|
1222
|
+
* @param c The code unit to search for.
|
1223
|
+
* @param start The offset at which searching will start.
|
1224
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1225
|
+
* @stable ICU 2.0
|
1226
|
+
*/
|
1227
|
+
inline int32_t lastIndexOf(UChar c,
|
1228
|
+
int32_t start) const;
|
1229
|
+
|
1230
|
+
/**
|
1231
|
+
* Locate in this the last occurrence of the code point <TT>c</TT>
|
1232
|
+
* starting at offset <TT>start</TT>, using bitwise comparison.
|
1233
|
+
*
|
1234
|
+
* @param c The code point to search for.
|
1235
|
+
* @param start The offset at which searching will start.
|
1236
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1237
|
+
* @stable ICU 2.0
|
1238
|
+
*/
|
1239
|
+
inline int32_t lastIndexOf(UChar32 c,
|
1240
|
+
int32_t start) const;
|
1241
|
+
|
1242
|
+
/**
|
1243
|
+
* Locate in this the last occurrence of the BMP code point <code>c</code>
|
1244
|
+
* in the range [<TT>start</TT>, <TT>start + length</TT>),
|
1245
|
+
* using bitwise comparison.
|
1246
|
+
* @param c The code unit to search for.
|
1247
|
+
* @param start the offset into this at which to start matching
|
1248
|
+
* @param length the number of characters in this to search
|
1249
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1250
|
+
* @stable ICU 2.0
|
1251
|
+
*/
|
1252
|
+
inline int32_t lastIndexOf(UChar c,
|
1253
|
+
int32_t start,
|
1254
|
+
int32_t length) const;
|
1255
|
+
|
1256
|
+
/**
|
1257
|
+
* Locate in this the last occurrence of the code point <TT>c</TT>
|
1258
|
+
* in the range [<TT>start</TT>, <TT>start + length</TT>),
|
1259
|
+
* using bitwise comparison.
|
1260
|
+
*
|
1261
|
+
* @param c The code point to search for.
|
1262
|
+
* @param start the offset into this at which to start matching
|
1263
|
+
* @param length the number of characters in this to search
|
1264
|
+
* @return The offset into this of <TT>c</TT>, or -1 if not found.
|
1265
|
+
* @stable ICU 2.0
|
1266
|
+
*/
|
1267
|
+
inline int32_t lastIndexOf(UChar32 c,
|
1268
|
+
int32_t start,
|
1269
|
+
int32_t length) const;
|
1270
|
+
|
1271
|
+
|
1272
|
+
/* Character access */
|
1273
|
+
|
1274
|
+
/**
|
1275
|
+
* Return the code unit at offset <tt>offset</tt>.
|
1276
|
+
* If the offset is not valid (0..length()-1) then U+ffff is returned.
|
1277
|
+
* @param offset a valid offset into the text
|
1278
|
+
* @return the code unit at offset <tt>offset</tt>
|
1279
|
+
* or 0xffff if the offset is not valid for this string
|
1280
|
+
* @stable ICU 2.0
|
1281
|
+
*/
|
1282
|
+
inline UChar charAt(int32_t offset) const;
|
1283
|
+
|
1284
|
+
/**
|
1285
|
+
* Return the code unit at offset <tt>offset</tt>.
|
1286
|
+
* If the offset is not valid (0..length()-1) then U+ffff is returned.
|
1287
|
+
* @param offset a valid offset into the text
|
1288
|
+
* @return the code unit at offset <tt>offset</tt>
|
1289
|
+
* @stable ICU 2.0
|
1290
|
+
*/
|
1291
|
+
inline UChar operator[] (int32_t offset) const;
|
1292
|
+
|
1293
|
+
/**
|
1294
|
+
* Return the code point that contains the code unit
|
1295
|
+
* at offset <tt>offset</tt>.
|
1296
|
+
* If the offset is not valid (0..length()-1) then U+ffff is returned.
|
1297
|
+
* @param offset a valid offset into the text
|
1298
|
+
* that indicates the text offset of any of the code units
|
1299
|
+
* that will be assembled into a code point (21-bit value) and returned
|
1300
|
+
* @return the code point of text at <tt>offset</tt>
|
1301
|
+
* or 0xffff if the offset is not valid for this string
|
1302
|
+
* @stable ICU 2.0
|
1303
|
+
*/
|
1304
|
+
UChar32 char32At(int32_t offset) const;
|
1305
|
+
|
1306
|
+
/**
|
1307
|
+
* Adjust a random-access offset so that
|
1308
|
+
* it points to the beginning of a Unicode character.
|
1309
|
+
* The offset that is passed in points to
|
1310
|
+
* any code unit of a code point,
|
1311
|
+
* while the returned offset will point to the first code unit
|
1312
|
+
* of the same code point.
|
1313
|
+
* In UTF-16, if the input offset points to a second surrogate
|
1314
|
+
* of a surrogate pair, then the returned offset will point
|
1315
|
+
* to the first surrogate.
|
1316
|
+
* @param offset a valid offset into one code point of the text
|
1317
|
+
* @return offset of the first code unit of the same code point
|
1318
|
+
* @see U16_SET_CP_START
|
1319
|
+
* @stable ICU 2.0
|
1320
|
+
*/
|
1321
|
+
int32_t getChar32Start(int32_t offset) const;
|
1322
|
+
|
1323
|
+
/**
|
1324
|
+
* Adjust a random-access offset so that
|
1325
|
+
* it points behind a Unicode character.
|
1326
|
+
* The offset that is passed in points behind
|
1327
|
+
* any code unit of a code point,
|
1328
|
+
* while the returned offset will point behind the last code unit
|
1329
|
+
* of the same code point.
|
1330
|
+
* In UTF-16, if the input offset points behind the first surrogate
|
1331
|
+
* (i.e., to the second surrogate)
|
1332
|
+
* of a surrogate pair, then the returned offset will point
|
1333
|
+
* behind the second surrogate (i.e., to the first surrogate).
|
1334
|
+
* @param offset a valid offset after any code unit of a code point of the text
|
1335
|
+
* @return offset of the first code unit after the same code point
|
1336
|
+
* @see U16_SET_CP_LIMIT
|
1337
|
+
* @stable ICU 2.0
|
1338
|
+
*/
|
1339
|
+
int32_t getChar32Limit(int32_t offset) const;
|
1340
|
+
|
1341
|
+
/**
|
1342
|
+
* Move the code unit index along the string by delta code points.
|
1343
|
+
* Interpret the input index as a code unit-based offset into the string,
|
1344
|
+
* move the index forward or backward by delta code points, and
|
1345
|
+
* return the resulting index.
|
1346
|
+
* The input index should point to the first code unit of a code point,
|
1347
|
+
* if there is more than one.
|
1348
|
+
*
|
1349
|
+
* Both input and output indexes are code unit-based as for all
|
1350
|
+
* string indexes/offsets in ICU (and other libraries, like MBCS char*).
|
1351
|
+
* If delta<0 then the index is moved backward (toward the start of the string).
|
1352
|
+
* If delta>0 then the index is moved forward (toward the end of the string).
|
1353
|
+
*
|
1354
|
+
* This behaves like CharacterIterator::move32(delta, kCurrent).
|
1355
|
+
*
|
1356
|
+
* Behavior for out-of-bounds indexes:
|
1357
|
+
* <code>moveIndex32</code> pins the input index to 0..length(), i.e.,
|
1358
|
+
* if the input index<0 then it is pinned to 0;
|
1359
|
+
* if it is index>length() then it is pinned to length().
|
1360
|
+
* Afterwards, the index is moved by <code>delta</code> code points
|
1361
|
+
* forward or backward,
|
1362
|
+
* but no further backward than to 0 and no further forward than to length().
|
1363
|
+
* The resulting index return value will be in between 0 and length(), inclusively.
|
1364
|
+
*
|
1365
|
+
* Examples:
|
1366
|
+
* <pre>
|
1367
|
+
* // s has code points 'a' U+10000 'b' U+10ffff U+2029
|
1368
|
+
* UnicodeString s=UNICODE_STRING("a\\U00010000b\\U0010ffff\\u2029", 31).unescape();
|
1369
|
+
*
|
1370
|
+
* // initial index: position of U+10000
|
1371
|
+
* int32_t index=1;
|
1372
|
+
*
|
1373
|
+
* // the following examples will all result in index==4, position of U+10ffff
|
1374
|
+
*
|
1375
|
+
* // skip 2 code points from some position in the string
|
1376
|
+
* index=s.moveIndex32(index, 2); // skips U+10000 and 'b'
|
1377
|
+
*
|
1378
|
+
* // go to the 3rd code point from the start of s (0-based)
|
1379
|
+
* index=s.moveIndex32(0, 3); // skips 'a', U+10000, and 'b'
|
1380
|
+
*
|
1381
|
+
* // go to the next-to-last code point of s
|
1382
|
+
* index=s.moveIndex32(s.length(), -2); // backward-skips U+2029 and U+10ffff
|
1383
|
+
* </pre>
|
1384
|
+
*
|
1385
|
+
* @param index input code unit index
|
1386
|
+
* @param delta (signed) code point count to move the index forward or backward
|
1387
|
+
* in the string
|
1388
|
+
* @return the resulting code unit index
|
1389
|
+
* @stable ICU 2.0
|
1390
|
+
*/
|
1391
|
+
int32_t moveIndex32(int32_t index, int32_t delta) const;
|
1392
|
+
|
1393
|
+
/* Substring extraction */
|
1394
|
+
|
1395
|
+
/**
|
1396
|
+
* Copy the characters in the range
|
1397
|
+
* [<tt>start</tt>, <tt>start + length</tt>) into the array <tt>dst</tt>,
|
1398
|
+
* beginning at <tt>dstStart</tt>.
|
1399
|
+
* If the string aliases to <code>dst</code> itself as an external buffer,
|
1400
|
+
* then extract() will not copy the contents.
|
1401
|
+
*
|
1402
|
+
* @param start offset of first character which will be copied into the array
|
1403
|
+
* @param length the number of characters to extract
|
1404
|
+
* @param dst array in which to copy characters. The length of <tt>dst</tt>
|
1405
|
+
* must be at least (<tt>dstStart + length</tt>).
|
1406
|
+
* @param dstStart the offset in <TT>dst</TT> where the first character
|
1407
|
+
* will be extracted
|
1408
|
+
* @stable ICU 2.0
|
1409
|
+
*/
|
1410
|
+
inline void extract(int32_t start,
|
1411
|
+
int32_t length,
|
1412
|
+
UChar *dst,
|
1413
|
+
int32_t dstStart = 0) const;
|
1414
|
+
|
1415
|
+
/**
|
1416
|
+
* Copy the contents of the string into dest.
|
1417
|
+
* This is a convenience function that
|
1418
|
+
* checks if there is enough space in dest,
|
1419
|
+
* extracts the entire string if possible,
|
1420
|
+
* and NUL-terminates dest if possible.
|
1421
|
+
*
|
1422
|
+
* If the string fits into dest but cannot be NUL-terminated
|
1423
|
+
* (length()==destCapacity) then the error code is set to U_STRING_NOT_TERMINATED_WARNING.
|
1424
|
+
* If the string itself does not fit into dest
|
1425
|
+
* (length()>destCapacity) then the error code is set to U_BUFFER_OVERFLOW_ERROR.
|
1426
|
+
*
|
1427
|
+
* If the string aliases to <code>dest</code> itself as an external buffer,
|
1428
|
+
* then extract() will not copy the contents.
|
1429
|
+
*
|
1430
|
+
* @param dest Destination string buffer.
|
1431
|
+
* @param destCapacity Number of UChars available at dest.
|
1432
|
+
* @param errorCode ICU error code.
|
1433
|
+
* @return length()
|
1434
|
+
* @stable ICU 2.0
|
1435
|
+
*/
|
1436
|
+
int32_t
|
1437
|
+
extract(UChar *dest, int32_t destCapacity,
|
1438
|
+
UErrorCode &errorCode) const;
|
1439
|
+
|
1440
|
+
/**
|
1441
|
+
* Copy the characters in the range
|
1442
|
+
* [<tt>start</tt>, <tt>start + length</tt>) into the UnicodeString
|
1443
|
+
* <tt>target</tt>.
|
1444
|
+
* @param start offset of first character which will be copied
|
1445
|
+
* @param length the number of characters to extract
|
1446
|
+
* @param target UnicodeString into which to copy characters.
|
1447
|
+
* @return A reference to <TT>target</TT>
|
1448
|
+
* @stable ICU 2.0
|
1449
|
+
*/
|
1450
|
+
inline void extract(int32_t start,
|
1451
|
+
int32_t length,
|
1452
|
+
UnicodeString& target) const;
|
1453
|
+
|
1454
|
+
/**
|
1455
|
+
* Copy the characters in the range [<tt>start</tt>, <tt>limit</tt>)
|
1456
|
+
* into the array <tt>dst</tt>, beginning at <tt>dstStart</tt>.
|
1457
|
+
* @param start offset of first character which will be copied into the array
|
1458
|
+
* @param limit offset immediately following the last character to be copied
|
1459
|
+
* @param dst array in which to copy characters. The length of <tt>dst</tt>
|
1460
|
+
* must be at least (<tt>dstStart + (limit - start)</tt>).
|
1461
|
+
* @param dstStart the offset in <TT>dst</TT> where the first character
|
1462
|
+
* will be extracted
|
1463
|
+
* @stable ICU 2.0
|
1464
|
+
*/
|
1465
|
+
inline void extractBetween(int32_t start,
|
1466
|
+
int32_t limit,
|
1467
|
+
UChar *dst,
|
1468
|
+
int32_t dstStart = 0) const;
|
1469
|
+
|
1470
|
+
/**
|
1471
|
+
* Copy the characters in the range [<tt>start</tt>, <tt>limit</tt>)
|
1472
|
+
* into the UnicodeString <tt>target</tt>. Replaceable API.
|
1473
|
+
* @param start offset of first character which will be copied
|
1474
|
+
* @param limit offset immediately following the last character to be copied
|
1475
|
+
* @param target UnicodeString into which to copy characters.
|
1476
|
+
* @return A reference to <TT>target</TT>
|
1477
|
+
* @stable ICU 2.0
|
1478
|
+
*/
|
1479
|
+
virtual void extractBetween(int32_t start,
|
1480
|
+
int32_t limit,
|
1481
|
+
UnicodeString& target) const;
|
1482
|
+
|
1483
|
+
/**
|
1484
|
+
* Copy the characters in the range
|
1485
|
+
* [<tt>start</TT>, <tt>start + length</TT>) into an array of characters.
|
1486
|
+
* All characters must be invariant (see utypes.h).
|
1487
|
+
* Use US_INV as the last, signature-distinguishing parameter.
|
1488
|
+
*
|
1489
|
+
* This function does not write any more than <code>targetLength</code>
|
1490
|
+
* characters but returns the length of the entire output string
|
1491
|
+
* so that one can allocate a larger buffer and call the function again
|
1492
|
+
* if necessary.
|
1493
|
+
* The output string is NUL-terminated if possible.
|
1494
|
+
*
|
1495
|
+
* @param start offset of first character which will be copied
|
1496
|
+
* @param startLength the number of characters to extract
|
1497
|
+
* @param target the target buffer for extraction, can be NULL
|
1498
|
+
* if targetLength is 0
|
1499
|
+
* @param targetCapacity the length of the target buffer
|
1500
|
+
* @param inv Signature-distinguishing paramater, use US_INV.
|
1501
|
+
* @return the output string length, not including the terminating NUL
|
1502
|
+
* @stable ICU 3.2
|
1503
|
+
*/
|
1504
|
+
int32_t extract(int32_t start,
|
1505
|
+
int32_t startLength,
|
1506
|
+
char *target,
|
1507
|
+
int32_t targetCapacity,
|
1508
|
+
enum EInvariant inv) const;
|
1509
|
+
|
1510
|
+
#if U_CHARSET_IS_UTF8 || !UCONFIG_NO_CONVERSION
|
1511
|
+
|
1512
|
+
/**
|
1513
|
+
* Copy the characters in the range
|
1514
|
+
* [<tt>start</TT>, <tt>start + length</TT>) into an array of characters
|
1515
|
+
* in the platform's default codepage.
|
1516
|
+
* This function does not write any more than <code>targetLength</code>
|
1517
|
+
* characters but returns the length of the entire output string
|
1518
|
+
* so that one can allocate a larger buffer and call the function again
|
1519
|
+
* if necessary.
|
1520
|
+
* The output string is NUL-terminated if possible.
|
1521
|
+
*
|
1522
|
+
* @param start offset of first character which will be copied
|
1523
|
+
* @param startLength the number of characters to extract
|
1524
|
+
* @param target the target buffer for extraction
|
1525
|
+
* @param targetLength the length of the target buffer
|
1526
|
+
* If <TT>target</TT> is NULL, then the number of bytes required for
|
1527
|
+
* <TT>target</TT> is returned.
|
1528
|
+
* @return the output string length, not including the terminating NUL
|
1529
|
+
* @stable ICU 2.0
|
1530
|
+
*/
|
1531
|
+
int32_t extract(int32_t start,
|
1532
|
+
int32_t startLength,
|
1533
|
+
char *target,
|
1534
|
+
uint32_t targetLength) const;
|
1535
|
+
|
1536
|
+
#endif
|
1537
|
+
|
1538
|
+
#if !UCONFIG_NO_CONVERSION
|
1539
|
+
|
1540
|
+
/**
|
1541
|
+
* Copy the characters in the range
|
1542
|
+
* [<tt>start</TT>, <tt>start + length</TT>) into an array of characters
|
1543
|
+
* in a specified codepage.
|
1544
|
+
* The output string is NUL-terminated.
|
1545
|
+
*
|
1546
|
+
* Recommendation: For invariant-character strings use
|
1547
|
+
* extract(int32_t start, int32_t length, char *target, int32_t targetCapacity, enum EInvariant inv) const
|
1548
|
+
* because it avoids object code dependencies of UnicodeString on
|
1549
|
+
* the conversion code.
|
1550
|
+
*
|
1551
|
+
* @param start offset of first character which will be copied
|
1552
|
+
* @param startLength the number of characters to extract
|
1553
|
+
* @param target the target buffer for extraction
|
1554
|
+
* @param codepage the desired codepage for the characters. 0 has
|
1555
|
+
* the special meaning of the default codepage
|
1556
|
+
* If <code>codepage</code> is an empty string (<code>""</code>),
|
1557
|
+
* then a simple conversion is performed on the codepage-invariant
|
1558
|
+
* subset ("invariant characters") of the platform encoding. See utypes.h.
|
1559
|
+
* If <TT>target</TT> is NULL, then the number of bytes required for
|
1560
|
+
* <TT>target</TT> is returned. It is assumed that the target is big enough
|
1561
|
+
* to fit all of the characters.
|
1562
|
+
* @return the output string length, not including the terminating NUL
|
1563
|
+
* @stable ICU 2.0
|
1564
|
+
*/
|
1565
|
+
inline int32_t extract(int32_t start,
|
1566
|
+
int32_t startLength,
|
1567
|
+
char *target,
|
1568
|
+
const char *codepage = 0) const;
|
1569
|
+
|
1570
|
+
/**
|
1571
|
+
* Copy the characters in the range
|
1572
|
+
* [<tt>start</TT>, <tt>start + length</TT>) into an array of characters
|
1573
|
+
* in a specified codepage.
|
1574
|
+
* This function does not write any more than <code>targetLength</code>
|
1575
|
+
* characters but returns the length of the entire output string
|
1576
|
+
* so that one can allocate a larger buffer and call the function again
|
1577
|
+
* if necessary.
|
1578
|
+
* The output string is NUL-terminated if possible.
|
1579
|
+
*
|
1580
|
+
* Recommendation: For invariant-character strings use
|
1581
|
+
* extract(int32_t start, int32_t length, char *target, int32_t targetCapacity, enum EInvariant inv) const
|
1582
|
+
* because it avoids object code dependencies of UnicodeString on
|
1583
|
+
* the conversion code.
|
1584
|
+
*
|
1585
|
+
* @param start offset of first character which will be copied
|
1586
|
+
* @param startLength the number of characters to extract
|
1587
|
+
* @param target the target buffer for extraction
|
1588
|
+
* @param targetLength the length of the target buffer
|
1589
|
+
* @param codepage the desired codepage for the characters. 0 has
|
1590
|
+
* the special meaning of the default codepage
|
1591
|
+
* If <code>codepage</code> is an empty string (<code>""</code>),
|
1592
|
+
* then a simple conversion is performed on the codepage-invariant
|
1593
|
+
* subset ("invariant characters") of the platform encoding. See utypes.h.
|
1594
|
+
* If <TT>target</TT> is NULL, then the number of bytes required for
|
1595
|
+
* <TT>target</TT> is returned.
|
1596
|
+
* @return the output string length, not including the terminating NUL
|
1597
|
+
* @stable ICU 2.0
|
1598
|
+
*/
|
1599
|
+
int32_t extract(int32_t start,
|
1600
|
+
int32_t startLength,
|
1601
|
+
char *target,
|
1602
|
+
uint32_t targetLength,
|
1603
|
+
const char *codepage) const;
|
1604
|
+
|
1605
|
+
/**
|
1606
|
+
* Convert the UnicodeString into a codepage string using an existing UConverter.
|
1607
|
+
* The output string is NUL-terminated if possible.
|
1608
|
+
*
|
1609
|
+
* This function avoids the overhead of opening and closing a converter if
|
1610
|
+
* multiple strings are extracted.
|
1611
|
+
*
|
1612
|
+
* @param dest destination string buffer, can be NULL if destCapacity==0
|
1613
|
+
* @param destCapacity the number of chars available at dest
|
1614
|
+
* @param cnv the converter object to be used (ucnv_resetFromUnicode() will be called),
|
1615
|
+
* or NULL for the default converter
|
1616
|
+
* @param errorCode normal ICU error code
|
1617
|
+
* @return the length of the output string, not counting the terminating NUL;
|
1618
|
+
* if the length is greater than destCapacity, then the string will not fit
|
1619
|
+
* and a buffer of the indicated length would need to be passed in
|
1620
|
+
* @stable ICU 2.0
|
1621
|
+
*/
|
1622
|
+
int32_t extract(char *dest, int32_t destCapacity,
|
1623
|
+
UConverter *cnv,
|
1624
|
+
UErrorCode &errorCode) const;
|
1625
|
+
|
1626
|
+
#endif
|
1627
|
+
|
1628
|
+
/**
|
1629
|
+
* Create a temporary substring for the specified range.
|
1630
|
+
* Unlike the substring constructor and setTo() functions,
|
1631
|
+
* the object returned here will be a read-only alias (using getBuffer())
|
1632
|
+
* rather than copying the text.
|
1633
|
+
* As a result, this substring operation is much faster but requires
|
1634
|
+
* that the original string not be modified or deleted during the lifetime
|
1635
|
+
* of the returned substring object.
|
1636
|
+
* @param start offset of the first character visible in the substring
|
1637
|
+
* @param length length of the substring
|
1638
|
+
* @return a read-only alias UnicodeString object for the substring
|
1639
|
+
* @stable ICU 4.4
|
1640
|
+
*/
|
1641
|
+
UnicodeString tempSubString(int32_t start=0, int32_t length=INT32_MAX) const;
|
1642
|
+
|
1643
|
+
/**
|
1644
|
+
* Create a temporary substring for the specified range.
|
1645
|
+
* Same as tempSubString(start, length) except that the substring range
|
1646
|
+
* is specified as a (start, limit) pair (with an exclusive limit index)
|
1647
|
+
* rather than a (start, length) pair.
|
1648
|
+
* @param start offset of the first character visible in the substring
|
1649
|
+
* @param limit offset immediately following the last character visible in the substring
|
1650
|
+
* @return a read-only alias UnicodeString object for the substring
|
1651
|
+
* @stable ICU 4.4
|
1652
|
+
*/
|
1653
|
+
inline UnicodeString tempSubStringBetween(int32_t start, int32_t limit=INT32_MAX) const;
|
1654
|
+
|
1655
|
+
/**
|
1656
|
+
* Convert the UnicodeString to UTF-8 and write the result
|
1657
|
+
* to a ByteSink. This is called by toUTF8String().
|
1658
|
+
* Unpaired surrogates are replaced with U+FFFD.
|
1659
|
+
* Calls u_strToUTF8WithSub().
|
1660
|
+
*
|
1661
|
+
* @param sink A ByteSink to which the UTF-8 version of the string is written.
|
1662
|
+
* sink.Flush() is called at the end.
|
1663
|
+
* @stable ICU 4.2
|
1664
|
+
* @see toUTF8String
|
1665
|
+
*/
|
1666
|
+
void toUTF8(ByteSink &sink) const;
|
1667
|
+
|
1668
|
+
#if U_HAVE_STD_STRING
|
1669
|
+
|
1670
|
+
/**
|
1671
|
+
* Convert the UnicodeString to UTF-8 and append the result
|
1672
|
+
* to a standard string.
|
1673
|
+
* Unpaired surrogates are replaced with U+FFFD.
|
1674
|
+
* Calls toUTF8().
|
1675
|
+
*
|
1676
|
+
* @param result A standard string (or a compatible object)
|
1677
|
+
* to which the UTF-8 version of the string is appended.
|
1678
|
+
* @return The string object.
|
1679
|
+
* @stable ICU 4.2
|
1680
|
+
* @see toUTF8
|
1681
|
+
*/
|
1682
|
+
template<typename StringClass>
|
1683
|
+
StringClass &toUTF8String(StringClass &result) const {
|
1684
|
+
StringByteSink<StringClass> sbs(&result);
|
1685
|
+
toUTF8(sbs);
|
1686
|
+
return result;
|
1687
|
+
}
|
1688
|
+
|
1689
|
+
#endif
|
1690
|
+
|
1691
|
+
/**
|
1692
|
+
* Convert the UnicodeString to UTF-32.
|
1693
|
+
* Unpaired surrogates are replaced with U+FFFD.
|
1694
|
+
* Calls u_strToUTF32WithSub().
|
1695
|
+
*
|
1696
|
+
* @param utf32 destination string buffer, can be NULL if capacity==0
|
1697
|
+
* @param capacity the number of UChar32s available at utf32
|
1698
|
+
* @param errorCode Standard ICU error code. Its input value must
|
1699
|
+
* pass the U_SUCCESS() test, or else the function returns
|
1700
|
+
* immediately. Check for U_FAILURE() on output or use with
|
1701
|
+
* function chaining. (See User Guide for details.)
|
1702
|
+
* @return The length of the UTF-32 string.
|
1703
|
+
* @see fromUTF32
|
1704
|
+
* @stable ICU 4.2
|
1705
|
+
*/
|
1706
|
+
int32_t toUTF32(UChar32 *utf32, int32_t capacity, UErrorCode &errorCode) const;
|
1707
|
+
|
1708
|
+
/* Length operations */
|
1709
|
+
|
1710
|
+
/**
|
1711
|
+
* Return the length of the UnicodeString object.
|
1712
|
+
* The length is the number of UChar code units are in the UnicodeString.
|
1713
|
+
* If you want the number of code points, please use countChar32().
|
1714
|
+
* @return the length of the UnicodeString object
|
1715
|
+
* @see countChar32
|
1716
|
+
* @stable ICU 2.0
|
1717
|
+
*/
|
1718
|
+
inline int32_t length(void) const;
|
1719
|
+
|
1720
|
+
/**
|
1721
|
+
* Count Unicode code points in the length UChar code units of the string.
|
1722
|
+
* A code point may occupy either one or two UChar code units.
|
1723
|
+
* Counting code points involves reading all code units.
|
1724
|
+
*
|
1725
|
+
* This functions is basically the inverse of moveIndex32().
|
1726
|
+
*
|
1727
|
+
* @param start the index of the first code unit to check
|
1728
|
+
* @param length the number of UChar code units to check
|
1729
|
+
* @return the number of code points in the specified code units
|
1730
|
+
* @see length
|
1731
|
+
* @stable ICU 2.0
|
1732
|
+
*/
|
1733
|
+
int32_t
|
1734
|
+
countChar32(int32_t start=0, int32_t length=INT32_MAX) const;
|
1735
|
+
|
1736
|
+
/**
|
1737
|
+
* Check if the length UChar code units of the string
|
1738
|
+
* contain more Unicode code points than a certain number.
|
1739
|
+
* This is more efficient than counting all code points in this part of the string
|
1740
|
+
* and comparing that number with a threshold.
|
1741
|
+
* This function may not need to scan the string at all if the length
|
1742
|
+
* falls within a certain range, and
|
1743
|
+
* never needs to count more than 'number+1' code points.
|
1744
|
+
* Logically equivalent to (countChar32(start, length)>number).
|
1745
|
+
* A Unicode code point may occupy either one or two UChar code units.
|
1746
|
+
*
|
1747
|
+
* @param start the index of the first code unit to check (0 for the entire string)
|
1748
|
+
* @param length the number of UChar code units to check
|
1749
|
+
* (use INT32_MAX for the entire string; remember that start/length
|
1750
|
+
* values are pinned)
|
1751
|
+
* @param number The number of code points in the (sub)string is compared against
|
1752
|
+
* the 'number' parameter.
|
1753
|
+
* @return Boolean value for whether the string contains more Unicode code points
|
1754
|
+
* than 'number'. Same as (u_countChar32(s, length)>number).
|
1755
|
+
* @see countChar32
|
1756
|
+
* @see u_strHasMoreChar32Than
|
1757
|
+
* @stable ICU 2.4
|
1758
|
+
*/
|
1759
|
+
UBool
|
1760
|
+
hasMoreChar32Than(int32_t start, int32_t length, int32_t number) const;
|
1761
|
+
|
1762
|
+
/**
|
1763
|
+
* Determine if this string is empty.
|
1764
|
+
* @return TRUE if this string contains 0 characters, FALSE otherwise.
|
1765
|
+
* @stable ICU 2.0
|
1766
|
+
*/
|
1767
|
+
inline UBool isEmpty(void) const;
|
1768
|
+
|
1769
|
+
/**
|
1770
|
+
* Return the capacity of the internal buffer of the UnicodeString object.
|
1771
|
+
* This is useful together with the getBuffer functions.
|
1772
|
+
* See there for details.
|
1773
|
+
*
|
1774
|
+
* @return the number of UChars available in the internal buffer
|
1775
|
+
* @see getBuffer
|
1776
|
+
* @stable ICU 2.0
|
1777
|
+
*/
|
1778
|
+
inline int32_t getCapacity(void) const;
|
1779
|
+
|
1780
|
+
/* Other operations */
|
1781
|
+
|
1782
|
+
/**
|
1783
|
+
* Generate a hash code for this object.
|
1784
|
+
* @return The hash code of this UnicodeString.
|
1785
|
+
* @stable ICU 2.0
|
1786
|
+
*/
|
1787
|
+
inline int32_t hashCode(void) const;
|
1788
|
+
|
1789
|
+
/**
|
1790
|
+
* Determine if this object contains a valid string.
|
1791
|
+
* A bogus string has no value. It is different from an empty string,
|
1792
|
+
* although in both cases isEmpty() returns TRUE and length() returns 0.
|
1793
|
+
* setToBogus() and isBogus() can be used to indicate that no string value is available.
|
1794
|
+
* For a bogus string, getBuffer() and getTerminatedBuffer() return NULL, and
|
1795
|
+
* length() returns 0.
|
1796
|
+
*
|
1797
|
+
* @return TRUE if the string is bogus/invalid, FALSE otherwise
|
1798
|
+
* @see setToBogus()
|
1799
|
+
* @stable ICU 2.0
|
1800
|
+
*/
|
1801
|
+
inline UBool isBogus(void) const;
|
1802
|
+
|
1803
|
+
|
1804
|
+
//========================================
|
1805
|
+
// Write operations
|
1806
|
+
//========================================
|
1807
|
+
|
1808
|
+
/* Assignment operations */
|
1809
|
+
|
1810
|
+
/**
|
1811
|
+
* Assignment operator. Replace the characters in this UnicodeString
|
1812
|
+
* with the characters from <TT>srcText</TT>.
|
1813
|
+
* @param srcText The text containing the characters to replace
|
1814
|
+
* @return a reference to this
|
1815
|
+
* @stable ICU 2.0
|
1816
|
+
*/
|
1817
|
+
UnicodeString &operator=(const UnicodeString &srcText);
|
1818
|
+
|
1819
|
+
/**
|
1820
|
+
* Almost the same as the assignment operator.
|
1821
|
+
* Replace the characters in this UnicodeString
|
1822
|
+
* with the characters from <code>srcText</code>.
|
1823
|
+
*
|
1824
|
+
* This function works the same as the assignment operator
|
1825
|
+
* for all strings except for ones that are readonly aliases.
|
1826
|
+
*
|
1827
|
+
* Starting with ICU 2.4, the assignment operator and the copy constructor
|
1828
|
+
* allocate a new buffer and copy the buffer contents even for readonly aliases.
|
1829
|
+
* This function implements the old, more efficient but less safe behavior
|
1830
|
+
* of making this string also a readonly alias to the same buffer.
|
1831
|
+
*
|
1832
|
+
* The fastCopyFrom function must be used only if it is known that the lifetime of
|
1833
|
+
* this UnicodeString does not exceed the lifetime of the aliased buffer
|
1834
|
+
* including its contents, for example for strings from resource bundles
|
1835
|
+
* or aliases to string constants.
|
1836
|
+
*
|
1837
|
+
* @param src The text containing the characters to replace.
|
1838
|
+
* @return a reference to this
|
1839
|
+
* @stable ICU 2.4
|
1840
|
+
*/
|
1841
|
+
UnicodeString &fastCopyFrom(const UnicodeString &src);
|
1842
|
+
|
1843
|
+
/**
|
1844
|
+
* Assignment operator. Replace the characters in this UnicodeString
|
1845
|
+
* with the code unit <TT>ch</TT>.
|
1846
|
+
* @param ch the code unit to replace
|
1847
|
+
* @return a reference to this
|
1848
|
+
* @stable ICU 2.0
|
1849
|
+
*/
|
1850
|
+
inline UnicodeString& operator= (UChar ch);
|
1851
|
+
|
1852
|
+
/**
|
1853
|
+
* Assignment operator. Replace the characters in this UnicodeString
|
1854
|
+
* with the code point <TT>ch</TT>.
|
1855
|
+
* @param ch the code point to replace
|
1856
|
+
* @return a reference to this
|
1857
|
+
* @stable ICU 2.0
|
1858
|
+
*/
|
1859
|
+
inline UnicodeString& operator= (UChar32 ch);
|
1860
|
+
|
1861
|
+
/**
|
1862
|
+
* Set the text in the UnicodeString object to the characters
|
1863
|
+
* in <TT>srcText</TT> in the range
|
1864
|
+
* [<TT>srcStart</TT>, <TT>srcText.length()</TT>).
|
1865
|
+
* <TT>srcText</TT> is not modified.
|
1866
|
+
* @param srcText the source for the new characters
|
1867
|
+
* @param srcStart the offset into <TT>srcText</TT> where new characters
|
1868
|
+
* will be obtained
|
1869
|
+
* @return a reference to this
|
1870
|
+
* @stable ICU 2.2
|
1871
|
+
*/
|
1872
|
+
inline UnicodeString& setTo(const UnicodeString& srcText,
|
1873
|
+
int32_t srcStart);
|
1874
|
+
|
1875
|
+
/**
|
1876
|
+
* Set the text in the UnicodeString object to the characters
|
1877
|
+
* in <TT>srcText</TT> in the range
|
1878
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
|
1879
|
+
* <TT>srcText</TT> is not modified.
|
1880
|
+
* @param srcText the source for the new characters
|
1881
|
+
* @param srcStart the offset into <TT>srcText</TT> where new characters
|
1882
|
+
* will be obtained
|
1883
|
+
* @param srcLength the number of characters in <TT>srcText</TT> in the
|
1884
|
+
* replace string.
|
1885
|
+
* @return a reference to this
|
1886
|
+
* @stable ICU 2.0
|
1887
|
+
*/
|
1888
|
+
inline UnicodeString& setTo(const UnicodeString& srcText,
|
1889
|
+
int32_t srcStart,
|
1890
|
+
int32_t srcLength);
|
1891
|
+
|
1892
|
+
/**
|
1893
|
+
* Set the text in the UnicodeString object to the characters in
|
1894
|
+
* <TT>srcText</TT>.
|
1895
|
+
* <TT>srcText</TT> is not modified.
|
1896
|
+
* @param srcText the source for the new characters
|
1897
|
+
* @return a reference to this
|
1898
|
+
* @stable ICU 2.0
|
1899
|
+
*/
|
1900
|
+
inline UnicodeString& setTo(const UnicodeString& srcText);
|
1901
|
+
|
1902
|
+
/**
|
1903
|
+
* Set the characters in the UnicodeString object to the characters
|
1904
|
+
* in <TT>srcChars</TT>. <TT>srcChars</TT> is not modified.
|
1905
|
+
* @param srcChars the source for the new characters
|
1906
|
+
* @param srcLength the number of Unicode characters in srcChars.
|
1907
|
+
* @return a reference to this
|
1908
|
+
* @stable ICU 2.0
|
1909
|
+
*/
|
1910
|
+
inline UnicodeString& setTo(const UChar *srcChars,
|
1911
|
+
int32_t srcLength);
|
1912
|
+
|
1913
|
+
/**
|
1914
|
+
* Set the characters in the UnicodeString object to the code unit
|
1915
|
+
* <TT>srcChar</TT>.
|
1916
|
+
* @param srcChar the code unit which becomes the UnicodeString's character
|
1917
|
+
* content
|
1918
|
+
* @return a reference to this
|
1919
|
+
* @stable ICU 2.0
|
1920
|
+
*/
|
1921
|
+
UnicodeString& setTo(UChar srcChar);
|
1922
|
+
|
1923
|
+
/**
|
1924
|
+
* Set the characters in the UnicodeString object to the code point
|
1925
|
+
* <TT>srcChar</TT>.
|
1926
|
+
* @param srcChar the code point which becomes the UnicodeString's character
|
1927
|
+
* content
|
1928
|
+
* @return a reference to this
|
1929
|
+
* @stable ICU 2.0
|
1930
|
+
*/
|
1931
|
+
UnicodeString& setTo(UChar32 srcChar);
|
1932
|
+
|
1933
|
+
/**
|
1934
|
+
* Aliasing setTo() function, analogous to the readonly-aliasing UChar* constructor.
|
1935
|
+
* The text will be used for the UnicodeString object, but
|
1936
|
+
* it will not be released when the UnicodeString is destroyed.
|
1937
|
+
* This has copy-on-write semantics:
|
1938
|
+
* When the string is modified, then the buffer is first copied into
|
1939
|
+
* newly allocated memory.
|
1940
|
+
* The aliased buffer is never modified.
|
1941
|
+
*
|
1942
|
+
* In an assignment to another UnicodeString, when using the copy constructor
|
1943
|
+
* or the assignment operator, the text will be copied.
|
1944
|
+
* When using fastCopyFrom(), the text will be aliased again,
|
1945
|
+
* so that both strings then alias the same readonly-text.
|
1946
|
+
*
|
1947
|
+
* @param isTerminated specifies if <code>text</code> is <code>NUL</code>-terminated.
|
1948
|
+
* This must be true if <code>textLength==-1</code>.
|
1949
|
+
* @param text The characters to alias for the UnicodeString.
|
1950
|
+
* @param textLength The number of Unicode characters in <code>text</code> to alias.
|
1951
|
+
* If -1, then this constructor will determine the length
|
1952
|
+
* by calling <code>u_strlen()</code>.
|
1953
|
+
* @return a reference to this
|
1954
|
+
* @stable ICU 2.0
|
1955
|
+
*/
|
1956
|
+
UnicodeString &setTo(UBool isTerminated,
|
1957
|
+
const UChar *text,
|
1958
|
+
int32_t textLength);
|
1959
|
+
|
1960
|
+
/**
|
1961
|
+
* Aliasing setTo() function, analogous to the writable-aliasing UChar* constructor.
|
1962
|
+
* The text will be used for the UnicodeString object, but
|
1963
|
+
* it will not be released when the UnicodeString is destroyed.
|
1964
|
+
* This has write-through semantics:
|
1965
|
+
* For as long as the capacity of the buffer is sufficient, write operations
|
1966
|
+
* will directly affect the buffer. When more capacity is necessary, then
|
1967
|
+
* a new buffer will be allocated and the contents copied as with regularly
|
1968
|
+
* constructed strings.
|
1969
|
+
* In an assignment to another UnicodeString, the buffer will be copied.
|
1970
|
+
* The extract(UChar *dst) function detects whether the dst pointer is the same
|
1971
|
+
* as the string buffer itself and will in this case not copy the contents.
|
1972
|
+
*
|
1973
|
+
* @param buffer The characters to alias for the UnicodeString.
|
1974
|
+
* @param buffLength The number of Unicode characters in <code>buffer</code> to alias.
|
1975
|
+
* @param buffCapacity The size of <code>buffer</code> in UChars.
|
1976
|
+
* @return a reference to this
|
1977
|
+
* @stable ICU 2.0
|
1978
|
+
*/
|
1979
|
+
UnicodeString &setTo(UChar *buffer,
|
1980
|
+
int32_t buffLength,
|
1981
|
+
int32_t buffCapacity);
|
1982
|
+
|
1983
|
+
/**
|
1984
|
+
* Make this UnicodeString object invalid.
|
1985
|
+
* The string will test TRUE with isBogus().
|
1986
|
+
*
|
1987
|
+
* A bogus string has no value. It is different from an empty string.
|
1988
|
+
* It can be used to indicate that no string value is available.
|
1989
|
+
* getBuffer() and getTerminatedBuffer() return NULL, and
|
1990
|
+
* length() returns 0.
|
1991
|
+
*
|
1992
|
+
* This utility function is used throughout the UnicodeString
|
1993
|
+
* implementation to indicate that a UnicodeString operation failed,
|
1994
|
+
* and may be used in other functions,
|
1995
|
+
* especially but not exclusively when such functions do not
|
1996
|
+
* take a UErrorCode for simplicity.
|
1997
|
+
*
|
1998
|
+
* The following methods, and no others, will clear a string object's bogus flag:
|
1999
|
+
* - remove()
|
2000
|
+
* - remove(0, INT32_MAX)
|
2001
|
+
* - truncate(0)
|
2002
|
+
* - operator=() (assignment operator)
|
2003
|
+
* - setTo(...)
|
2004
|
+
*
|
2005
|
+
* The simplest ways to turn a bogus string into an empty one
|
2006
|
+
* is to use the remove() function.
|
2007
|
+
* Examples for other functions that are equivalent to "set to empty string":
|
2008
|
+
* \code
|
2009
|
+
* if(s.isBogus()) {
|
2010
|
+
* s.remove(); // set to an empty string (remove all), or
|
2011
|
+
* s.remove(0, INT32_MAX); // set to an empty string (remove all), or
|
2012
|
+
* s.truncate(0); // set to an empty string (complete truncation), or
|
2013
|
+
* s=UnicodeString(); // assign an empty string, or
|
2014
|
+
* s.setTo((UChar32)-1); // set to a pseudo code point that is out of range, or
|
2015
|
+
* static const UChar nul=0;
|
2016
|
+
* s.setTo(&nul, 0); // set to an empty C Unicode string
|
2017
|
+
* }
|
2018
|
+
* \endcode
|
2019
|
+
*
|
2020
|
+
* @see isBogus()
|
2021
|
+
* @stable ICU 2.0
|
2022
|
+
*/
|
2023
|
+
void setToBogus();
|
2024
|
+
|
2025
|
+
/**
|
2026
|
+
* Set the character at the specified offset to the specified character.
|
2027
|
+
* @param offset A valid offset into the text of the character to set
|
2028
|
+
* @param ch The new character
|
2029
|
+
* @return A reference to this
|
2030
|
+
* @stable ICU 2.0
|
2031
|
+
*/
|
2032
|
+
UnicodeString& setCharAt(int32_t offset,
|
2033
|
+
UChar ch);
|
2034
|
+
|
2035
|
+
|
2036
|
+
/* Append operations */
|
2037
|
+
|
2038
|
+
/**
|
2039
|
+
* Append operator. Append the code unit <TT>ch</TT> to the UnicodeString
|
2040
|
+
* object.
|
2041
|
+
* @param ch the code unit to be appended
|
2042
|
+
* @return a reference to this
|
2043
|
+
* @stable ICU 2.0
|
2044
|
+
*/
|
2045
|
+
inline UnicodeString& operator+= (UChar ch);
|
2046
|
+
|
2047
|
+
/**
|
2048
|
+
* Append operator. Append the code point <TT>ch</TT> to the UnicodeString
|
2049
|
+
* object.
|
2050
|
+
* @param ch the code point to be appended
|
2051
|
+
* @return a reference to this
|
2052
|
+
* @stable ICU 2.0
|
2053
|
+
*/
|
2054
|
+
inline UnicodeString& operator+= (UChar32 ch);
|
2055
|
+
|
2056
|
+
/**
|
2057
|
+
* Append operator. Append the characters in <TT>srcText</TT> to the
|
2058
|
+
* UnicodeString object. <TT>srcText</TT> is not modified.
|
2059
|
+
* @param srcText the source for the new characters
|
2060
|
+
* @return a reference to this
|
2061
|
+
* @stable ICU 2.0
|
2062
|
+
*/
|
2063
|
+
inline UnicodeString& operator+= (const UnicodeString& srcText);
|
2064
|
+
|
2065
|
+
/**
|
2066
|
+
* Append the characters
|
2067
|
+
* in <TT>srcText</TT> in the range
|
2068
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) to the
|
2069
|
+
* UnicodeString object at offset <TT>start</TT>. <TT>srcText</TT>
|
2070
|
+
* is not modified.
|
2071
|
+
* @param srcText the source for the new characters
|
2072
|
+
* @param srcStart the offset into <TT>srcText</TT> where new characters
|
2073
|
+
* will be obtained
|
2074
|
+
* @param srcLength the number of characters in <TT>srcText</TT> in
|
2075
|
+
* the append string
|
2076
|
+
* @return a reference to this
|
2077
|
+
* @stable ICU 2.0
|
2078
|
+
*/
|
2079
|
+
inline UnicodeString& append(const UnicodeString& srcText,
|
2080
|
+
int32_t srcStart,
|
2081
|
+
int32_t srcLength);
|
2082
|
+
|
2083
|
+
/**
|
2084
|
+
* Append the characters in <TT>srcText</TT> to the UnicodeString object.
|
2085
|
+
* <TT>srcText</TT> is not modified.
|
2086
|
+
* @param srcText the source for the new characters
|
2087
|
+
* @return a reference to this
|
2088
|
+
* @stable ICU 2.0
|
2089
|
+
*/
|
2090
|
+
inline UnicodeString& append(const UnicodeString& srcText);
|
2091
|
+
|
2092
|
+
/**
|
2093
|
+
* Append the characters in <TT>srcChars</TT> in the range
|
2094
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) to the UnicodeString
|
2095
|
+
* object at offset
|
2096
|
+
* <TT>start</TT>. <TT>srcChars</TT> is not modified.
|
2097
|
+
* @param srcChars the source for the new characters
|
2098
|
+
* @param srcStart the offset into <TT>srcChars</TT> where new characters
|
2099
|
+
* will be obtained
|
2100
|
+
* @param srcLength the number of characters in <TT>srcChars</TT> in
|
2101
|
+
* the append string; can be -1 if <TT>srcChars</TT> is NUL-terminated
|
2102
|
+
* @return a reference to this
|
2103
|
+
* @stable ICU 2.0
|
2104
|
+
*/
|
2105
|
+
inline UnicodeString& append(const UChar *srcChars,
|
2106
|
+
int32_t srcStart,
|
2107
|
+
int32_t srcLength);
|
2108
|
+
|
2109
|
+
/**
|
2110
|
+
* Append the characters in <TT>srcChars</TT> to the UnicodeString object
|
2111
|
+
* at offset <TT>start</TT>. <TT>srcChars</TT> is not modified.
|
2112
|
+
* @param srcChars the source for the new characters
|
2113
|
+
* @param srcLength the number of Unicode characters in <TT>srcChars</TT>;
|
2114
|
+
* can be -1 if <TT>srcChars</TT> is NUL-terminated
|
2115
|
+
* @return a reference to this
|
2116
|
+
* @stable ICU 2.0
|
2117
|
+
*/
|
2118
|
+
inline UnicodeString& append(const UChar *srcChars,
|
2119
|
+
int32_t srcLength);
|
2120
|
+
|
2121
|
+
/**
|
2122
|
+
* Append the code unit <TT>srcChar</TT> to the UnicodeString object.
|
2123
|
+
* @param srcChar the code unit to append
|
2124
|
+
* @return a reference to this
|
2125
|
+
* @stable ICU 2.0
|
2126
|
+
*/
|
2127
|
+
inline UnicodeString& append(UChar srcChar);
|
2128
|
+
|
2129
|
+
/**
|
2130
|
+
* Append the code point <TT>srcChar</TT> to the UnicodeString object.
|
2131
|
+
* @param srcChar the code point to append
|
2132
|
+
* @return a reference to this
|
2133
|
+
* @stable ICU 2.0
|
2134
|
+
*/
|
2135
|
+
UnicodeString& append(UChar32 srcChar);
|
2136
|
+
|
2137
|
+
|
2138
|
+
/* Insert operations */
|
2139
|
+
|
2140
|
+
/**
|
2141
|
+
* Insert the characters in <TT>srcText</TT> in the range
|
2142
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) into the UnicodeString
|
2143
|
+
* object at offset <TT>start</TT>. <TT>srcText</TT> is not modified.
|
2144
|
+
* @param start the offset where the insertion begins
|
2145
|
+
* @param srcText the source for the new characters
|
2146
|
+
* @param srcStart the offset into <TT>srcText</TT> where new characters
|
2147
|
+
* will be obtained
|
2148
|
+
* @param srcLength the number of characters in <TT>srcText</TT> in
|
2149
|
+
* the insert string
|
2150
|
+
* @return a reference to this
|
2151
|
+
* @stable ICU 2.0
|
2152
|
+
*/
|
2153
|
+
inline UnicodeString& insert(int32_t start,
|
2154
|
+
const UnicodeString& srcText,
|
2155
|
+
int32_t srcStart,
|
2156
|
+
int32_t srcLength);
|
2157
|
+
|
2158
|
+
/**
|
2159
|
+
* Insert the characters in <TT>srcText</TT> into the UnicodeString object
|
2160
|
+
* at offset <TT>start</TT>. <TT>srcText</TT> is not modified.
|
2161
|
+
* @param start the offset where the insertion begins
|
2162
|
+
* @param srcText the source for the new characters
|
2163
|
+
* @return a reference to this
|
2164
|
+
* @stable ICU 2.0
|
2165
|
+
*/
|
2166
|
+
inline UnicodeString& insert(int32_t start,
|
2167
|
+
const UnicodeString& srcText);
|
2168
|
+
|
2169
|
+
/**
|
2170
|
+
* Insert the characters in <TT>srcChars</TT> in the range
|
2171
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>) into the UnicodeString
|
2172
|
+
* object at offset <TT>start</TT>. <TT>srcChars</TT> is not modified.
|
2173
|
+
* @param start the offset at which the insertion begins
|
2174
|
+
* @param srcChars the source for the new characters
|
2175
|
+
* @param srcStart the offset into <TT>srcChars</TT> where new characters
|
2176
|
+
* will be obtained
|
2177
|
+
* @param srcLength the number of characters in <TT>srcChars</TT>
|
2178
|
+
* in the insert string
|
2179
|
+
* @return a reference to this
|
2180
|
+
* @stable ICU 2.0
|
2181
|
+
*/
|
2182
|
+
inline UnicodeString& insert(int32_t start,
|
2183
|
+
const UChar *srcChars,
|
2184
|
+
int32_t srcStart,
|
2185
|
+
int32_t srcLength);
|
2186
|
+
|
2187
|
+
/**
|
2188
|
+
* Insert the characters in <TT>srcChars</TT> into the UnicodeString object
|
2189
|
+
* at offset <TT>start</TT>. <TT>srcChars</TT> is not modified.
|
2190
|
+
* @param start the offset where the insertion begins
|
2191
|
+
* @param srcChars the source for the new characters
|
2192
|
+
* @param srcLength the number of Unicode characters in srcChars.
|
2193
|
+
* @return a reference to this
|
2194
|
+
* @stable ICU 2.0
|
2195
|
+
*/
|
2196
|
+
inline UnicodeString& insert(int32_t start,
|
2197
|
+
const UChar *srcChars,
|
2198
|
+
int32_t srcLength);
|
2199
|
+
|
2200
|
+
/**
|
2201
|
+
* Insert the code unit <TT>srcChar</TT> into the UnicodeString object at
|
2202
|
+
* offset <TT>start</TT>.
|
2203
|
+
* @param start the offset at which the insertion occurs
|
2204
|
+
* @param srcChar the code unit to insert
|
2205
|
+
* @return a reference to this
|
2206
|
+
* @stable ICU 2.0
|
2207
|
+
*/
|
2208
|
+
inline UnicodeString& insert(int32_t start,
|
2209
|
+
UChar srcChar);
|
2210
|
+
|
2211
|
+
/**
|
2212
|
+
* Insert the code point <TT>srcChar</TT> into the UnicodeString object at
|
2213
|
+
* offset <TT>start</TT>.
|
2214
|
+
* @param start the offset at which the insertion occurs
|
2215
|
+
* @param srcChar the code point to insert
|
2216
|
+
* @return a reference to this
|
2217
|
+
* @stable ICU 2.0
|
2218
|
+
*/
|
2219
|
+
inline UnicodeString& insert(int32_t start,
|
2220
|
+
UChar32 srcChar);
|
2221
|
+
|
2222
|
+
|
2223
|
+
/* Replace operations */
|
2224
|
+
|
2225
|
+
/**
|
2226
|
+
* Replace the characters in the range
|
2227
|
+
* [<TT>start</TT>, <TT>start + length</TT>) with the characters in
|
2228
|
+
* <TT>srcText</TT> in the range
|
2229
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>).
|
2230
|
+
* <TT>srcText</TT> is not modified.
|
2231
|
+
* @param start the offset at which the replace operation begins
|
2232
|
+
* @param length the number of characters to replace. The character at
|
2233
|
+
* <TT>start + length</TT> is not modified.
|
2234
|
+
* @param srcText the source for the new characters
|
2235
|
+
* @param srcStart the offset into <TT>srcText</TT> where new characters
|
2236
|
+
* will be obtained
|
2237
|
+
* @param srcLength the number of characters in <TT>srcText</TT> in
|
2238
|
+
* the replace string
|
2239
|
+
* @return a reference to this
|
2240
|
+
* @stable ICU 2.0
|
2241
|
+
*/
|
2242
|
+
UnicodeString& replace(int32_t start,
|
2243
|
+
int32_t length,
|
2244
|
+
const UnicodeString& srcText,
|
2245
|
+
int32_t srcStart,
|
2246
|
+
int32_t srcLength);
|
2247
|
+
|
2248
|
+
/**
|
2249
|
+
* Replace the characters in the range
|
2250
|
+
* [<TT>start</TT>, <TT>start + length</TT>)
|
2251
|
+
* with the characters in <TT>srcText</TT>. <TT>srcText</TT> is
|
2252
|
+
* not modified.
|
2253
|
+
* @param start the offset at which the replace operation begins
|
2254
|
+
* @param length the number of characters to replace. The character at
|
2255
|
+
* <TT>start + length</TT> is not modified.
|
2256
|
+
* @param srcText the source for the new characters
|
2257
|
+
* @return a reference to this
|
2258
|
+
* @stable ICU 2.0
|
2259
|
+
*/
|
2260
|
+
UnicodeString& replace(int32_t start,
|
2261
|
+
int32_t length,
|
2262
|
+
const UnicodeString& srcText);
|
2263
|
+
|
2264
|
+
/**
|
2265
|
+
* Replace the characters in the range
|
2266
|
+
* [<TT>start</TT>, <TT>start + length</TT>) with the characters in
|
2267
|
+
* <TT>srcChars</TT> in the range
|
2268
|
+
* [<TT>srcStart</TT>, <TT>srcStart + srcLength</TT>). <TT>srcChars</TT>
|
2269
|
+
* is not modified.
|
2270
|
+
* @param start the offset at which the replace operation begins
|
2271
|
+
* @param length the number of characters to replace. The character at
|
2272
|
+
* <TT>start + length</TT> is not modified.
|
2273
|
+
* @param srcChars the source for the new characters
|
2274
|
+
* @param srcStart the offset into <TT>srcChars</TT> where new characters
|
2275
|
+
* will be obtained
|
2276
|
+
* @param srcLength the number of characters in <TT>srcChars</TT>
|
2277
|
+
* in the replace string
|
2278
|
+
* @return a reference to this
|
2279
|
+
* @stable ICU 2.0
|
2280
|
+
*/
|
2281
|
+
UnicodeString& replace(int32_t start,
|
2282
|
+
int32_t length,
|
2283
|
+
const UChar *srcChars,
|
2284
|
+
int32_t srcStart,
|
2285
|
+
int32_t srcLength);
|
2286
|
+
|
2287
|
+
/**
|
2288
|
+
* Replace the characters in the range
|
2289
|
+
* [<TT>start</TT>, <TT>start + length</TT>) with the characters in
|
2290
|
+
* <TT>srcChars</TT>. <TT>srcChars</TT> is not modified.
|
2291
|
+
* @param start the offset at which the replace operation begins
|
2292
|
+
* @param length number of characters to replace. The character at
|
2293
|
+
* <TT>start + length</TT> is not modified.
|
2294
|
+
* @param srcChars the source for the new characters
|
2295
|
+
* @param srcLength the number of Unicode characters in srcChars
|
2296
|
+
* @return a reference to this
|
2297
|
+
* @stable ICU 2.0
|
2298
|
+
*/
|
2299
|
+
inline UnicodeString& replace(int32_t start,
|
2300
|
+
int32_t length,
|
2301
|
+
const UChar *srcChars,
|
2302
|
+
int32_t srcLength);
|
2303
|
+
|
2304
|
+
/**
|
2305
|
+
* Replace the characters in the range
|
2306
|
+
* [<TT>start</TT>, <TT>start + length</TT>) with the code unit
|
2307
|
+
* <TT>srcChar</TT>.
|
2308
|
+
* @param start the offset at which the replace operation begins
|
2309
|
+
* @param length the number of characters to replace. The character at
|
2310
|
+
* <TT>start + length</TT> is not modified.
|
2311
|
+
* @param srcChar the new code unit
|
2312
|
+
* @return a reference to this
|
2313
|
+
* @stable ICU 2.0
|
2314
|
+
*/
|
2315
|
+
inline UnicodeString& replace(int32_t start,
|
2316
|
+
int32_t length,
|
2317
|
+
UChar srcChar);
|
2318
|
+
|
2319
|
+
/**
|
2320
|
+
* Replace the characters in the range
|
2321
|
+
* [<TT>start</TT>, <TT>start + length</TT>) with the code point
|
2322
|
+
* <TT>srcChar</TT>.
|
2323
|
+
* @param start the offset at which the replace operation begins
|
2324
|
+
* @param length the number of characters to replace. The character at
|
2325
|
+
* <TT>start + length</TT> is not modified.
|
2326
|
+
* @param srcChar the new code point
|
2327
|
+
* @return a reference to this
|
2328
|
+
* @stable ICU 2.0
|
2329
|
+
*/
|
2330
|
+
UnicodeString& replace(int32_t start, int32_t length, UChar32 srcChar);
|
2331
|
+
|
2332
|
+
/**
|
2333
|
+
* Replace the characters in the range [<TT>start</TT>, <TT>limit</TT>)
|
2334
|
+
* with the characters in <TT>srcText</TT>. <TT>srcText</TT> is not modified.
|
2335
|
+
* @param start the offset at which the replace operation begins
|
2336
|
+
* @param limit the offset immediately following the replace range
|
2337
|
+
* @param srcText the source for the new characters
|
2338
|
+
* @return a reference to this
|
2339
|
+
* @stable ICU 2.0
|
2340
|
+
*/
|
2341
|
+
inline UnicodeString& replaceBetween(int32_t start,
|
2342
|
+
int32_t limit,
|
2343
|
+
const UnicodeString& srcText);
|
2344
|
+
|
2345
|
+
/**
|
2346
|
+
* Replace the characters in the range [<TT>start</TT>, <TT>limit</TT>)
|
2347
|
+
* with the characters in <TT>srcText</TT> in the range
|
2348
|
+
* [<TT>srcStart</TT>, <TT>srcLimit</TT>). <TT>srcText</TT> is not modified.
|
2349
|
+
* @param start the offset at which the replace operation begins
|
2350
|
+
* @param limit the offset immediately following the replace range
|
2351
|
+
* @param srcText the source for the new characters
|
2352
|
+
* @param srcStart the offset into <TT>srcChars</TT> where new characters
|
2353
|
+
* will be obtained
|
2354
|
+
* @param srcLimit the offset immediately following the range to copy
|
2355
|
+
* in <TT>srcText</TT>
|
2356
|
+
* @return a reference to this
|
2357
|
+
* @stable ICU 2.0
|
2358
|
+
*/
|
2359
|
+
inline UnicodeString& replaceBetween(int32_t start,
|
2360
|
+
int32_t limit,
|
2361
|
+
const UnicodeString& srcText,
|
2362
|
+
int32_t srcStart,
|
2363
|
+
int32_t srcLimit);
|
2364
|
+
|
2365
|
+
/**
|
2366
|
+
* Replace a substring of this object with the given text.
|
2367
|
+
* @param start the beginning index, inclusive; <code>0 <= start
|
2368
|
+
* <= limit</code>.
|
2369
|
+
* @param limit the ending index, exclusive; <code>start <= limit
|
2370
|
+
* <= length()</code>.
|
2371
|
+
* @param text the text to replace characters <code>start</code>
|
2372
|
+
* to <code>limit - 1</code>
|
2373
|
+
* @stable ICU 2.0
|
2374
|
+
*/
|
2375
|
+
virtual void handleReplaceBetween(int32_t start,
|
2376
|
+
int32_t limit,
|
2377
|
+
const UnicodeString& text);
|
2378
|
+
|
2379
|
+
/**
|
2380
|
+
* Replaceable API
|
2381
|
+
* @return TRUE if it has MetaData
|
2382
|
+
* @stable ICU 2.4
|
2383
|
+
*/
|
2384
|
+
virtual UBool hasMetaData() const;
|
2385
|
+
|
2386
|
+
/**
|
2387
|
+
* Copy a substring of this object, retaining attribute (out-of-band)
|
2388
|
+
* information. This method is used to duplicate or reorder substrings.
|
2389
|
+
* The destination index must not overlap the source range.
|
2390
|
+
*
|
2391
|
+
* @param start the beginning index, inclusive; <code>0 <= start <=
|
2392
|
+
* limit</code>.
|
2393
|
+
* @param limit the ending index, exclusive; <code>start <= limit <=
|
2394
|
+
* length()</code>.
|
2395
|
+
* @param dest the destination index. The characters from
|
2396
|
+
* <code>start..limit-1</code> will be copied to <code>dest</code>.
|
2397
|
+
* Implementations of this method may assume that <code>dest <= start ||
|
2398
|
+
* dest >= limit</code>.
|
2399
|
+
* @stable ICU 2.0
|
2400
|
+
*/
|
2401
|
+
virtual void copy(int32_t start, int32_t limit, int32_t dest);
|
2402
|
+
|
2403
|
+
/* Search and replace operations */
|
2404
|
+
|
2405
|
+
/**
|
2406
|
+
* Replace all occurrences of characters in oldText with the characters
|
2407
|
+
* in newText
|
2408
|
+
* @param oldText the text containing the search text
|
2409
|
+
* @param newText the text containing the replacement text
|
2410
|
+
* @return a reference to this
|
2411
|
+
* @stable ICU 2.0
|
2412
|
+
*/
|
2413
|
+
inline UnicodeString& findAndReplace(const UnicodeString& oldText,
|
2414
|
+
const UnicodeString& newText);
|
2415
|
+
|
2416
|
+
/**
|
2417
|
+
* Replace all occurrences of characters in oldText with characters
|
2418
|
+
* in newText
|
2419
|
+
* in the range [<TT>start</TT>, <TT>start + length</TT>).
|
2420
|
+
* @param start the start of the range in which replace will performed
|
2421
|
+
* @param length the length of the range in which replace will be performed
|
2422
|
+
* @param oldText the text containing the search text
|
2423
|
+
* @param newText the text containing the replacement text
|
2424
|
+
* @return a reference to this
|
2425
|
+
* @stable ICU 2.0
|
2426
|
+
*/
|
2427
|
+
inline UnicodeString& findAndReplace(int32_t start,
|
2428
|
+
int32_t length,
|
2429
|
+
const UnicodeString& oldText,
|
2430
|
+
const UnicodeString& newText);
|
2431
|
+
|
2432
|
+
/**
|
2433
|
+
* Replace all occurrences of characters in oldText in the range
|
2434
|
+
* [<TT>oldStart</TT>, <TT>oldStart + oldLength</TT>) with the characters
|
2435
|
+
* in newText in the range
|
2436
|
+
* [<TT>newStart</TT>, <TT>newStart + newLength</TT>)
|
2437
|
+
* in the range [<TT>start</TT>, <TT>start + length</TT>).
|
2438
|
+
* @param start the start of the range in which replace will performed
|
2439
|
+
* @param length the length of the range in which replace will be performed
|
2440
|
+
* @param oldText the text containing the search text
|
2441
|
+
* @param oldStart the start of the search range in <TT>oldText</TT>
|
2442
|
+
* @param oldLength the length of the search range in <TT>oldText</TT>
|
2443
|
+
* @param newText the text containing the replacement text
|
2444
|
+
* @param newStart the start of the replacement range in <TT>newText</TT>
|
2445
|
+
* @param newLength the length of the replacement range in <TT>newText</TT>
|
2446
|
+
* @return a reference to this
|
2447
|
+
* @stable ICU 2.0
|
2448
|
+
*/
|
2449
|
+
UnicodeString& findAndReplace(int32_t start,
|
2450
|
+
int32_t length,
|
2451
|
+
const UnicodeString& oldText,
|
2452
|
+
int32_t oldStart,
|
2453
|
+
int32_t oldLength,
|
2454
|
+
const UnicodeString& newText,
|
2455
|
+
int32_t newStart,
|
2456
|
+
int32_t newLength);
|
2457
|
+
|
2458
|
+
|
2459
|
+
/* Remove operations */
|
2460
|
+
|
2461
|
+
/**
|
2462
|
+
* Remove all characters from the UnicodeString object.
|
2463
|
+
* @return a reference to this
|
2464
|
+
* @stable ICU 2.0
|
2465
|
+
*/
|
2466
|
+
inline UnicodeString& remove(void);
|
2467
|
+
|
2468
|
+
/**
|
2469
|
+
* Remove the characters in the range
|
2470
|
+
* [<TT>start</TT>, <TT>start + length</TT>) from the UnicodeString object.
|
2471
|
+
* @param start the offset of the first character to remove
|
2472
|
+
* @param length the number of characters to remove
|
2473
|
+
* @return a reference to this
|
2474
|
+
* @stable ICU 2.0
|
2475
|
+
*/
|
2476
|
+
inline UnicodeString& remove(int32_t start,
|
2477
|
+
int32_t length = (int32_t)INT32_MAX);
|
2478
|
+
|
2479
|
+
/**
|
2480
|
+
* Remove the characters in the range
|
2481
|
+
* [<TT>start</TT>, <TT>limit</TT>) from the UnicodeString object.
|
2482
|
+
* @param start the offset of the first character to remove
|
2483
|
+
* @param limit the offset immediately following the range to remove
|
2484
|
+
* @return a reference to this
|
2485
|
+
* @stable ICU 2.0
|
2486
|
+
*/
|
2487
|
+
inline UnicodeString& removeBetween(int32_t start,
|
2488
|
+
int32_t limit = (int32_t)INT32_MAX);
|
2489
|
+
|
2490
|
+
/**
|
2491
|
+
* Retain only the characters in the range
|
2492
|
+
* [<code>start</code>, <code>limit</code>) from the UnicodeString object.
|
2493
|
+
* Removes characters before <code>start</code> and at and after <code>limit</code>.
|
2494
|
+
* @param start the offset of the first character to retain
|
2495
|
+
* @param limit the offset immediately following the range to retain
|
2496
|
+
* @return a reference to this
|
2497
|
+
* @stable ICU 4.4
|
2498
|
+
*/
|
2499
|
+
inline UnicodeString &retainBetween(int32_t start, int32_t limit = INT32_MAX);
|
2500
|
+
|
2501
|
+
/* Length operations */
|
2502
|
+
|
2503
|
+
/**
|
2504
|
+
* Pad the start of this UnicodeString with the character <TT>padChar</TT>.
|
2505
|
+
* If the length of this UnicodeString is less than targetLength,
|
2506
|
+
* length() - targetLength copies of padChar will be added to the
|
2507
|
+
* beginning of this UnicodeString.
|
2508
|
+
* @param targetLength the desired length of the string
|
2509
|
+
* @param padChar the character to use for padding. Defaults to
|
2510
|
+
* space (U+0020)
|
2511
|
+
* @return TRUE if the text was padded, FALSE otherwise.
|
2512
|
+
* @stable ICU 2.0
|
2513
|
+
*/
|
2514
|
+
UBool padLeading(int32_t targetLength,
|
2515
|
+
UChar padChar = 0x0020);
|
2516
|
+
|
2517
|
+
/**
|
2518
|
+
* Pad the end of this UnicodeString with the character <TT>padChar</TT>.
|
2519
|
+
* If the length of this UnicodeString is less than targetLength,
|
2520
|
+
* length() - targetLength copies of padChar will be added to the
|
2521
|
+
* end of this UnicodeString.
|
2522
|
+
* @param targetLength the desired length of the string
|
2523
|
+
* @param padChar the character to use for padding. Defaults to
|
2524
|
+
* space (U+0020)
|
2525
|
+
* @return TRUE if the text was padded, FALSE otherwise.
|
2526
|
+
* @stable ICU 2.0
|
2527
|
+
*/
|
2528
|
+
UBool padTrailing(int32_t targetLength,
|
2529
|
+
UChar padChar = 0x0020);
|
2530
|
+
|
2531
|
+
/**
|
2532
|
+
* Truncate this UnicodeString to the <TT>targetLength</TT>.
|
2533
|
+
* @param targetLength the desired length of this UnicodeString.
|
2534
|
+
* @return TRUE if the text was truncated, FALSE otherwise
|
2535
|
+
* @stable ICU 2.0
|
2536
|
+
*/
|
2537
|
+
inline UBool truncate(int32_t targetLength);
|
2538
|
+
|
2539
|
+
/**
|
2540
|
+
* Trims leading and trailing whitespace from this UnicodeString.
|
2541
|
+
* @return a reference to this
|
2542
|
+
* @stable ICU 2.0
|
2543
|
+
*/
|
2544
|
+
UnicodeString& trim(void);
|
2545
|
+
|
2546
|
+
|
2547
|
+
/* Miscellaneous operations */
|
2548
|
+
|
2549
|
+
/**
|
2550
|
+
* Reverse this UnicodeString in place.
|
2551
|
+
* @return a reference to this
|
2552
|
+
* @stable ICU 2.0
|
2553
|
+
*/
|
2554
|
+
inline UnicodeString& reverse(void);
|
2555
|
+
|
2556
|
+
/**
|
2557
|
+
* Reverse the range [<TT>start</TT>, <TT>start + length</TT>) in
|
2558
|
+
* this UnicodeString.
|
2559
|
+
* @param start the start of the range to reverse
|
2560
|
+
* @param length the number of characters to to reverse
|
2561
|
+
* @return a reference to this
|
2562
|
+
* @stable ICU 2.0
|
2563
|
+
*/
|
2564
|
+
inline UnicodeString& reverse(int32_t start,
|
2565
|
+
int32_t length);
|
2566
|
+
|
2567
|
+
/**
|
2568
|
+
* Convert the characters in this to UPPER CASE following the conventions of
|
2569
|
+
* the default locale.
|
2570
|
+
* @return A reference to this.
|
2571
|
+
* @stable ICU 2.0
|
2572
|
+
*/
|
2573
|
+
UnicodeString& toUpper(void);
|
2574
|
+
|
2575
|
+
/**
|
2576
|
+
* Convert the characters in this to UPPER CASE following the conventions of
|
2577
|
+
* a specific locale.
|
2578
|
+
* @param locale The locale containing the conventions to use.
|
2579
|
+
* @return A reference to this.
|
2580
|
+
* @stable ICU 2.0
|
2581
|
+
*/
|
2582
|
+
UnicodeString& toUpper(const Locale& locale);
|
2583
|
+
|
2584
|
+
/**
|
2585
|
+
* Convert the characters in this to lower case following the conventions of
|
2586
|
+
* the default locale.
|
2587
|
+
* @return A reference to this.
|
2588
|
+
* @stable ICU 2.0
|
2589
|
+
*/
|
2590
|
+
UnicodeString& toLower(void);
|
2591
|
+
|
2592
|
+
/**
|
2593
|
+
* Convert the characters in this to lower case following the conventions of
|
2594
|
+
* a specific locale.
|
2595
|
+
* @param locale The locale containing the conventions to use.
|
2596
|
+
* @return A reference to this.
|
2597
|
+
* @stable ICU 2.0
|
2598
|
+
*/
|
2599
|
+
UnicodeString& toLower(const Locale& locale);
|
2600
|
+
|
2601
|
+
#if !UCONFIG_NO_BREAK_ITERATION
|
2602
|
+
|
2603
|
+
/**
|
2604
|
+
* Titlecase this string, convenience function using the default locale.
|
2605
|
+
*
|
2606
|
+
* Casing is locale-dependent and context-sensitive.
|
2607
|
+
* Titlecasing uses a break iterator to find the first characters of words
|
2608
|
+
* that are to be titlecased. It titlecases those characters and lowercases
|
2609
|
+
* all others.
|
2610
|
+
*
|
2611
|
+
* The titlecase break iterator can be provided to customize for arbitrary
|
2612
|
+
* styles, using rules and dictionaries beyond the standard iterators.
|
2613
|
+
* It may be more efficient to always provide an iterator to avoid
|
2614
|
+
* opening and closing one for each string.
|
2615
|
+
* The standard titlecase iterator for the root locale implements the
|
2616
|
+
* algorithm of Unicode TR 21.
|
2617
|
+
*
|
2618
|
+
* This function uses only the setText(), first() and next() methods of the
|
2619
|
+
* provided break iterator.
|
2620
|
+
*
|
2621
|
+
* @param titleIter A break iterator to find the first characters of words
|
2622
|
+
* that are to be titlecased.
|
2623
|
+
* If none is provided (0), then a standard titlecase
|
2624
|
+
* break iterator is opened.
|
2625
|
+
* Otherwise the provided iterator is set to the string's text.
|
2626
|
+
* @return A reference to this.
|
2627
|
+
* @stable ICU 2.1
|
2628
|
+
*/
|
2629
|
+
UnicodeString &toTitle(BreakIterator *titleIter);
|
2630
|
+
|
2631
|
+
/**
|
2632
|
+
* Titlecase this string.
|
2633
|
+
*
|
2634
|
+
* Casing is locale-dependent and context-sensitive.
|
2635
|
+
* Titlecasing uses a break iterator to find the first characters of words
|
2636
|
+
* that are to be titlecased. It titlecases those characters and lowercases
|
2637
|
+
* all others.
|
2638
|
+
*
|
2639
|
+
* The titlecase break iterator can be provided to customize for arbitrary
|
2640
|
+
* styles, using rules and dictionaries beyond the standard iterators.
|
2641
|
+
* It may be more efficient to always provide an iterator to avoid
|
2642
|
+
* opening and closing one for each string.
|
2643
|
+
* The standard titlecase iterator for the root locale implements the
|
2644
|
+
* algorithm of Unicode TR 21.
|
2645
|
+
*
|
2646
|
+
* This function uses only the setText(), first() and next() methods of the
|
2647
|
+
* provided break iterator.
|
2648
|
+
*
|
2649
|
+
* @param titleIter A break iterator to find the first characters of words
|
2650
|
+
* that are to be titlecased.
|
2651
|
+
* If none is provided (0), then a standard titlecase
|
2652
|
+
* break iterator is opened.
|
2653
|
+
* Otherwise the provided iterator is set to the string's text.
|
2654
|
+
* @param locale The locale to consider.
|
2655
|
+
* @return A reference to this.
|
2656
|
+
* @stable ICU 2.1
|
2657
|
+
*/
|
2658
|
+
UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale);
|
2659
|
+
|
2660
|
+
/**
|
2661
|
+
* Titlecase this string, with options.
|
2662
|
+
*
|
2663
|
+
* Casing is locale-dependent and context-sensitive.
|
2664
|
+
* Titlecasing uses a break iterator to find the first characters of words
|
2665
|
+
* that are to be titlecased. It titlecases those characters and lowercases
|
2666
|
+
* all others. (This can be modified with options.)
|
2667
|
+
*
|
2668
|
+
* The titlecase break iterator can be provided to customize for arbitrary
|
2669
|
+
* styles, using rules and dictionaries beyond the standard iterators.
|
2670
|
+
* It may be more efficient to always provide an iterator to avoid
|
2671
|
+
* opening and closing one for each string.
|
2672
|
+
* The standard titlecase iterator for the root locale implements the
|
2673
|
+
* algorithm of Unicode TR 21.
|
2674
|
+
*
|
2675
|
+
* This function uses only the setText(), first() and next() methods of the
|
2676
|
+
* provided break iterator.
|
2677
|
+
*
|
2678
|
+
* @param titleIter A break iterator to find the first characters of words
|
2679
|
+
* that are to be titlecased.
|
2680
|
+
* If none is provided (0), then a standard titlecase
|
2681
|
+
* break iterator is opened.
|
2682
|
+
* Otherwise the provided iterator is set to the string's text.
|
2683
|
+
* @param locale The locale to consider.
|
2684
|
+
* @param options Options bit set, see ucasemap_open().
|
2685
|
+
* @return A reference to this.
|
2686
|
+
* @see U_TITLECASE_NO_LOWERCASE
|
2687
|
+
* @see U_TITLECASE_NO_BREAK_ADJUSTMENT
|
2688
|
+
* @see ucasemap_open
|
2689
|
+
* @stable ICU 3.8
|
2690
|
+
*/
|
2691
|
+
UnicodeString &toTitle(BreakIterator *titleIter, const Locale &locale, uint32_t options);
|
2692
|
+
|
2693
|
+
#endif
|
2694
|
+
|
2695
|
+
/**
|
2696
|
+
* Case-folds the characters in this string.
|
2697
|
+
*
|
2698
|
+
* Case-folding is locale-independent and not context-sensitive,
|
2699
|
+
* but there is an option for whether to include or exclude mappings for dotted I
|
2700
|
+
* and dotless i that are marked with 'T' in CaseFolding.txt.
|
2701
|
+
*
|
2702
|
+
* The result may be longer or shorter than the original.
|
2703
|
+
*
|
2704
|
+
* @param options Either U_FOLD_CASE_DEFAULT or U_FOLD_CASE_EXCLUDE_SPECIAL_I
|
2705
|
+
* @return A reference to this.
|
2706
|
+
* @stable ICU 2.0
|
2707
|
+
*/
|
2708
|
+
UnicodeString &foldCase(uint32_t options=0 /*U_FOLD_CASE_DEFAULT*/);
|
2709
|
+
|
2710
|
+
//========================================
|
2711
|
+
// Access to the internal buffer
|
2712
|
+
//========================================
|
2713
|
+
|
2714
|
+
/**
|
2715
|
+
* Get a read/write pointer to the internal buffer.
|
2716
|
+
* The buffer is guaranteed to be large enough for at least minCapacity UChars,
|
2717
|
+
* writable, and is still owned by the UnicodeString object.
|
2718
|
+
* Calls to getBuffer(minCapacity) must not be nested, and
|
2719
|
+
* must be matched with calls to releaseBuffer(newLength).
|
2720
|
+
* If the string buffer was read-only or shared,
|
2721
|
+
* then it will be reallocated and copied.
|
2722
|
+
*
|
2723
|
+
* An attempted nested call will return 0, and will not further modify the
|
2724
|
+
* state of the UnicodeString object.
|
2725
|
+
* It also returns 0 if the string is bogus.
|
2726
|
+
*
|
2727
|
+
* The actual capacity of the string buffer may be larger than minCapacity.
|
2728
|
+
* getCapacity() returns the actual capacity.
|
2729
|
+
* For many operations, the full capacity should be used to avoid reallocations.
|
2730
|
+
*
|
2731
|
+
* While the buffer is "open" between getBuffer(minCapacity)
|
2732
|
+
* and releaseBuffer(newLength), the following applies:
|
2733
|
+
* - The string length is set to 0.
|
2734
|
+
* - Any read API call on the UnicodeString object will behave like on a 0-length string.
|
2735
|
+
* - Any write API call on the UnicodeString object is disallowed and will have no effect.
|
2736
|
+
* - You can read from and write to the returned buffer.
|
2737
|
+
* - The previous string contents will still be in the buffer;
|
2738
|
+
* if you want to use it, then you need to call length() before getBuffer(minCapacity).
|
2739
|
+
* If the length() was greater than minCapacity, then any contents after minCapacity
|
2740
|
+
* may be lost.
|
2741
|
+
* The buffer contents is not NUL-terminated by getBuffer().
|
2742
|
+
* If length()<getCapacity() then you can terminate it by writing a NUL
|
2743
|
+
* at index length().
|
2744
|
+
* - You must call releaseBuffer(newLength) before and in order to
|
2745
|
+
* return to normal UnicodeString operation.
|
2746
|
+
*
|
2747
|
+
* @param minCapacity the minimum number of UChars that are to be available
|
2748
|
+
* in the buffer, starting at the returned pointer;
|
2749
|
+
* default to the current string capacity if minCapacity==-1
|
2750
|
+
* @return a writable pointer to the internal string buffer,
|
2751
|
+
* or 0 if an error occurs (nested calls, out of memory)
|
2752
|
+
*
|
2753
|
+
* @see releaseBuffer
|
2754
|
+
* @see getTerminatedBuffer()
|
2755
|
+
* @stable ICU 2.0
|
2756
|
+
*/
|
2757
|
+
UChar *getBuffer(int32_t minCapacity);
|
2758
|
+
|
2759
|
+
/**
|
2760
|
+
* Release a read/write buffer on a UnicodeString object with an
|
2761
|
+
* "open" getBuffer(minCapacity).
|
2762
|
+
* This function must be called in a matched pair with getBuffer(minCapacity).
|
2763
|
+
* releaseBuffer(newLength) must be called if and only if a getBuffer(minCapacity) is "open".
|
2764
|
+
*
|
2765
|
+
* It will set the string length to newLength, at most to the current capacity.
|
2766
|
+
* If newLength==-1 then it will set the length according to the
|
2767
|
+
* first NUL in the buffer, or to the capacity if there is no NUL.
|
2768
|
+
*
|
2769
|
+
* After calling releaseBuffer(newLength) the UnicodeString is back to normal operation.
|
2770
|
+
*
|
2771
|
+
* @param newLength the new length of the UnicodeString object;
|
2772
|
+
* defaults to the current capacity if newLength is greater than that;
|
2773
|
+
* if newLength==-1, it defaults to u_strlen(buffer) but not more than
|
2774
|
+
* the current capacity of the string
|
2775
|
+
*
|
2776
|
+
* @see getBuffer(int32_t minCapacity)
|
2777
|
+
* @stable ICU 2.0
|
2778
|
+
*/
|
2779
|
+
void releaseBuffer(int32_t newLength=-1);
|
2780
|
+
|
2781
|
+
/**
|
2782
|
+
* Get a read-only pointer to the internal buffer.
|
2783
|
+
* This can be called at any time on a valid UnicodeString.
|
2784
|
+
*
|
2785
|
+
* It returns 0 if the string is bogus, or
|
2786
|
+
* during an "open" getBuffer(minCapacity).
|
2787
|
+
*
|
2788
|
+
* It can be called as many times as desired.
|
2789
|
+
* The pointer that it returns will remain valid until the UnicodeString object is modified,
|
2790
|
+
* at which time the pointer is semantically invalidated and must not be used any more.
|
2791
|
+
*
|
2792
|
+
* The capacity of the buffer can be determined with getCapacity().
|
2793
|
+
* The part after length() may or may not be initialized and valid,
|
2794
|
+
* depending on the history of the UnicodeString object.
|
2795
|
+
*
|
2796
|
+
* The buffer contents is (probably) not NUL-terminated.
|
2797
|
+
* You can check if it is with
|
2798
|
+
* <code>(s.length()<s.getCapacity() && buffer[s.length()]==0)</code>.
|
2799
|
+
* (See getTerminatedBuffer().)
|
2800
|
+
*
|
2801
|
+
* The buffer may reside in read-only memory. Its contents must not
|
2802
|
+
* be modified.
|
2803
|
+
*
|
2804
|
+
* @return a read-only pointer to the internal string buffer,
|
2805
|
+
* or 0 if the string is empty or bogus
|
2806
|
+
*
|
2807
|
+
* @see getBuffer(int32_t minCapacity)
|
2808
|
+
* @see getTerminatedBuffer()
|
2809
|
+
* @stable ICU 2.0
|
2810
|
+
*/
|
2811
|
+
inline const UChar *getBuffer() const;
|
2812
|
+
|
2813
|
+
/**
|
2814
|
+
* Get a read-only pointer to the internal buffer,
|
2815
|
+
* making sure that it is NUL-terminated.
|
2816
|
+
* This can be called at any time on a valid UnicodeString.
|
2817
|
+
*
|
2818
|
+
* It returns 0 if the string is bogus, or
|
2819
|
+
* during an "open" getBuffer(minCapacity), or if the buffer cannot
|
2820
|
+
* be NUL-terminated (because memory allocation failed).
|
2821
|
+
*
|
2822
|
+
* It can be called as many times as desired.
|
2823
|
+
* The pointer that it returns will remain valid until the UnicodeString object is modified,
|
2824
|
+
* at which time the pointer is semantically invalidated and must not be used any more.
|
2825
|
+
*
|
2826
|
+
* The capacity of the buffer can be determined with getCapacity().
|
2827
|
+
* The part after length()+1 may or may not be initialized and valid,
|
2828
|
+
* depending on the history of the UnicodeString object.
|
2829
|
+
*
|
2830
|
+
* The buffer contents is guaranteed to be NUL-terminated.
|
2831
|
+
* getTerminatedBuffer() may reallocate the buffer if a terminating NUL
|
2832
|
+
* is written.
|
2833
|
+
* For this reason, this function is not const, unlike getBuffer().
|
2834
|
+
* Note that a UnicodeString may also contain NUL characters as part of its contents.
|
2835
|
+
*
|
2836
|
+
* The buffer may reside in read-only memory. Its contents must not
|
2837
|
+
* be modified.
|
2838
|
+
*
|
2839
|
+
* @return a read-only pointer to the internal string buffer,
|
2840
|
+
* or 0 if the string is empty or bogus
|
2841
|
+
*
|
2842
|
+
* @see getBuffer(int32_t minCapacity)
|
2843
|
+
* @see getBuffer()
|
2844
|
+
* @stable ICU 2.2
|
2845
|
+
*/
|
2846
|
+
const UChar *getTerminatedBuffer();
|
2847
|
+
|
2848
|
+
//========================================
|
2849
|
+
// Constructors
|
2850
|
+
//========================================
|
2851
|
+
|
2852
|
+
/** Construct an empty UnicodeString.
|
2853
|
+
* @stable ICU 2.0
|
2854
|
+
*/
|
2855
|
+
inline UnicodeString();
|
2856
|
+
|
2857
|
+
/**
|
2858
|
+
* Construct a UnicodeString with capacity to hold <TT>capacity</TT> UChars
|
2859
|
+
* @param capacity the number of UChars this UnicodeString should hold
|
2860
|
+
* before a resize is necessary; if count is greater than 0 and count
|
2861
|
+
* code points c take up more space than capacity, then capacity is adjusted
|
2862
|
+
* accordingly.
|
2863
|
+
* @param c is used to initially fill the string
|
2864
|
+
* @param count specifies how many code points c are to be written in the
|
2865
|
+
* string
|
2866
|
+
* @stable ICU 2.0
|
2867
|
+
*/
|
2868
|
+
UnicodeString(int32_t capacity, UChar32 c, int32_t count);
|
2869
|
+
|
2870
|
+
/**
|
2871
|
+
* Single UChar (code unit) constructor.
|
2872
|
+
*
|
2873
|
+
* It is recommended to mark this constructor "explicit" by
|
2874
|
+
* <code>-DUNISTR_FROM_CHAR_EXPLICIT=explicit</code>
|
2875
|
+
* on the compiler command line or similar.
|
2876
|
+
* @param ch the character to place in the UnicodeString
|
2877
|
+
* @stable ICU 2.0
|
2878
|
+
*/
|
2879
|
+
UNISTR_FROM_CHAR_EXPLICIT UnicodeString(UChar ch);
|
2880
|
+
|
2881
|
+
/**
|
2882
|
+
* Single UChar32 (code point) constructor.
|
2883
|
+
*
|
2884
|
+
* It is recommended to mark this constructor "explicit" by
|
2885
|
+
* <code>-DUNISTR_FROM_CHAR_EXPLICIT=explicit</code>
|
2886
|
+
* on the compiler command line or similar.
|
2887
|
+
* @param ch the character to place in the UnicodeString
|
2888
|
+
* @stable ICU 2.0
|
2889
|
+
*/
|
2890
|
+
UNISTR_FROM_CHAR_EXPLICIT UnicodeString(UChar32 ch);
|
2891
|
+
|
2892
|
+
/**
|
2893
|
+
* UChar* constructor.
|
2894
|
+
*
|
2895
|
+
* It is recommended to mark this constructor "explicit" by
|
2896
|
+
* <code>-DUNISTR_FROM_STRING_EXPLICIT=explicit</code>
|
2897
|
+
* on the compiler command line or similar.
|
2898
|
+
* @param text The characters to place in the UnicodeString. <TT>text</TT>
|
2899
|
+
* must be NULL (U+0000) terminated.
|
2900
|
+
* @stable ICU 2.0
|
2901
|
+
*/
|
2902
|
+
UNISTR_FROM_STRING_EXPLICIT UnicodeString(const UChar *text);
|
2903
|
+
|
2904
|
+
/**
|
2905
|
+
* UChar* constructor.
|
2906
|
+
* @param text The characters to place in the UnicodeString.
|
2907
|
+
* @param textLength The number of Unicode characters in <TT>text</TT>
|
2908
|
+
* to copy.
|
2909
|
+
* @stable ICU 2.0
|
2910
|
+
*/
|
2911
|
+
UnicodeString(const UChar *text,
|
2912
|
+
int32_t textLength);
|
2913
|
+
|
2914
|
+
/**
|
2915
|
+
* Readonly-aliasing UChar* constructor.
|
2916
|
+
* The text will be used for the UnicodeString object, but
|
2917
|
+
* it will not be released when the UnicodeString is destroyed.
|
2918
|
+
* This has copy-on-write semantics:
|
2919
|
+
* When the string is modified, then the buffer is first copied into
|
2920
|
+
* newly allocated memory.
|
2921
|
+
* The aliased buffer is never modified.
|
2922
|
+
*
|
2923
|
+
* In an assignment to another UnicodeString, when using the copy constructor
|
2924
|
+
* or the assignment operator, the text will be copied.
|
2925
|
+
* When using fastCopyFrom(), the text will be aliased again,
|
2926
|
+
* so that both strings then alias the same readonly-text.
|
2927
|
+
*
|
2928
|
+
* @param isTerminated specifies if <code>text</code> is <code>NUL</code>-terminated.
|
2929
|
+
* This must be true if <code>textLength==-1</code>.
|
2930
|
+
* @param text The characters to alias for the UnicodeString.
|
2931
|
+
* @param textLength The number of Unicode characters in <code>text</code> to alias.
|
2932
|
+
* If -1, then this constructor will determine the length
|
2933
|
+
* by calling <code>u_strlen()</code>.
|
2934
|
+
* @stable ICU 2.0
|
2935
|
+
*/
|
2936
|
+
UnicodeString(UBool isTerminated,
|
2937
|
+
const UChar *text,
|
2938
|
+
int32_t textLength);
|
2939
|
+
|
2940
|
+
/**
|
2941
|
+
* Writable-aliasing UChar* constructor.
|
2942
|
+
* The text will be used for the UnicodeString object, but
|
2943
|
+
* it will not be released when the UnicodeString is destroyed.
|
2944
|
+
* This has write-through semantics:
|
2945
|
+
* For as long as the capacity of the buffer is sufficient, write operations
|
2946
|
+
* will directly affect the buffer. When more capacity is necessary, then
|
2947
|
+
* a new buffer will be allocated and the contents copied as with regularly
|
2948
|
+
* constructed strings.
|
2949
|
+
* In an assignment to another UnicodeString, the buffer will be copied.
|
2950
|
+
* The extract(UChar *dst) function detects whether the dst pointer is the same
|
2951
|
+
* as the string buffer itself and will in this case not copy the contents.
|
2952
|
+
*
|
2953
|
+
* @param buffer The characters to alias for the UnicodeString.
|
2954
|
+
* @param buffLength The number of Unicode characters in <code>buffer</code> to alias.
|
2955
|
+
* @param buffCapacity The size of <code>buffer</code> in UChars.
|
2956
|
+
* @stable ICU 2.0
|
2957
|
+
*/
|
2958
|
+
UnicodeString(UChar *buffer, int32_t buffLength, int32_t buffCapacity);
|
2959
|
+
|
2960
|
+
#if U_CHARSET_IS_UTF8 || !UCONFIG_NO_CONVERSION
|
2961
|
+
|
2962
|
+
/**
|
2963
|
+
* char* constructor.
|
2964
|
+
* Uses the default converter (and thus depends on the ICU conversion code)
|
2965
|
+
* unless U_CHARSET_IS_UTF8 is set to 1.
|
2966
|
+
*
|
2967
|
+
* For ASCII (really "invariant character") strings it is more efficient to use
|
2968
|
+
* the constructor that takes a US_INV (for its enum EInvariant).
|
2969
|
+
* For ASCII (invariant-character) string literals, see UNICODE_STRING and
|
2970
|
+
* UNICODE_STRING_SIMPLE.
|
2971
|
+
*
|
2972
|
+
* It is recommended to mark this constructor "explicit" by
|
2973
|
+
* <code>-DUNISTR_FROM_STRING_EXPLICIT=explicit</code>
|
2974
|
+
* on the compiler command line or similar.
|
2975
|
+
* @param codepageData an array of bytes, null-terminated,
|
2976
|
+
* in the platform's default codepage.
|
2977
|
+
* @stable ICU 2.0
|
2978
|
+
* @see UNICODE_STRING
|
2979
|
+
* @see UNICODE_STRING_SIMPLE
|
2980
|
+
*/
|
2981
|
+
UNISTR_FROM_STRING_EXPLICIT UnicodeString(const char *codepageData);
|
2982
|
+
|
2983
|
+
/**
|
2984
|
+
* char* constructor.
|
2985
|
+
* Uses the default converter (and thus depends on the ICU conversion code)
|
2986
|
+
* unless U_CHARSET_IS_UTF8 is set to 1.
|
2987
|
+
* @param codepageData an array of bytes in the platform's default codepage.
|
2988
|
+
* @param dataLength The number of bytes in <TT>codepageData</TT>.
|
2989
|
+
* @stable ICU 2.0
|
2990
|
+
*/
|
2991
|
+
UnicodeString(const char *codepageData, int32_t dataLength);
|
2992
|
+
|
2993
|
+
#endif
|
2994
|
+
|
2995
|
+
#if !UCONFIG_NO_CONVERSION
|
2996
|
+
|
2997
|
+
/**
|
2998
|
+
* char* constructor.
|
2999
|
+
* @param codepageData an array of bytes, null-terminated
|
3000
|
+
* @param codepage the encoding of <TT>codepageData</TT>. The special
|
3001
|
+
* value 0 for <TT>codepage</TT> indicates that the text is in the
|
3002
|
+
* platform's default codepage.
|
3003
|
+
*
|
3004
|
+
* If <code>codepage</code> is an empty string (<code>""</code>),
|
3005
|
+
* then a simple conversion is performed on the codepage-invariant
|
3006
|
+
* subset ("invariant characters") of the platform encoding. See utypes.h.
|
3007
|
+
* Recommendation: For invariant-character strings use the constructor
|
3008
|
+
* UnicodeString(const char *src, int32_t length, enum EInvariant inv)
|
3009
|
+
* because it avoids object code dependencies of UnicodeString on
|
3010
|
+
* the conversion code.
|
3011
|
+
*
|
3012
|
+
* @stable ICU 2.0
|
3013
|
+
*/
|
3014
|
+
UnicodeString(const char *codepageData, const char *codepage);
|
3015
|
+
|
3016
|
+
/**
|
3017
|
+
* char* constructor.
|
3018
|
+
* @param codepageData an array of bytes.
|
3019
|
+
* @param dataLength The number of bytes in <TT>codepageData</TT>.
|
3020
|
+
* @param codepage the encoding of <TT>codepageData</TT>. The special
|
3021
|
+
* value 0 for <TT>codepage</TT> indicates that the text is in the
|
3022
|
+
* platform's default codepage.
|
3023
|
+
* If <code>codepage</code> is an empty string (<code>""</code>),
|
3024
|
+
* then a simple conversion is performed on the codepage-invariant
|
3025
|
+
* subset ("invariant characters") of the platform encoding. See utypes.h.
|
3026
|
+
* Recommendation: For invariant-character strings use the constructor
|
3027
|
+
* UnicodeString(const char *src, int32_t length, enum EInvariant inv)
|
3028
|
+
* because it avoids object code dependencies of UnicodeString on
|
3029
|
+
* the conversion code.
|
3030
|
+
*
|
3031
|
+
* @stable ICU 2.0
|
3032
|
+
*/
|
3033
|
+
UnicodeString(const char *codepageData, int32_t dataLength, const char *codepage);
|
3034
|
+
|
3035
|
+
/**
|
3036
|
+
* char * / UConverter constructor.
|
3037
|
+
* This constructor uses an existing UConverter object to
|
3038
|
+
* convert the codepage string to Unicode and construct a UnicodeString
|
3039
|
+
* from that.
|
3040
|
+
*
|
3041
|
+
* The converter is reset at first.
|
3042
|
+
* If the error code indicates a failure before this constructor is called,
|
3043
|
+
* or if an error occurs during conversion or construction,
|
3044
|
+
* then the string will be bogus.
|
3045
|
+
*
|
3046
|
+
* This function avoids the overhead of opening and closing a converter if
|
3047
|
+
* multiple strings are constructed.
|
3048
|
+
*
|
3049
|
+
* @param src input codepage string
|
3050
|
+
* @param srcLength length of the input string, can be -1 for NUL-terminated strings
|
3051
|
+
* @param cnv converter object (ucnv_resetToUnicode() will be called),
|
3052
|
+
* can be NULL for the default converter
|
3053
|
+
* @param errorCode normal ICU error code
|
3054
|
+
* @stable ICU 2.0
|
3055
|
+
*/
|
3056
|
+
UnicodeString(
|
3057
|
+
const char *src, int32_t srcLength,
|
3058
|
+
UConverter *cnv,
|
3059
|
+
UErrorCode &errorCode);
|
3060
|
+
|
3061
|
+
#endif
|
3062
|
+
|
3063
|
+
/**
|
3064
|
+
* Constructs a Unicode string from an invariant-character char * string.
|
3065
|
+
* About invariant characters see utypes.h.
|
3066
|
+
* This constructor has no runtime dependency on conversion code and is
|
3067
|
+
* therefore recommended over ones taking a charset name string
|
3068
|
+
* (where the empty string "" indicates invariant-character conversion).
|
3069
|
+
*
|
3070
|
+
* Use the macro US_INV as the third, signature-distinguishing parameter.
|
3071
|
+
*
|
3072
|
+
* For example:
|
3073
|
+
* \code
|
3074
|
+
* void fn(const char *s) {
|
3075
|
+
* UnicodeString ustr(s, -1, US_INV);
|
3076
|
+
* // use ustr ...
|
3077
|
+
* }
|
3078
|
+
* \endcode
|
3079
|
+
*
|
3080
|
+
* @param src String using only invariant characters.
|
3081
|
+
* @param length Length of src, or -1 if NUL-terminated.
|
3082
|
+
* @param inv Signature-distinguishing paramater, use US_INV.
|
3083
|
+
*
|
3084
|
+
* @see US_INV
|
3085
|
+
* @stable ICU 3.2
|
3086
|
+
*/
|
3087
|
+
UnicodeString(const char *src, int32_t length, enum EInvariant inv);
|
3088
|
+
|
3089
|
+
|
3090
|
+
/**
|
3091
|
+
* Copy constructor.
|
3092
|
+
* @param that The UnicodeString object to copy.
|
3093
|
+
* @stable ICU 2.0
|
3094
|
+
*/
|
3095
|
+
UnicodeString(const UnicodeString& that);
|
3096
|
+
|
3097
|
+
/**
|
3098
|
+
* 'Substring' constructor from tail of source string.
|
3099
|
+
* @param src The UnicodeString object to copy.
|
3100
|
+
* @param srcStart The offset into <tt>src</tt> at which to start copying.
|
3101
|
+
* @stable ICU 2.2
|
3102
|
+
*/
|
3103
|
+
UnicodeString(const UnicodeString& src, int32_t srcStart);
|
3104
|
+
|
3105
|
+
/**
|
3106
|
+
* 'Substring' constructor from subrange of source string.
|
3107
|
+
* @param src The UnicodeString object to copy.
|
3108
|
+
* @param srcStart The offset into <tt>src</tt> at which to start copying.
|
3109
|
+
* @param srcLength The number of characters from <tt>src</tt> to copy.
|
3110
|
+
* @stable ICU 2.2
|
3111
|
+
*/
|
3112
|
+
UnicodeString(const UnicodeString& src, int32_t srcStart, int32_t srcLength);
|
3113
|
+
|
3114
|
+
/**
|
3115
|
+
* Clone this object, an instance of a subclass of Replaceable.
|
3116
|
+
* Clones can be used concurrently in multiple threads.
|
3117
|
+
* If a subclass does not implement clone(), or if an error occurs,
|
3118
|
+
* then NULL is returned.
|
3119
|
+
* The clone functions in all subclasses return a pointer to a Replaceable
|
3120
|
+
* because some compilers do not support covariant (same-as-this)
|
3121
|
+
* return types; cast to the appropriate subclass if necessary.
|
3122
|
+
* The caller must delete the clone.
|
3123
|
+
*
|
3124
|
+
* @return a clone of this object
|
3125
|
+
*
|
3126
|
+
* @see Replaceable::clone
|
3127
|
+
* @see getDynamicClassID
|
3128
|
+
* @stable ICU 2.6
|
3129
|
+
*/
|
3130
|
+
virtual Replaceable *clone() const;
|
3131
|
+
|
3132
|
+
/** Destructor.
|
3133
|
+
* @stable ICU 2.0
|
3134
|
+
*/
|
3135
|
+
virtual ~UnicodeString();
|
3136
|
+
|
3137
|
+
/**
|
3138
|
+
* Create a UnicodeString from a UTF-8 string.
|
3139
|
+
* Illegal input is replaced with U+FFFD. Otherwise, errors result in a bogus string.
|
3140
|
+
* Calls u_strFromUTF8WithSub().
|
3141
|
+
*
|
3142
|
+
* @param utf8 UTF-8 input string.
|
3143
|
+
* Note that a StringPiece can be implicitly constructed
|
3144
|
+
* from a std::string or a NUL-terminated const char * string.
|
3145
|
+
* @return A UnicodeString with equivalent UTF-16 contents.
|
3146
|
+
* @see toUTF8
|
3147
|
+
* @see toUTF8String
|
3148
|
+
* @stable ICU 4.2
|
3149
|
+
*/
|
3150
|
+
static UnicodeString fromUTF8(const StringPiece &utf8);
|
3151
|
+
|
3152
|
+
/**
|
3153
|
+
* Create a UnicodeString from a UTF-32 string.
|
3154
|
+
* Illegal input is replaced with U+FFFD. Otherwise, errors result in a bogus string.
|
3155
|
+
* Calls u_strFromUTF32WithSub().
|
3156
|
+
*
|
3157
|
+
* @param utf32 UTF-32 input string. Must not be NULL.
|
3158
|
+
* @param length Length of the input string, or -1 if NUL-terminated.
|
3159
|
+
* @return A UnicodeString with equivalent UTF-16 contents.
|
3160
|
+
* @see toUTF32
|
3161
|
+
* @stable ICU 4.2
|
3162
|
+
*/
|
3163
|
+
static UnicodeString fromUTF32(const UChar32 *utf32, int32_t length);
|
3164
|
+
|
3165
|
+
/* Miscellaneous operations */
|
3166
|
+
|
3167
|
+
/**
|
3168
|
+
* Unescape a string of characters and return a string containing
|
3169
|
+
* the result. The following escape sequences are recognized:
|
3170
|
+
*
|
3171
|
+
* \\uhhhh 4 hex digits; h in [0-9A-Fa-f]
|
3172
|
+
* \\Uhhhhhhhh 8 hex digits
|
3173
|
+
* \\xhh 1-2 hex digits
|
3174
|
+
* \\ooo 1-3 octal digits; o in [0-7]
|
3175
|
+
* \\cX control-X; X is masked with 0x1F
|
3176
|
+
*
|
3177
|
+
* as well as the standard ANSI C escapes:
|
3178
|
+
*
|
3179
|
+
* \\a => U+0007, \\b => U+0008, \\t => U+0009, \\n => U+000A,
|
3180
|
+
* \\v => U+000B, \\f => U+000C, \\r => U+000D, \\e => U+001B,
|
3181
|
+
* \\" => U+0022, \\' => U+0027, \\? => U+003F, \\\\ => U+005C
|
3182
|
+
*
|
3183
|
+
* Anything else following a backslash is generically escaped. For
|
3184
|
+
* example, "[a\\-z]" returns "[a-z]".
|
3185
|
+
*
|
3186
|
+
* If an escape sequence is ill-formed, this method returns an empty
|
3187
|
+
* string. An example of an ill-formed sequence is "\\u" followed by
|
3188
|
+
* fewer than 4 hex digits.
|
3189
|
+
*
|
3190
|
+
* This function is similar to u_unescape() but not identical to it.
|
3191
|
+
* The latter takes a source char*, so it does escape recognition
|
3192
|
+
* and also invariant conversion.
|
3193
|
+
*
|
3194
|
+
* @return a string with backslash escapes interpreted, or an
|
3195
|
+
* empty string on error.
|
3196
|
+
* @see UnicodeString#unescapeAt()
|
3197
|
+
* @see u_unescape()
|
3198
|
+
* @see u_unescapeAt()
|
3199
|
+
* @stable ICU 2.0
|
3200
|
+
*/
|
3201
|
+
UnicodeString unescape() const;
|
3202
|
+
|
3203
|
+
/**
|
3204
|
+
* Unescape a single escape sequence and return the represented
|
3205
|
+
* character. See unescape() for a listing of the recognized escape
|
3206
|
+
* sequences. The character at offset-1 is assumed (without
|
3207
|
+
* checking) to be a backslash. If the escape sequence is
|
3208
|
+
* ill-formed, or the offset is out of range, U_SENTINEL=-1 is
|
3209
|
+
* returned.
|
3210
|
+
*
|
3211
|
+
* @param offset an input output parameter. On input, it is the
|
3212
|
+
* offset into this string where the escape sequence is located,
|
3213
|
+
* after the initial backslash. On output, it is advanced after the
|
3214
|
+
* last character parsed. On error, it is not advanced at all.
|
3215
|
+
* @return the character represented by the escape sequence at
|
3216
|
+
* offset, or U_SENTINEL=-1 on error.
|
3217
|
+
* @see UnicodeString#unescape()
|
3218
|
+
* @see u_unescape()
|
3219
|
+
* @see u_unescapeAt()
|
3220
|
+
* @stable ICU 2.0
|
3221
|
+
*/
|
3222
|
+
UChar32 unescapeAt(int32_t &offset) const;
|
3223
|
+
|
3224
|
+
/**
|
3225
|
+
* ICU "poor man's RTTI", returns a UClassID for this class.
|
3226
|
+
*
|
3227
|
+
* @stable ICU 2.2
|
3228
|
+
*/
|
3229
|
+
static UClassID U_EXPORT2 getStaticClassID();
|
3230
|
+
|
3231
|
+
/**
|
3232
|
+
* ICU "poor man's RTTI", returns a UClassID for the actual class.
|
3233
|
+
*
|
3234
|
+
* @stable ICU 2.2
|
3235
|
+
*/
|
3236
|
+
virtual UClassID getDynamicClassID() const;
|
3237
|
+
|
3238
|
+
//========================================
|
3239
|
+
// Implementation methods
|
3240
|
+
//========================================
|
3241
|
+
|
3242
|
+
protected:
|
3243
|
+
/**
|
3244
|
+
* Implement Replaceable::getLength() (see jitterbug 1027).
|
3245
|
+
* @stable ICU 2.4
|
3246
|
+
*/
|
3247
|
+
virtual int32_t getLength() const;
|
3248
|
+
|
3249
|
+
/**
|
3250
|
+
* The change in Replaceable to use virtual getCharAt() allows
|
3251
|
+
* UnicodeString::charAt() to be inline again (see jitterbug 709).
|
3252
|
+
* @stable ICU 2.4
|
3253
|
+
*/
|
3254
|
+
virtual UChar getCharAt(int32_t offset) const;
|
3255
|
+
|
3256
|
+
/**
|
3257
|
+
* The change in Replaceable to use virtual getChar32At() allows
|
3258
|
+
* UnicodeString::char32At() to be inline again (see jitterbug 709).
|
3259
|
+
* @stable ICU 2.4
|
3260
|
+
*/
|
3261
|
+
virtual UChar32 getChar32At(int32_t offset) const;
|
3262
|
+
|
3263
|
+
private:
|
3264
|
+
// For char* constructors. Could be made public.
|
3265
|
+
UnicodeString &setToUTF8(const StringPiece &utf8);
|
3266
|
+
// For extract(char*).
|
3267
|
+
// We could make a toUTF8(target, capacity, errorCode) public but not
|
3268
|
+
// this version: New API will be cleaner if we make callers create substrings
|
3269
|
+
// rather than having start+length on every method,
|
3270
|
+
// and it should take a UErrorCode&.
|
3271
|
+
int32_t
|
3272
|
+
toUTF8(int32_t start, int32_t len,
|
3273
|
+
char *target, int32_t capacity) const;
|
3274
|
+
|
3275
|
+
/**
|
3276
|
+
* Internal string contents comparison, called by operator==.
|
3277
|
+
* Requires: this & text not bogus and have same lengths.
|
3278
|
+
*/
|
3279
|
+
UBool doEquals(const UnicodeString &text, int32_t len) const;
|
3280
|
+
|
3281
|
+
inline int8_t
|
3282
|
+
doCompare(int32_t start,
|
3283
|
+
int32_t length,
|
3284
|
+
const UnicodeString& srcText,
|
3285
|
+
int32_t srcStart,
|
3286
|
+
int32_t srcLength) const;
|
3287
|
+
|
3288
|
+
int8_t doCompare(int32_t start,
|
3289
|
+
int32_t length,
|
3290
|
+
const UChar *srcChars,
|
3291
|
+
int32_t srcStart,
|
3292
|
+
int32_t srcLength) const;
|
3293
|
+
|
3294
|
+
inline int8_t
|
3295
|
+
doCompareCodePointOrder(int32_t start,
|
3296
|
+
int32_t length,
|
3297
|
+
const UnicodeString& srcText,
|
3298
|
+
int32_t srcStart,
|
3299
|
+
int32_t srcLength) const;
|
3300
|
+
|
3301
|
+
int8_t doCompareCodePointOrder(int32_t start,
|
3302
|
+
int32_t length,
|
3303
|
+
const UChar *srcChars,
|
3304
|
+
int32_t srcStart,
|
3305
|
+
int32_t srcLength) const;
|
3306
|
+
|
3307
|
+
inline int8_t
|
3308
|
+
doCaseCompare(int32_t start,
|
3309
|
+
int32_t length,
|
3310
|
+
const UnicodeString &srcText,
|
3311
|
+
int32_t srcStart,
|
3312
|
+
int32_t srcLength,
|
3313
|
+
uint32_t options) const;
|
3314
|
+
|
3315
|
+
int8_t
|
3316
|
+
doCaseCompare(int32_t start,
|
3317
|
+
int32_t length,
|
3318
|
+
const UChar *srcChars,
|
3319
|
+
int32_t srcStart,
|
3320
|
+
int32_t srcLength,
|
3321
|
+
uint32_t options) const;
|
3322
|
+
|
3323
|
+
int32_t doIndexOf(UChar c,
|
3324
|
+
int32_t start,
|
3325
|
+
int32_t length) const;
|
3326
|
+
|
3327
|
+
int32_t doIndexOf(UChar32 c,
|
3328
|
+
int32_t start,
|
3329
|
+
int32_t length) const;
|
3330
|
+
|
3331
|
+
int32_t doLastIndexOf(UChar c,
|
3332
|
+
int32_t start,
|
3333
|
+
int32_t length) const;
|
3334
|
+
|
3335
|
+
int32_t doLastIndexOf(UChar32 c,
|
3336
|
+
int32_t start,
|
3337
|
+
int32_t length) const;
|
3338
|
+
|
3339
|
+
void doExtract(int32_t start,
|
3340
|
+
int32_t length,
|
3341
|
+
UChar *dst,
|
3342
|
+
int32_t dstStart) const;
|
3343
|
+
|
3344
|
+
inline void doExtract(int32_t start,
|
3345
|
+
int32_t length,
|
3346
|
+
UnicodeString& target) const;
|
3347
|
+
|
3348
|
+
inline UChar doCharAt(int32_t offset) const;
|
3349
|
+
|
3350
|
+
UnicodeString& doReplace(int32_t start,
|
3351
|
+
int32_t length,
|
3352
|
+
const UnicodeString& srcText,
|
3353
|
+
int32_t srcStart,
|
3354
|
+
int32_t srcLength);
|
3355
|
+
|
3356
|
+
UnicodeString& doReplace(int32_t start,
|
3357
|
+
int32_t length,
|
3358
|
+
const UChar *srcChars,
|
3359
|
+
int32_t srcStart,
|
3360
|
+
int32_t srcLength);
|
3361
|
+
|
3362
|
+
UnicodeString& doReverse(int32_t start,
|
3363
|
+
int32_t length);
|
3364
|
+
|
3365
|
+
// calculate hash code
|
3366
|
+
int32_t doHashCode(void) const;
|
3367
|
+
|
3368
|
+
// get pointer to start of array
|
3369
|
+
// these do not check for kOpenGetBuffer, unlike the public getBuffer() function
|
3370
|
+
inline UChar* getArrayStart(void);
|
3371
|
+
inline const UChar* getArrayStart(void) const;
|
3372
|
+
|
3373
|
+
// A UnicodeString object (not necessarily its current buffer)
|
3374
|
+
// is writable unless it isBogus() or it has an "open" getBuffer(minCapacity).
|
3375
|
+
inline UBool isWritable() const;
|
3376
|
+
|
3377
|
+
// Is the current buffer writable?
|
3378
|
+
inline UBool isBufferWritable() const;
|
3379
|
+
|
3380
|
+
// None of the following does releaseArray().
|
3381
|
+
inline void setLength(int32_t len); // sets only fShortLength and fLength
|
3382
|
+
inline void setToEmpty(); // sets fFlags=kShortString
|
3383
|
+
inline void setArray(UChar *array, int32_t len, int32_t capacity); // does not set fFlags
|
3384
|
+
|
3385
|
+
// allocate the array; result may be fStackBuffer
|
3386
|
+
// sets refCount to 1 if appropriate
|
3387
|
+
// sets fArray, fCapacity, and fFlags
|
3388
|
+
// returns boolean for success or failure
|
3389
|
+
UBool allocate(int32_t capacity);
|
3390
|
+
|
3391
|
+
// release the array if owned
|
3392
|
+
void releaseArray(void);
|
3393
|
+
|
3394
|
+
// turn a bogus string into an empty one
|
3395
|
+
void unBogus();
|
3396
|
+
|
3397
|
+
// implements assigment operator, copy constructor, and fastCopyFrom()
|
3398
|
+
UnicodeString ©From(const UnicodeString &src, UBool fastCopy=FALSE);
|
3399
|
+
|
3400
|
+
// Pin start and limit to acceptable values.
|
3401
|
+
inline void pinIndex(int32_t& start) const;
|
3402
|
+
inline void pinIndices(int32_t& start,
|
3403
|
+
int32_t& length) const;
|
3404
|
+
|
3405
|
+
#if !UCONFIG_NO_CONVERSION
|
3406
|
+
|
3407
|
+
/* Internal extract() using UConverter. */
|
3408
|
+
int32_t doExtract(int32_t start, int32_t length,
|
3409
|
+
char *dest, int32_t destCapacity,
|
3410
|
+
UConverter *cnv,
|
3411
|
+
UErrorCode &errorCode) const;
|
3412
|
+
|
3413
|
+
/*
|
3414
|
+
* Real constructor for converting from codepage data.
|
3415
|
+
* It assumes that it is called with !fRefCounted.
|
3416
|
+
*
|
3417
|
+
* If <code>codepage==0</code>, then the default converter
|
3418
|
+
* is used for the platform encoding.
|
3419
|
+
* If <code>codepage</code> is an empty string (<code>""</code>),
|
3420
|
+
* then a simple conversion is performed on the codepage-invariant
|
3421
|
+
* subset ("invariant characters") of the platform encoding. See utypes.h.
|
3422
|
+
*/
|
3423
|
+
void doCodepageCreate(const char *codepageData,
|
3424
|
+
int32_t dataLength,
|
3425
|
+
const char *codepage);
|
3426
|
+
|
3427
|
+
/*
|
3428
|
+
* Worker function for creating a UnicodeString from
|
3429
|
+
* a codepage string using a UConverter.
|
3430
|
+
*/
|
3431
|
+
void
|
3432
|
+
doCodepageCreate(const char *codepageData,
|
3433
|
+
int32_t dataLength,
|
3434
|
+
UConverter *converter,
|
3435
|
+
UErrorCode &status);
|
3436
|
+
|
3437
|
+
#endif
|
3438
|
+
|
3439
|
+
/*
|
3440
|
+
* This function is called when write access to the array
|
3441
|
+
* is necessary.
|
3442
|
+
*
|
3443
|
+
* We need to make a copy of the array if
|
3444
|
+
* the buffer is read-only, or
|
3445
|
+
* the buffer is refCounted (shared), and refCount>1, or
|
3446
|
+
* the buffer is too small.
|
3447
|
+
*
|
3448
|
+
* Return FALSE if memory could not be allocated.
|
3449
|
+
*/
|
3450
|
+
UBool cloneArrayIfNeeded(int32_t newCapacity = -1,
|
3451
|
+
int32_t growCapacity = -1,
|
3452
|
+
UBool doCopyArray = TRUE,
|
3453
|
+
int32_t **pBufferToDelete = 0,
|
3454
|
+
UBool forceClone = FALSE);
|
3455
|
+
|
3456
|
+
/**
|
3457
|
+
* Common function for UnicodeString case mappings.
|
3458
|
+
* The stringCaseMapper has the same type UStringCaseMapper
|
3459
|
+
* as in ustr_imp.h for ustrcase_map().
|
3460
|
+
*/
|
3461
|
+
UnicodeString &
|
3462
|
+
caseMap(const UCaseMap *csm, UStringCaseMapper *stringCaseMapper);
|
3463
|
+
|
3464
|
+
// ref counting
|
3465
|
+
void addRef(void);
|
3466
|
+
int32_t removeRef(void);
|
3467
|
+
int32_t refCount(void) const;
|
3468
|
+
|
3469
|
+
// constants
|
3470
|
+
enum {
|
3471
|
+
// Set the stack buffer size so that sizeof(UnicodeString) is,
|
3472
|
+
// naturally (without padding), a multiple of sizeof(pointer).
|
3473
|
+
US_STACKBUF_SIZE= sizeof(void *)==4 ? 13 : 15, // Size of stack buffer for short strings
|
3474
|
+
kInvalidUChar=0xffff, // invalid UChar index
|
3475
|
+
kGrowSize=128, // grow size for this buffer
|
3476
|
+
kInvalidHashCode=0, // invalid hash code
|
3477
|
+
kEmptyHashCode=1, // hash code for empty string
|
3478
|
+
|
3479
|
+
// bit flag values for fFlags
|
3480
|
+
kIsBogus=1, // this string is bogus, i.e., not valid or NULL
|
3481
|
+
kUsingStackBuffer=2,// using fUnion.fStackBuffer instead of fUnion.fFields
|
3482
|
+
kRefCounted=4, // there is a refCount field before the characters in fArray
|
3483
|
+
kBufferIsReadonly=8,// do not write to this buffer
|
3484
|
+
kOpenGetBuffer=16, // getBuffer(minCapacity) was called (is "open"),
|
3485
|
+
// and releaseBuffer(newLength) must be called
|
3486
|
+
|
3487
|
+
// combined values for convenience
|
3488
|
+
kShortString=kUsingStackBuffer,
|
3489
|
+
kLongString=kRefCounted,
|
3490
|
+
kReadonlyAlias=kBufferIsReadonly,
|
3491
|
+
kWritableAlias=0
|
3492
|
+
};
|
3493
|
+
|
3494
|
+
friend class StringThreadTest;
|
3495
|
+
friend class UnicodeStringAppendable;
|
3496
|
+
|
3497
|
+
union StackBufferOrFields; // forward declaration necessary before friend declaration
|
3498
|
+
friend union StackBufferOrFields; // make US_STACKBUF_SIZE visible inside fUnion
|
3499
|
+
|
3500
|
+
/*
|
3501
|
+
* The following are all the class fields that are stored
|
3502
|
+
* in each UnicodeString object.
|
3503
|
+
* Note that UnicodeString has virtual functions,
|
3504
|
+
* therefore there is an implicit vtable pointer
|
3505
|
+
* as the first real field.
|
3506
|
+
* The fields should be aligned such that no padding is necessary.
|
3507
|
+
* On 32-bit machines, the size should be 32 bytes,
|
3508
|
+
* on 64-bit machines (8-byte pointers), it should be 40 bytes.
|
3509
|
+
*
|
3510
|
+
* We use a hack to achieve this.
|
3511
|
+
*
|
3512
|
+
* With at least some compilers, each of the following is forced to
|
3513
|
+
* a multiple of sizeof(pointer) [the largest field base unit here is a data pointer],
|
3514
|
+
* rounded up with additional padding if the fields do not already fit that requirement:
|
3515
|
+
* - sizeof(class UnicodeString)
|
3516
|
+
* - offsetof(UnicodeString, fUnion)
|
3517
|
+
* - sizeof(fUnion)
|
3518
|
+
* - sizeof(fFields)
|
3519
|
+
*
|
3520
|
+
* In order to avoid padding, we make sizeof(fStackBuffer)=16 (=8 UChars)
|
3521
|
+
* which is at least as large as sizeof(fFields) on 32-bit and 64-bit machines.
|
3522
|
+
* (Padding at the end of fFields is ok:
|
3523
|
+
* As long as there is no padding after fStackBuffer, it is not wasted space.)
|
3524
|
+
*
|
3525
|
+
* We further assume that the compiler does not reorder the fields,
|
3526
|
+
* so that fRestOfStackBuffer (which holds a few more UChars) immediately follows after fUnion,
|
3527
|
+
* with at most some padding (but no other field) in between.
|
3528
|
+
* (Padding there would be wasted space, but functionally harmless.)
|
3529
|
+
*
|
3530
|
+
* We use a few more sizeof(pointer)'s chunks of space with
|
3531
|
+
* fRestOfStackBuffer, fShortLength and fFlags,
|
3532
|
+
* to get up exactly to the intended sizeof(UnicodeString).
|
3533
|
+
*/
|
3534
|
+
// (implicit) *vtable;
|
3535
|
+
union StackBufferOrFields {
|
3536
|
+
// fStackBuffer is used iff (fFlags&kUsingStackBuffer)
|
3537
|
+
// else fFields is used
|
3538
|
+
UChar fStackBuffer[8]; // buffer for short strings, together with fRestOfStackBuffer
|
3539
|
+
struct {
|
3540
|
+
UChar *fArray; // the Unicode data
|
3541
|
+
int32_t fCapacity; // capacity of fArray (in UChars)
|
3542
|
+
int32_t fLength; // number of characters in fArray if >127; else undefined
|
3543
|
+
} fFields;
|
3544
|
+
} fUnion;
|
3545
|
+
UChar fRestOfStackBuffer[US_STACKBUF_SIZE-8];
|
3546
|
+
int8_t fShortLength; // 0..127: length <0: real length is in fUnion.fFields.fLength
|
3547
|
+
uint8_t fFlags; // bit flags: see constants above
|
3548
|
+
};
|
3549
|
+
|
3550
|
+
/**
|
3551
|
+
* Create a new UnicodeString with the concatenation of two others.
|
3552
|
+
*
|
3553
|
+
* @param s1 The first string to be copied to the new one.
|
3554
|
+
* @param s2 The second string to be copied to the new one, after s1.
|
3555
|
+
* @return UnicodeString(s1).append(s2)
|
3556
|
+
* @stable ICU 2.8
|
3557
|
+
*/
|
3558
|
+
U_COMMON_API UnicodeString U_EXPORT2
|
3559
|
+
operator+ (const UnicodeString &s1, const UnicodeString &s2);
|
3560
|
+
|
3561
|
+
//========================================
|
3562
|
+
// Inline members
|
3563
|
+
//========================================
|
3564
|
+
|
3565
|
+
//========================================
|
3566
|
+
// Privates
|
3567
|
+
//========================================
|
3568
|
+
|
3569
|
+
inline void
|
3570
|
+
UnicodeString::pinIndex(int32_t& start) const
|
3571
|
+
{
|
3572
|
+
// pin index
|
3573
|
+
if(start < 0) {
|
3574
|
+
start = 0;
|
3575
|
+
} else if(start > length()) {
|
3576
|
+
start = length();
|
3577
|
+
}
|
3578
|
+
}
|
3579
|
+
|
3580
|
+
inline void
|
3581
|
+
UnicodeString::pinIndices(int32_t& start,
|
3582
|
+
int32_t& _length) const
|
3583
|
+
{
|
3584
|
+
// pin indices
|
3585
|
+
int32_t len = length();
|
3586
|
+
if(start < 0) {
|
3587
|
+
start = 0;
|
3588
|
+
} else if(start > len) {
|
3589
|
+
start = len;
|
3590
|
+
}
|
3591
|
+
if(_length < 0) {
|
3592
|
+
_length = 0;
|
3593
|
+
} else if(_length > (len - start)) {
|
3594
|
+
_length = (len - start);
|
3595
|
+
}
|
3596
|
+
}
|
3597
|
+
|
3598
|
+
inline UChar*
|
3599
|
+
UnicodeString::getArrayStart()
|
3600
|
+
{ return (fFlags&kUsingStackBuffer) ? fUnion.fStackBuffer : fUnion.fFields.fArray; }
|
3601
|
+
|
3602
|
+
inline const UChar*
|
3603
|
+
UnicodeString::getArrayStart() const
|
3604
|
+
{ return (fFlags&kUsingStackBuffer) ? fUnion.fStackBuffer : fUnion.fFields.fArray; }
|
3605
|
+
|
3606
|
+
//========================================
|
3607
|
+
// Default constructor
|
3608
|
+
//========================================
|
3609
|
+
|
3610
|
+
inline
|
3611
|
+
UnicodeString::UnicodeString()
|
3612
|
+
: fShortLength(0),
|
3613
|
+
fFlags(kShortString)
|
3614
|
+
{}
|
3615
|
+
|
3616
|
+
//========================================
|
3617
|
+
// Read-only implementation methods
|
3618
|
+
//========================================
|
3619
|
+
inline int32_t
|
3620
|
+
UnicodeString::length() const
|
3621
|
+
{ return fShortLength>=0 ? fShortLength : fUnion.fFields.fLength; }
|
3622
|
+
|
3623
|
+
inline int32_t
|
3624
|
+
UnicodeString::getCapacity() const
|
3625
|
+
{ return (fFlags&kUsingStackBuffer) ? US_STACKBUF_SIZE : fUnion.fFields.fCapacity; }
|
3626
|
+
|
3627
|
+
inline int32_t
|
3628
|
+
UnicodeString::hashCode() const
|
3629
|
+
{ return doHashCode(); }
|
3630
|
+
|
3631
|
+
inline UBool
|
3632
|
+
UnicodeString::isBogus() const
|
3633
|
+
{ return (UBool)(fFlags & kIsBogus); }
|
3634
|
+
|
3635
|
+
inline UBool
|
3636
|
+
UnicodeString::isWritable() const
|
3637
|
+
{ return (UBool)!(fFlags&(kOpenGetBuffer|kIsBogus)); }
|
3638
|
+
|
3639
|
+
inline UBool
|
3640
|
+
UnicodeString::isBufferWritable() const
|
3641
|
+
{
|
3642
|
+
return (UBool)(
|
3643
|
+
!(fFlags&(kOpenGetBuffer|kIsBogus|kBufferIsReadonly)) &&
|
3644
|
+
(!(fFlags&kRefCounted) || refCount()==1));
|
3645
|
+
}
|
3646
|
+
|
3647
|
+
inline const UChar *
|
3648
|
+
UnicodeString::getBuffer() const {
|
3649
|
+
if(fFlags&(kIsBogus|kOpenGetBuffer)) {
|
3650
|
+
return 0;
|
3651
|
+
} else if(fFlags&kUsingStackBuffer) {
|
3652
|
+
return fUnion.fStackBuffer;
|
3653
|
+
} else {
|
3654
|
+
return fUnion.fFields.fArray;
|
3655
|
+
}
|
3656
|
+
}
|
3657
|
+
|
3658
|
+
//========================================
|
3659
|
+
// Read-only alias methods
|
3660
|
+
//========================================
|
3661
|
+
inline int8_t
|
3662
|
+
UnicodeString::doCompare(int32_t start,
|
3663
|
+
int32_t thisLength,
|
3664
|
+
const UnicodeString& srcText,
|
3665
|
+
int32_t srcStart,
|
3666
|
+
int32_t srcLength) const
|
3667
|
+
{
|
3668
|
+
if(srcText.isBogus()) {
|
3669
|
+
return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
|
3670
|
+
} else {
|
3671
|
+
srcText.pinIndices(srcStart, srcLength);
|
3672
|
+
return doCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength);
|
3673
|
+
}
|
3674
|
+
}
|
3675
|
+
|
3676
|
+
inline UBool
|
3677
|
+
UnicodeString::operator== (const UnicodeString& text) const
|
3678
|
+
{
|
3679
|
+
if(isBogus()) {
|
3680
|
+
return text.isBogus();
|
3681
|
+
} else {
|
3682
|
+
int32_t len = length(), textLength = text.length();
|
3683
|
+
return !text.isBogus() && len == textLength && doEquals(text, len);
|
3684
|
+
}
|
3685
|
+
}
|
3686
|
+
|
3687
|
+
inline UBool
|
3688
|
+
UnicodeString::operator!= (const UnicodeString& text) const
|
3689
|
+
{ return (! operator==(text)); }
|
3690
|
+
|
3691
|
+
inline UBool
|
3692
|
+
UnicodeString::operator> (const UnicodeString& text) const
|
3693
|
+
{ return doCompare(0, length(), text, 0, text.length()) == 1; }
|
3694
|
+
|
3695
|
+
inline UBool
|
3696
|
+
UnicodeString::operator< (const UnicodeString& text) const
|
3697
|
+
{ return doCompare(0, length(), text, 0, text.length()) == -1; }
|
3698
|
+
|
3699
|
+
inline UBool
|
3700
|
+
UnicodeString::operator>= (const UnicodeString& text) const
|
3701
|
+
{ return doCompare(0, length(), text, 0, text.length()) != -1; }
|
3702
|
+
|
3703
|
+
inline UBool
|
3704
|
+
UnicodeString::operator<= (const UnicodeString& text) const
|
3705
|
+
{ return doCompare(0, length(), text, 0, text.length()) != 1; }
|
3706
|
+
|
3707
|
+
inline int8_t
|
3708
|
+
UnicodeString::compare(const UnicodeString& text) const
|
3709
|
+
{ return doCompare(0, length(), text, 0, text.length()); }
|
3710
|
+
|
3711
|
+
inline int8_t
|
3712
|
+
UnicodeString::compare(int32_t start,
|
3713
|
+
int32_t _length,
|
3714
|
+
const UnicodeString& srcText) const
|
3715
|
+
{ return doCompare(start, _length, srcText, 0, srcText.length()); }
|
3716
|
+
|
3717
|
+
inline int8_t
|
3718
|
+
UnicodeString::compare(const UChar *srcChars,
|
3719
|
+
int32_t srcLength) const
|
3720
|
+
{ return doCompare(0, length(), srcChars, 0, srcLength); }
|
3721
|
+
|
3722
|
+
inline int8_t
|
3723
|
+
UnicodeString::compare(int32_t start,
|
3724
|
+
int32_t _length,
|
3725
|
+
const UnicodeString& srcText,
|
3726
|
+
int32_t srcStart,
|
3727
|
+
int32_t srcLength) const
|
3728
|
+
{ return doCompare(start, _length, srcText, srcStart, srcLength); }
|
3729
|
+
|
3730
|
+
inline int8_t
|
3731
|
+
UnicodeString::compare(int32_t start,
|
3732
|
+
int32_t _length,
|
3733
|
+
const UChar *srcChars) const
|
3734
|
+
{ return doCompare(start, _length, srcChars, 0, _length); }
|
3735
|
+
|
3736
|
+
inline int8_t
|
3737
|
+
UnicodeString::compare(int32_t start,
|
3738
|
+
int32_t _length,
|
3739
|
+
const UChar *srcChars,
|
3740
|
+
int32_t srcStart,
|
3741
|
+
int32_t srcLength) const
|
3742
|
+
{ return doCompare(start, _length, srcChars, srcStart, srcLength); }
|
3743
|
+
|
3744
|
+
inline int8_t
|
3745
|
+
UnicodeString::compareBetween(int32_t start,
|
3746
|
+
int32_t limit,
|
3747
|
+
const UnicodeString& srcText,
|
3748
|
+
int32_t srcStart,
|
3749
|
+
int32_t srcLimit) const
|
3750
|
+
{ return doCompare(start, limit - start,
|
3751
|
+
srcText, srcStart, srcLimit - srcStart); }
|
3752
|
+
|
3753
|
+
inline int8_t
|
3754
|
+
UnicodeString::doCompareCodePointOrder(int32_t start,
|
3755
|
+
int32_t thisLength,
|
3756
|
+
const UnicodeString& srcText,
|
3757
|
+
int32_t srcStart,
|
3758
|
+
int32_t srcLength) const
|
3759
|
+
{
|
3760
|
+
if(srcText.isBogus()) {
|
3761
|
+
return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
|
3762
|
+
} else {
|
3763
|
+
srcText.pinIndices(srcStart, srcLength);
|
3764
|
+
return doCompareCodePointOrder(start, thisLength, srcText.getArrayStart(), srcStart, srcLength);
|
3765
|
+
}
|
3766
|
+
}
|
3767
|
+
|
3768
|
+
inline int8_t
|
3769
|
+
UnicodeString::compareCodePointOrder(const UnicodeString& text) const
|
3770
|
+
{ return doCompareCodePointOrder(0, length(), text, 0, text.length()); }
|
3771
|
+
|
3772
|
+
inline int8_t
|
3773
|
+
UnicodeString::compareCodePointOrder(int32_t start,
|
3774
|
+
int32_t _length,
|
3775
|
+
const UnicodeString& srcText) const
|
3776
|
+
{ return doCompareCodePointOrder(start, _length, srcText, 0, srcText.length()); }
|
3777
|
+
|
3778
|
+
inline int8_t
|
3779
|
+
UnicodeString::compareCodePointOrder(const UChar *srcChars,
|
3780
|
+
int32_t srcLength) const
|
3781
|
+
{ return doCompareCodePointOrder(0, length(), srcChars, 0, srcLength); }
|
3782
|
+
|
3783
|
+
inline int8_t
|
3784
|
+
UnicodeString::compareCodePointOrder(int32_t start,
|
3785
|
+
int32_t _length,
|
3786
|
+
const UnicodeString& srcText,
|
3787
|
+
int32_t srcStart,
|
3788
|
+
int32_t srcLength) const
|
3789
|
+
{ return doCompareCodePointOrder(start, _length, srcText, srcStart, srcLength); }
|
3790
|
+
|
3791
|
+
inline int8_t
|
3792
|
+
UnicodeString::compareCodePointOrder(int32_t start,
|
3793
|
+
int32_t _length,
|
3794
|
+
const UChar *srcChars) const
|
3795
|
+
{ return doCompareCodePointOrder(start, _length, srcChars, 0, _length); }
|
3796
|
+
|
3797
|
+
inline int8_t
|
3798
|
+
UnicodeString::compareCodePointOrder(int32_t start,
|
3799
|
+
int32_t _length,
|
3800
|
+
const UChar *srcChars,
|
3801
|
+
int32_t srcStart,
|
3802
|
+
int32_t srcLength) const
|
3803
|
+
{ return doCompareCodePointOrder(start, _length, srcChars, srcStart, srcLength); }
|
3804
|
+
|
3805
|
+
inline int8_t
|
3806
|
+
UnicodeString::compareCodePointOrderBetween(int32_t start,
|
3807
|
+
int32_t limit,
|
3808
|
+
const UnicodeString& srcText,
|
3809
|
+
int32_t srcStart,
|
3810
|
+
int32_t srcLimit) const
|
3811
|
+
{ return doCompareCodePointOrder(start, limit - start,
|
3812
|
+
srcText, srcStart, srcLimit - srcStart); }
|
3813
|
+
|
3814
|
+
inline int8_t
|
3815
|
+
UnicodeString::doCaseCompare(int32_t start,
|
3816
|
+
int32_t thisLength,
|
3817
|
+
const UnicodeString &srcText,
|
3818
|
+
int32_t srcStart,
|
3819
|
+
int32_t srcLength,
|
3820
|
+
uint32_t options) const
|
3821
|
+
{
|
3822
|
+
if(srcText.isBogus()) {
|
3823
|
+
return (int8_t)!isBogus(); // 0 if both are bogus, 1 otherwise
|
3824
|
+
} else {
|
3825
|
+
srcText.pinIndices(srcStart, srcLength);
|
3826
|
+
return doCaseCompare(start, thisLength, srcText.getArrayStart(), srcStart, srcLength, options);
|
3827
|
+
}
|
3828
|
+
}
|
3829
|
+
|
3830
|
+
inline int8_t
|
3831
|
+
UnicodeString::caseCompare(const UnicodeString &text, uint32_t options) const {
|
3832
|
+
return doCaseCompare(0, length(), text, 0, text.length(), options);
|
3833
|
+
}
|
3834
|
+
|
3835
|
+
inline int8_t
|
3836
|
+
UnicodeString::caseCompare(int32_t start,
|
3837
|
+
int32_t _length,
|
3838
|
+
const UnicodeString &srcText,
|
3839
|
+
uint32_t options) const {
|
3840
|
+
return doCaseCompare(start, _length, srcText, 0, srcText.length(), options);
|
3841
|
+
}
|
3842
|
+
|
3843
|
+
inline int8_t
|
3844
|
+
UnicodeString::caseCompare(const UChar *srcChars,
|
3845
|
+
int32_t srcLength,
|
3846
|
+
uint32_t options) const {
|
3847
|
+
return doCaseCompare(0, length(), srcChars, 0, srcLength, options);
|
3848
|
+
}
|
3849
|
+
|
3850
|
+
inline int8_t
|
3851
|
+
UnicodeString::caseCompare(int32_t start,
|
3852
|
+
int32_t _length,
|
3853
|
+
const UnicodeString &srcText,
|
3854
|
+
int32_t srcStart,
|
3855
|
+
int32_t srcLength,
|
3856
|
+
uint32_t options) const {
|
3857
|
+
return doCaseCompare(start, _length, srcText, srcStart, srcLength, options);
|
3858
|
+
}
|
3859
|
+
|
3860
|
+
inline int8_t
|
3861
|
+
UnicodeString::caseCompare(int32_t start,
|
3862
|
+
int32_t _length,
|
3863
|
+
const UChar *srcChars,
|
3864
|
+
uint32_t options) const {
|
3865
|
+
return doCaseCompare(start, _length, srcChars, 0, _length, options);
|
3866
|
+
}
|
3867
|
+
|
3868
|
+
inline int8_t
|
3869
|
+
UnicodeString::caseCompare(int32_t start,
|
3870
|
+
int32_t _length,
|
3871
|
+
const UChar *srcChars,
|
3872
|
+
int32_t srcStart,
|
3873
|
+
int32_t srcLength,
|
3874
|
+
uint32_t options) const {
|
3875
|
+
return doCaseCompare(start, _length, srcChars, srcStart, srcLength, options);
|
3876
|
+
}
|
3877
|
+
|
3878
|
+
inline int8_t
|
3879
|
+
UnicodeString::caseCompareBetween(int32_t start,
|
3880
|
+
int32_t limit,
|
3881
|
+
const UnicodeString &srcText,
|
3882
|
+
int32_t srcStart,
|
3883
|
+
int32_t srcLimit,
|
3884
|
+
uint32_t options) const {
|
3885
|
+
return doCaseCompare(start, limit - start, srcText, srcStart, srcLimit - srcStart, options);
|
3886
|
+
}
|
3887
|
+
|
3888
|
+
inline int32_t
|
3889
|
+
UnicodeString::indexOf(const UnicodeString& srcText,
|
3890
|
+
int32_t srcStart,
|
3891
|
+
int32_t srcLength,
|
3892
|
+
int32_t start,
|
3893
|
+
int32_t _length) const
|
3894
|
+
{
|
3895
|
+
if(!srcText.isBogus()) {
|
3896
|
+
srcText.pinIndices(srcStart, srcLength);
|
3897
|
+
if(srcLength > 0) {
|
3898
|
+
return indexOf(srcText.getArrayStart(), srcStart, srcLength, start, _length);
|
3899
|
+
}
|
3900
|
+
}
|
3901
|
+
return -1;
|
3902
|
+
}
|
3903
|
+
|
3904
|
+
inline int32_t
|
3905
|
+
UnicodeString::indexOf(const UnicodeString& text) const
|
3906
|
+
{ return indexOf(text, 0, text.length(), 0, length()); }
|
3907
|
+
|
3908
|
+
inline int32_t
|
3909
|
+
UnicodeString::indexOf(const UnicodeString& text,
|
3910
|
+
int32_t start) const {
|
3911
|
+
pinIndex(start);
|
3912
|
+
return indexOf(text, 0, text.length(), start, length() - start);
|
3913
|
+
}
|
3914
|
+
|
3915
|
+
inline int32_t
|
3916
|
+
UnicodeString::indexOf(const UnicodeString& text,
|
3917
|
+
int32_t start,
|
3918
|
+
int32_t _length) const
|
3919
|
+
{ return indexOf(text, 0, text.length(), start, _length); }
|
3920
|
+
|
3921
|
+
inline int32_t
|
3922
|
+
UnicodeString::indexOf(const UChar *srcChars,
|
3923
|
+
int32_t srcLength,
|
3924
|
+
int32_t start) const {
|
3925
|
+
pinIndex(start);
|
3926
|
+
return indexOf(srcChars, 0, srcLength, start, length() - start);
|
3927
|
+
}
|
3928
|
+
|
3929
|
+
inline int32_t
|
3930
|
+
UnicodeString::indexOf(const UChar *srcChars,
|
3931
|
+
int32_t srcLength,
|
3932
|
+
int32_t start,
|
3933
|
+
int32_t _length) const
|
3934
|
+
{ return indexOf(srcChars, 0, srcLength, start, _length); }
|
3935
|
+
|
3936
|
+
inline int32_t
|
3937
|
+
UnicodeString::indexOf(UChar c,
|
3938
|
+
int32_t start,
|
3939
|
+
int32_t _length) const
|
3940
|
+
{ return doIndexOf(c, start, _length); }
|
3941
|
+
|
3942
|
+
inline int32_t
|
3943
|
+
UnicodeString::indexOf(UChar32 c,
|
3944
|
+
int32_t start,
|
3945
|
+
int32_t _length) const
|
3946
|
+
{ return doIndexOf(c, start, _length); }
|
3947
|
+
|
3948
|
+
inline int32_t
|
3949
|
+
UnicodeString::indexOf(UChar c) const
|
3950
|
+
{ return doIndexOf(c, 0, length()); }
|
3951
|
+
|
3952
|
+
inline int32_t
|
3953
|
+
UnicodeString::indexOf(UChar32 c) const
|
3954
|
+
{ return indexOf(c, 0, length()); }
|
3955
|
+
|
3956
|
+
inline int32_t
|
3957
|
+
UnicodeString::indexOf(UChar c,
|
3958
|
+
int32_t start) const {
|
3959
|
+
pinIndex(start);
|
3960
|
+
return doIndexOf(c, start, length() - start);
|
3961
|
+
}
|
3962
|
+
|
3963
|
+
inline int32_t
|
3964
|
+
UnicodeString::indexOf(UChar32 c,
|
3965
|
+
int32_t start) const {
|
3966
|
+
pinIndex(start);
|
3967
|
+
return indexOf(c, start, length() - start);
|
3968
|
+
}
|
3969
|
+
|
3970
|
+
inline int32_t
|
3971
|
+
UnicodeString::lastIndexOf(const UChar *srcChars,
|
3972
|
+
int32_t srcLength,
|
3973
|
+
int32_t start,
|
3974
|
+
int32_t _length) const
|
3975
|
+
{ return lastIndexOf(srcChars, 0, srcLength, start, _length); }
|
3976
|
+
|
3977
|
+
inline int32_t
|
3978
|
+
UnicodeString::lastIndexOf(const UChar *srcChars,
|
3979
|
+
int32_t srcLength,
|
3980
|
+
int32_t start) const {
|
3981
|
+
pinIndex(start);
|
3982
|
+
return lastIndexOf(srcChars, 0, srcLength, start, length() - start);
|
3983
|
+
}
|
3984
|
+
|
3985
|
+
inline int32_t
|
3986
|
+
UnicodeString::lastIndexOf(const UnicodeString& srcText,
|
3987
|
+
int32_t srcStart,
|
3988
|
+
int32_t srcLength,
|
3989
|
+
int32_t start,
|
3990
|
+
int32_t _length) const
|
3991
|
+
{
|
3992
|
+
if(!srcText.isBogus()) {
|
3993
|
+
srcText.pinIndices(srcStart, srcLength);
|
3994
|
+
if(srcLength > 0) {
|
3995
|
+
return lastIndexOf(srcText.getArrayStart(), srcStart, srcLength, start, _length);
|
3996
|
+
}
|
3997
|
+
}
|
3998
|
+
return -1;
|
3999
|
+
}
|
4000
|
+
|
4001
|
+
inline int32_t
|
4002
|
+
UnicodeString::lastIndexOf(const UnicodeString& text,
|
4003
|
+
int32_t start,
|
4004
|
+
int32_t _length) const
|
4005
|
+
{ return lastIndexOf(text, 0, text.length(), start, _length); }
|
4006
|
+
|
4007
|
+
inline int32_t
|
4008
|
+
UnicodeString::lastIndexOf(const UnicodeString& text,
|
4009
|
+
int32_t start) const {
|
4010
|
+
pinIndex(start);
|
4011
|
+
return lastIndexOf(text, 0, text.length(), start, length() - start);
|
4012
|
+
}
|
4013
|
+
|
4014
|
+
inline int32_t
|
4015
|
+
UnicodeString::lastIndexOf(const UnicodeString& text) const
|
4016
|
+
{ return lastIndexOf(text, 0, text.length(), 0, length()); }
|
4017
|
+
|
4018
|
+
inline int32_t
|
4019
|
+
UnicodeString::lastIndexOf(UChar c,
|
4020
|
+
int32_t start,
|
4021
|
+
int32_t _length) const
|
4022
|
+
{ return doLastIndexOf(c, start, _length); }
|
4023
|
+
|
4024
|
+
inline int32_t
|
4025
|
+
UnicodeString::lastIndexOf(UChar32 c,
|
4026
|
+
int32_t start,
|
4027
|
+
int32_t _length) const {
|
4028
|
+
return doLastIndexOf(c, start, _length);
|
4029
|
+
}
|
4030
|
+
|
4031
|
+
inline int32_t
|
4032
|
+
UnicodeString::lastIndexOf(UChar c) const
|
4033
|
+
{ return doLastIndexOf(c, 0, length()); }
|
4034
|
+
|
4035
|
+
inline int32_t
|
4036
|
+
UnicodeString::lastIndexOf(UChar32 c) const {
|
4037
|
+
return lastIndexOf(c, 0, length());
|
4038
|
+
}
|
4039
|
+
|
4040
|
+
inline int32_t
|
4041
|
+
UnicodeString::lastIndexOf(UChar c,
|
4042
|
+
int32_t start) const {
|
4043
|
+
pinIndex(start);
|
4044
|
+
return doLastIndexOf(c, start, length() - start);
|
4045
|
+
}
|
4046
|
+
|
4047
|
+
inline int32_t
|
4048
|
+
UnicodeString::lastIndexOf(UChar32 c,
|
4049
|
+
int32_t start) const {
|
4050
|
+
pinIndex(start);
|
4051
|
+
return lastIndexOf(c, start, length() - start);
|
4052
|
+
}
|
4053
|
+
|
4054
|
+
inline UBool
|
4055
|
+
UnicodeString::startsWith(const UnicodeString& text) const
|
4056
|
+
{ return compare(0, text.length(), text, 0, text.length()) == 0; }
|
4057
|
+
|
4058
|
+
inline UBool
|
4059
|
+
UnicodeString::startsWith(const UnicodeString& srcText,
|
4060
|
+
int32_t srcStart,
|
4061
|
+
int32_t srcLength) const
|
4062
|
+
{ return doCompare(0, srcLength, srcText, srcStart, srcLength) == 0; }
|
4063
|
+
|
4064
|
+
inline UBool
|
4065
|
+
UnicodeString::startsWith(const UChar *srcChars, int32_t srcLength) const {
|
4066
|
+
if(srcLength < 0) {
|
4067
|
+
srcLength = u_strlen(srcChars);
|
4068
|
+
}
|
4069
|
+
return doCompare(0, srcLength, srcChars, 0, srcLength) == 0;
|
4070
|
+
}
|
4071
|
+
|
4072
|
+
inline UBool
|
4073
|
+
UnicodeString::startsWith(const UChar *srcChars, int32_t srcStart, int32_t srcLength) const {
|
4074
|
+
if(srcLength < 0) {
|
4075
|
+
srcLength = u_strlen(srcChars);
|
4076
|
+
}
|
4077
|
+
return doCompare(0, srcLength, srcChars, srcStart, srcLength) == 0;
|
4078
|
+
}
|
4079
|
+
|
4080
|
+
inline UBool
|
4081
|
+
UnicodeString::endsWith(const UnicodeString& text) const
|
4082
|
+
{ return doCompare(length() - text.length(), text.length(),
|
4083
|
+
text, 0, text.length()) == 0; }
|
4084
|
+
|
4085
|
+
inline UBool
|
4086
|
+
UnicodeString::endsWith(const UnicodeString& srcText,
|
4087
|
+
int32_t srcStart,
|
4088
|
+
int32_t srcLength) const {
|
4089
|
+
srcText.pinIndices(srcStart, srcLength);
|
4090
|
+
return doCompare(length() - srcLength, srcLength,
|
4091
|
+
srcText, srcStart, srcLength) == 0;
|
4092
|
+
}
|
4093
|
+
|
4094
|
+
inline UBool
|
4095
|
+
UnicodeString::endsWith(const UChar *srcChars,
|
4096
|
+
int32_t srcLength) const {
|
4097
|
+
if(srcLength < 0) {
|
4098
|
+
srcLength = u_strlen(srcChars);
|
4099
|
+
}
|
4100
|
+
return doCompare(length() - srcLength, srcLength,
|
4101
|
+
srcChars, 0, srcLength) == 0;
|
4102
|
+
}
|
4103
|
+
|
4104
|
+
inline UBool
|
4105
|
+
UnicodeString::endsWith(const UChar *srcChars,
|
4106
|
+
int32_t srcStart,
|
4107
|
+
int32_t srcLength) const {
|
4108
|
+
if(srcLength < 0) {
|
4109
|
+
srcLength = u_strlen(srcChars + srcStart);
|
4110
|
+
}
|
4111
|
+
return doCompare(length() - srcLength, srcLength,
|
4112
|
+
srcChars, srcStart, srcLength) == 0;
|
4113
|
+
}
|
4114
|
+
|
4115
|
+
//========================================
|
4116
|
+
// replace
|
4117
|
+
//========================================
|
4118
|
+
inline UnicodeString&
|
4119
|
+
UnicodeString::replace(int32_t start,
|
4120
|
+
int32_t _length,
|
4121
|
+
const UnicodeString& srcText)
|
4122
|
+
{ return doReplace(start, _length, srcText, 0, srcText.length()); }
|
4123
|
+
|
4124
|
+
inline UnicodeString&
|
4125
|
+
UnicodeString::replace(int32_t start,
|
4126
|
+
int32_t _length,
|
4127
|
+
const UnicodeString& srcText,
|
4128
|
+
int32_t srcStart,
|
4129
|
+
int32_t srcLength)
|
4130
|
+
{ return doReplace(start, _length, srcText, srcStart, srcLength); }
|
4131
|
+
|
4132
|
+
inline UnicodeString&
|
4133
|
+
UnicodeString::replace(int32_t start,
|
4134
|
+
int32_t _length,
|
4135
|
+
const UChar *srcChars,
|
4136
|
+
int32_t srcLength)
|
4137
|
+
{ return doReplace(start, _length, srcChars, 0, srcLength); }
|
4138
|
+
|
4139
|
+
inline UnicodeString&
|
4140
|
+
UnicodeString::replace(int32_t start,
|
4141
|
+
int32_t _length,
|
4142
|
+
const UChar *srcChars,
|
4143
|
+
int32_t srcStart,
|
4144
|
+
int32_t srcLength)
|
4145
|
+
{ return doReplace(start, _length, srcChars, srcStart, srcLength); }
|
4146
|
+
|
4147
|
+
inline UnicodeString&
|
4148
|
+
UnicodeString::replace(int32_t start,
|
4149
|
+
int32_t _length,
|
4150
|
+
UChar srcChar)
|
4151
|
+
{ return doReplace(start, _length, &srcChar, 0, 1); }
|
4152
|
+
|
4153
|
+
inline UnicodeString&
|
4154
|
+
UnicodeString::replaceBetween(int32_t start,
|
4155
|
+
int32_t limit,
|
4156
|
+
const UnicodeString& srcText)
|
4157
|
+
{ return doReplace(start, limit - start, srcText, 0, srcText.length()); }
|
4158
|
+
|
4159
|
+
inline UnicodeString&
|
4160
|
+
UnicodeString::replaceBetween(int32_t start,
|
4161
|
+
int32_t limit,
|
4162
|
+
const UnicodeString& srcText,
|
4163
|
+
int32_t srcStart,
|
4164
|
+
int32_t srcLimit)
|
4165
|
+
{ return doReplace(start, limit - start, srcText, srcStart, srcLimit - srcStart); }
|
4166
|
+
|
4167
|
+
inline UnicodeString&
|
4168
|
+
UnicodeString::findAndReplace(const UnicodeString& oldText,
|
4169
|
+
const UnicodeString& newText)
|
4170
|
+
{ return findAndReplace(0, length(), oldText, 0, oldText.length(),
|
4171
|
+
newText, 0, newText.length()); }
|
4172
|
+
|
4173
|
+
inline UnicodeString&
|
4174
|
+
UnicodeString::findAndReplace(int32_t start,
|
4175
|
+
int32_t _length,
|
4176
|
+
const UnicodeString& oldText,
|
4177
|
+
const UnicodeString& newText)
|
4178
|
+
{ return findAndReplace(start, _length, oldText, 0, oldText.length(),
|
4179
|
+
newText, 0, newText.length()); }
|
4180
|
+
|
4181
|
+
// ============================
|
4182
|
+
// extract
|
4183
|
+
// ============================
|
4184
|
+
inline void
|
4185
|
+
UnicodeString::doExtract(int32_t start,
|
4186
|
+
int32_t _length,
|
4187
|
+
UnicodeString& target) const
|
4188
|
+
{ target.replace(0, target.length(), *this, start, _length); }
|
4189
|
+
|
4190
|
+
inline void
|
4191
|
+
UnicodeString::extract(int32_t start,
|
4192
|
+
int32_t _length,
|
4193
|
+
UChar *target,
|
4194
|
+
int32_t targetStart) const
|
4195
|
+
{ doExtract(start, _length, target, targetStart); }
|
4196
|
+
|
4197
|
+
inline void
|
4198
|
+
UnicodeString::extract(int32_t start,
|
4199
|
+
int32_t _length,
|
4200
|
+
UnicodeString& target) const
|
4201
|
+
{ doExtract(start, _length, target); }
|
4202
|
+
|
4203
|
+
#if !UCONFIG_NO_CONVERSION
|
4204
|
+
|
4205
|
+
inline int32_t
|
4206
|
+
UnicodeString::extract(int32_t start,
|
4207
|
+
int32_t _length,
|
4208
|
+
char *dst,
|
4209
|
+
const char *codepage) const
|
4210
|
+
|
4211
|
+
{
|
4212
|
+
// This dstSize value will be checked explicitly
|
4213
|
+
return extract(start, _length, dst, dst!=0 ? 0xffffffff : 0, codepage);
|
4214
|
+
}
|
4215
|
+
|
4216
|
+
#endif
|
4217
|
+
|
4218
|
+
inline void
|
4219
|
+
UnicodeString::extractBetween(int32_t start,
|
4220
|
+
int32_t limit,
|
4221
|
+
UChar *dst,
|
4222
|
+
int32_t dstStart) const {
|
4223
|
+
pinIndex(start);
|
4224
|
+
pinIndex(limit);
|
4225
|
+
doExtract(start, limit - start, dst, dstStart);
|
4226
|
+
}
|
4227
|
+
|
4228
|
+
inline UnicodeString
|
4229
|
+
UnicodeString::tempSubStringBetween(int32_t start, int32_t limit) const {
|
4230
|
+
return tempSubString(start, limit - start);
|
4231
|
+
}
|
4232
|
+
|
4233
|
+
inline UChar
|
4234
|
+
UnicodeString::doCharAt(int32_t offset) const
|
4235
|
+
{
|
4236
|
+
if((uint32_t)offset < (uint32_t)length()) {
|
4237
|
+
return getArrayStart()[offset];
|
4238
|
+
} else {
|
4239
|
+
return kInvalidUChar;
|
4240
|
+
}
|
4241
|
+
}
|
4242
|
+
|
4243
|
+
inline UChar
|
4244
|
+
UnicodeString::charAt(int32_t offset) const
|
4245
|
+
{ return doCharAt(offset); }
|
4246
|
+
|
4247
|
+
inline UChar
|
4248
|
+
UnicodeString::operator[] (int32_t offset) const
|
4249
|
+
{ return doCharAt(offset); }
|
4250
|
+
|
4251
|
+
inline UBool
|
4252
|
+
UnicodeString::isEmpty() const {
|
4253
|
+
return fShortLength == 0;
|
4254
|
+
}
|
4255
|
+
|
4256
|
+
//========================================
|
4257
|
+
// Write implementation methods
|
4258
|
+
//========================================
|
4259
|
+
inline void
|
4260
|
+
UnicodeString::setLength(int32_t len) {
|
4261
|
+
if(len <= 127) {
|
4262
|
+
fShortLength = (int8_t)len;
|
4263
|
+
} else {
|
4264
|
+
fShortLength = (int8_t)-1;
|
4265
|
+
fUnion.fFields.fLength = len;
|
4266
|
+
}
|
4267
|
+
}
|
4268
|
+
|
4269
|
+
inline void
|
4270
|
+
UnicodeString::setToEmpty() {
|
4271
|
+
fShortLength = 0;
|
4272
|
+
fFlags = kShortString;
|
4273
|
+
}
|
4274
|
+
|
4275
|
+
inline void
|
4276
|
+
UnicodeString::setArray(UChar *array, int32_t len, int32_t capacity) {
|
4277
|
+
setLength(len);
|
4278
|
+
fUnion.fFields.fArray = array;
|
4279
|
+
fUnion.fFields.fCapacity = capacity;
|
4280
|
+
}
|
4281
|
+
|
4282
|
+
inline UnicodeString&
|
4283
|
+
UnicodeString::operator= (UChar ch)
|
4284
|
+
{ return doReplace(0, length(), &ch, 0, 1); }
|
4285
|
+
|
4286
|
+
inline UnicodeString&
|
4287
|
+
UnicodeString::operator= (UChar32 ch)
|
4288
|
+
{ return replace(0, length(), ch); }
|
4289
|
+
|
4290
|
+
inline UnicodeString&
|
4291
|
+
UnicodeString::setTo(const UnicodeString& srcText,
|
4292
|
+
int32_t srcStart,
|
4293
|
+
int32_t srcLength)
|
4294
|
+
{
|
4295
|
+
unBogus();
|
4296
|
+
return doReplace(0, length(), srcText, srcStart, srcLength);
|
4297
|
+
}
|
4298
|
+
|
4299
|
+
inline UnicodeString&
|
4300
|
+
UnicodeString::setTo(const UnicodeString& srcText,
|
4301
|
+
int32_t srcStart)
|
4302
|
+
{
|
4303
|
+
unBogus();
|
4304
|
+
srcText.pinIndex(srcStart);
|
4305
|
+
return doReplace(0, length(), srcText, srcStart, srcText.length() - srcStart);
|
4306
|
+
}
|
4307
|
+
|
4308
|
+
inline UnicodeString&
|
4309
|
+
UnicodeString::setTo(const UnicodeString& srcText)
|
4310
|
+
{
|
4311
|
+
return copyFrom(srcText);
|
4312
|
+
}
|
4313
|
+
|
4314
|
+
inline UnicodeString&
|
4315
|
+
UnicodeString::setTo(const UChar *srcChars,
|
4316
|
+
int32_t srcLength)
|
4317
|
+
{
|
4318
|
+
unBogus();
|
4319
|
+
return doReplace(0, length(), srcChars, 0, srcLength);
|
4320
|
+
}
|
4321
|
+
|
4322
|
+
inline UnicodeString&
|
4323
|
+
UnicodeString::setTo(UChar srcChar)
|
4324
|
+
{
|
4325
|
+
unBogus();
|
4326
|
+
return doReplace(0, length(), &srcChar, 0, 1);
|
4327
|
+
}
|
4328
|
+
|
4329
|
+
inline UnicodeString&
|
4330
|
+
UnicodeString::setTo(UChar32 srcChar)
|
4331
|
+
{
|
4332
|
+
unBogus();
|
4333
|
+
return replace(0, length(), srcChar);
|
4334
|
+
}
|
4335
|
+
|
4336
|
+
inline UnicodeString&
|
4337
|
+
UnicodeString::append(const UnicodeString& srcText,
|
4338
|
+
int32_t srcStart,
|
4339
|
+
int32_t srcLength)
|
4340
|
+
{ return doReplace(length(), 0, srcText, srcStart, srcLength); }
|
4341
|
+
|
4342
|
+
inline UnicodeString&
|
4343
|
+
UnicodeString::append(const UnicodeString& srcText)
|
4344
|
+
{ return doReplace(length(), 0, srcText, 0, srcText.length()); }
|
4345
|
+
|
4346
|
+
inline UnicodeString&
|
4347
|
+
UnicodeString::append(const UChar *srcChars,
|
4348
|
+
int32_t srcStart,
|
4349
|
+
int32_t srcLength)
|
4350
|
+
{ return doReplace(length(), 0, srcChars, srcStart, srcLength); }
|
4351
|
+
|
4352
|
+
inline UnicodeString&
|
4353
|
+
UnicodeString::append(const UChar *srcChars,
|
4354
|
+
int32_t srcLength)
|
4355
|
+
{ return doReplace(length(), 0, srcChars, 0, srcLength); }
|
4356
|
+
|
4357
|
+
inline UnicodeString&
|
4358
|
+
UnicodeString::append(UChar srcChar)
|
4359
|
+
{ return doReplace(length(), 0, &srcChar, 0, 1); }
|
4360
|
+
|
4361
|
+
inline UnicodeString&
|
4362
|
+
UnicodeString::operator+= (UChar ch)
|
4363
|
+
{ return doReplace(length(), 0, &ch, 0, 1); }
|
4364
|
+
|
4365
|
+
inline UnicodeString&
|
4366
|
+
UnicodeString::operator+= (UChar32 ch) {
|
4367
|
+
return append(ch);
|
4368
|
+
}
|
4369
|
+
|
4370
|
+
inline UnicodeString&
|
4371
|
+
UnicodeString::operator+= (const UnicodeString& srcText)
|
4372
|
+
{ return doReplace(length(), 0, srcText, 0, srcText.length()); }
|
4373
|
+
|
4374
|
+
inline UnicodeString&
|
4375
|
+
UnicodeString::insert(int32_t start,
|
4376
|
+
const UnicodeString& srcText,
|
4377
|
+
int32_t srcStart,
|
4378
|
+
int32_t srcLength)
|
4379
|
+
{ return doReplace(start, 0, srcText, srcStart, srcLength); }
|
4380
|
+
|
4381
|
+
inline UnicodeString&
|
4382
|
+
UnicodeString::insert(int32_t start,
|
4383
|
+
const UnicodeString& srcText)
|
4384
|
+
{ return doReplace(start, 0, srcText, 0, srcText.length()); }
|
4385
|
+
|
4386
|
+
inline UnicodeString&
|
4387
|
+
UnicodeString::insert(int32_t start,
|
4388
|
+
const UChar *srcChars,
|
4389
|
+
int32_t srcStart,
|
4390
|
+
int32_t srcLength)
|
4391
|
+
{ return doReplace(start, 0, srcChars, srcStart, srcLength); }
|
4392
|
+
|
4393
|
+
inline UnicodeString&
|
4394
|
+
UnicodeString::insert(int32_t start,
|
4395
|
+
const UChar *srcChars,
|
4396
|
+
int32_t srcLength)
|
4397
|
+
{ return doReplace(start, 0, srcChars, 0, srcLength); }
|
4398
|
+
|
4399
|
+
inline UnicodeString&
|
4400
|
+
UnicodeString::insert(int32_t start,
|
4401
|
+
UChar srcChar)
|
4402
|
+
{ return doReplace(start, 0, &srcChar, 0, 1); }
|
4403
|
+
|
4404
|
+
inline UnicodeString&
|
4405
|
+
UnicodeString::insert(int32_t start,
|
4406
|
+
UChar32 srcChar)
|
4407
|
+
{ return replace(start, 0, srcChar); }
|
4408
|
+
|
4409
|
+
|
4410
|
+
inline UnicodeString&
|
4411
|
+
UnicodeString::remove()
|
4412
|
+
{
|
4413
|
+
// remove() of a bogus string makes the string empty and non-bogus
|
4414
|
+
if(isBogus()) {
|
4415
|
+
setToEmpty();
|
4416
|
+
} else {
|
4417
|
+
fShortLength = 0;
|
4418
|
+
}
|
4419
|
+
return *this;
|
4420
|
+
}
|
4421
|
+
|
4422
|
+
inline UnicodeString&
|
4423
|
+
UnicodeString::remove(int32_t start,
|
4424
|
+
int32_t _length)
|
4425
|
+
{
|
4426
|
+
if(start <= 0 && _length == INT32_MAX) {
|
4427
|
+
// remove(guaranteed everything) of a bogus string makes the string empty and non-bogus
|
4428
|
+
return remove();
|
4429
|
+
}
|
4430
|
+
return doReplace(start, _length, NULL, 0, 0);
|
4431
|
+
}
|
4432
|
+
|
4433
|
+
inline UnicodeString&
|
4434
|
+
UnicodeString::removeBetween(int32_t start,
|
4435
|
+
int32_t limit)
|
4436
|
+
{ return doReplace(start, limit - start, NULL, 0, 0); }
|
4437
|
+
|
4438
|
+
inline UnicodeString &
|
4439
|
+
UnicodeString::retainBetween(int32_t start, int32_t limit) {
|
4440
|
+
truncate(limit);
|
4441
|
+
return doReplace(0, start, NULL, 0, 0);
|
4442
|
+
}
|
4443
|
+
|
4444
|
+
inline UBool
|
4445
|
+
UnicodeString::truncate(int32_t targetLength)
|
4446
|
+
{
|
4447
|
+
if(isBogus() && targetLength == 0) {
|
4448
|
+
// truncate(0) of a bogus string makes the string empty and non-bogus
|
4449
|
+
unBogus();
|
4450
|
+
return FALSE;
|
4451
|
+
} else if((uint32_t)targetLength < (uint32_t)length()) {
|
4452
|
+
setLength(targetLength);
|
4453
|
+
return TRUE;
|
4454
|
+
} else {
|
4455
|
+
return FALSE;
|
4456
|
+
}
|
4457
|
+
}
|
4458
|
+
|
4459
|
+
inline UnicodeString&
|
4460
|
+
UnicodeString::reverse()
|
4461
|
+
{ return doReverse(0, length()); }
|
4462
|
+
|
4463
|
+
inline UnicodeString&
|
4464
|
+
UnicodeString::reverse(int32_t start,
|
4465
|
+
int32_t _length)
|
4466
|
+
{ return doReverse(start, _length); }
|
4467
|
+
|
4468
|
+
U_NAMESPACE_END
|
4469
|
+
|
4470
|
+
#endif
|