123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- /**
- * This header provides wrapper classes around the frozen string API
- * which are roughly equivalent to the internal string classes.
- */
- #ifdef MOZILLA_INTERNAL_API
- #error nsStringAPI.h is only usable from non-MOZILLA_INTERNAL_API code!
- #endif
- #ifndef nsStringAPI_h__
- #define nsStringAPI_h__
- #include "mozilla/Attributes.h"
- #include "mozilla/Char16.h"
- #include "nsXPCOMStrings.h"
- #include "nsISupportsImpl.h"
- #include "mozilla/Logging.h"
- #include "nsTArray.h"
- /**
- * Comparison function for use with nsACString::Equals
- */
- NS_HIDDEN_(int32_t) CaseInsensitiveCompare(const char* aStrA, const char* aStrB,
- uint32_t aLength);
- class nsAString
- {
- public:
- typedef char16_t char_type;
- typedef nsAString self_type;
- typedef uint32_t size_type;
- typedef uint32_t index_type;
- /**
- * Returns the length, beginning, and end of a string in one operation.
- */
- NS_HIDDEN_(uint32_t) BeginReading(const char_type** aBegin,
- const char_type** aEnd = nullptr) const;
- NS_HIDDEN_(const char_type*) BeginReading() const;
- NS_HIDDEN_(const char_type*) EndReading() const;
- NS_HIDDEN_(char_type) CharAt(uint32_t aPos) const
- {
- NS_ASSERTION(aPos < Length(), "Out of bounds");
- return BeginReading()[aPos];
- }
- NS_HIDDEN_(char_type) operator [](uint32_t aPos) const
- {
- return CharAt(aPos);
- }
- NS_HIDDEN_(char_type) First() const
- {
- return CharAt(0);
- }
- NS_HIDDEN_(char_type) Last() const
- {
- const char_type* data;
- uint32_t dataLen = NS_StringGetData(*this, &data);
- return data[dataLen - 1];
- }
- /**
- * Get the length, begin writing, and optionally set the length of a
- * string all in one operation.
- *
- * @param newSize Size the string to this length. Pass UINT32_MAX
- * to leave the length unchanged.
- * @return The new length of the string, or 0 if resizing failed.
- */
- NS_HIDDEN_(uint32_t) BeginWriting(char_type** aBegin,
- char_type** aEnd = nullptr,
- uint32_t aNewSize = UINT32_MAX);
- NS_HIDDEN_(char_type*) BeginWriting(uint32_t = UINT32_MAX);
- NS_HIDDEN_(char_type*) EndWriting();
- NS_HIDDEN_(bool) SetLength(uint32_t aLen);
- NS_HIDDEN_(size_type) Length() const
- {
- const char_type* data;
- return NS_StringGetData(*this, &data);
- }
- NS_HIDDEN_(bool) IsEmpty() const { return Length() == 0; }
- NS_HIDDEN_(void) SetIsVoid(bool aVal) { NS_StringSetIsVoid(*this, aVal); }
- NS_HIDDEN_(bool) IsVoid() const { return NS_StringGetIsVoid(*this); }
- NS_HIDDEN_(void) Assign(const self_type& aString)
- {
- NS_StringCopy(*this, aString);
- }
- NS_HIDDEN_(void) Assign(const char_type* aData, size_type aLength = UINT32_MAX)
- {
- NS_StringSetData(*this, aData, aLength);
- }
- NS_HIDDEN_(void) Assign(char_type aChar)
- {
- NS_StringSetData(*this, &aChar, 1);
- }
- #ifdef MOZ_USE_CHAR16_WRAPPER
- NS_HIDDEN_(void) Assign(char16ptr_t aData, size_type aLength = UINT32_MAX)
- {
- NS_StringSetData(*this, aData, aLength);
- }
- #endif
- NS_HIDDEN_(void) AssignLiteral(const char* aStr);
- NS_HIDDEN_(void) AssignASCII(const char* aStr)
- {
- AssignLiteral(aStr);
- }
- NS_HIDDEN_(self_type&) operator=(const self_type& aString)
- {
- Assign(aString);
- return *this;
- }
- NS_HIDDEN_(self_type&) operator=(const char_type* aPtr)
- {
- Assign(aPtr);
- return *this;
- }
- NS_HIDDEN_(self_type&) operator=(char_type aChar)
- {
- Assign(aChar);
- return *this;
- }
- #ifdef MOZ_USE_CHAR16_WRAPPER
- NS_HIDDEN_(self_type&) operator=(char16ptr_t aPtr)
- {
- Assign(aPtr);
- return *this;
- }
- #endif
- NS_HIDDEN_(void) Replace(index_type aCutStart, size_type aCutLength,
- const char_type* aData,
- size_type aLength = size_type(-1))
- {
- NS_StringSetDataRange(*this, aCutStart, aCutLength, aData, aLength);
- }
- NS_HIDDEN_(void) Replace(index_type aCutStart, size_type aCutLength,
- char_type aChar)
- {
- Replace(aCutStart, aCutLength, &aChar, 1);
- }
- NS_HIDDEN_(void) Replace(index_type aCutStart, size_type aCutLength,
- const self_type& aReadable)
- {
- const char_type* data;
- uint32_t dataLen = NS_StringGetData(aReadable, &data);
- NS_StringSetDataRange(*this, aCutStart, aCutLength, data, dataLen);
- }
- NS_HIDDEN_(void) SetCharAt(char_type aChar, index_type aPos)
- {
- Replace(aPos, 1, &aChar, 1);
- }
- NS_HIDDEN_(void) Append(char_type aChar)
- {
- Replace(size_type(-1), 0, aChar);
- }
- NS_HIDDEN_(void) Append(const char_type* aData,
- size_type aLength = size_type(-1))
- {
- Replace(size_type(-1), 0, aData, aLength);
- }
- #ifdef MOZ_USE_CHAR16_WRAPPER
- NS_HIDDEN_(void) Append(char16ptr_t aData, size_type aLength = size_type(-1))
- {
- Append(static_cast<const char16_t*>(aData), aLength);
- }
- #endif
- NS_HIDDEN_(void) Append(const self_type& aReadable)
- {
- Replace(size_type(-1), 0, aReadable);
- }
- NS_HIDDEN_(void) AppendLiteral(const char* aASCIIStr);
- NS_HIDDEN_(void) AppendASCII(const char* aASCIIStr)
- {
- AppendLiteral(aASCIIStr);
- }
- NS_HIDDEN_(self_type&) operator+=(char_type aChar)
- {
- Append(aChar);
- return *this;
- }
- NS_HIDDEN_(self_type&) operator+=(const char_type* aData)
- {
- Append(aData);
- return *this;
- }
- NS_HIDDEN_(self_type&) operator+=(const self_type& aReadable)
- {
- Append(aReadable);
- return *this;
- }
- NS_HIDDEN_(void) Insert(char_type aChar, index_type aPos)
- {
- Replace(aPos, 0, aChar);
- }
- NS_HIDDEN_(void) Insert(const char_type* aData, index_type aPos,
- size_type aLength = size_type(-1))
- {
- Replace(aPos, 0, aData, aLength);
- }
- NS_HIDDEN_(void) Insert(const self_type& aReadable, index_type aPos)
- {
- Replace(aPos, 0, aReadable);
- }
- NS_HIDDEN_(void) Cut(index_type aCutStart, size_type aCutLength)
- {
- Replace(aCutStart, aCutLength, nullptr, 0);
- }
- NS_HIDDEN_(void) Truncate(size_type aNewLength = 0)
- {
- NS_ASSERTION(aNewLength <= Length(), "Truncate cannot make string longer");
- SetLength(aNewLength);
- }
- /**
- * Remove all occurences of characters in aSet from the string.
- */
- NS_HIDDEN_(void) StripChars(const char* aSet);
- /**
- * Strip whitespace characters from the string.
- */
- NS_HIDDEN_(void) StripWhitespace() { StripChars("\b\t\r\n "); }
- NS_HIDDEN_(void) Trim(const char* aSet, bool aLeading = true,
- bool aTrailing = true);
- /**
- * Compare strings of characters. Return 0 if the characters are equal,
- */
- typedef int32_t (*ComparatorFunc)(const char_type* aStrA,
- const char_type* aStrB,
- uint32_t aLength);
- static NS_HIDDEN_(int32_t) DefaultComparator(const char_type* aStrA,
- const char_type* aStrB,
- uint32_t aLength);
- NS_HIDDEN_(int32_t) Compare(const char_type* aOther,
- ComparatorFunc aComparator = DefaultComparator) const;
- NS_HIDDEN_(int32_t) Compare(const self_type& aOther,
- ComparatorFunc aComparator = DefaultComparator) const;
- NS_HIDDEN_(bool) Equals(const char_type* aOther,
- ComparatorFunc aComparator = DefaultComparator) const;
- NS_HIDDEN_(bool) Equals(const self_type& aOther,
- ComparatorFunc aComparator = DefaultComparator) const;
- NS_HIDDEN_(bool) operator<(const self_type& aOther) const
- {
- return Compare(aOther) < 0;
- }
- NS_HIDDEN_(bool) operator<(const char_type* aOther) const
- {
- return Compare(aOther) < 0;
- }
- NS_HIDDEN_(bool) operator<=(const self_type& aOther) const
- {
- return Compare(aOther) <= 0;
- }
- NS_HIDDEN_(bool) operator<=(const char_type* aOther) const
- {
- return Compare(aOther) <= 0;
- }
- NS_HIDDEN_(bool) operator==(const self_type& aOther) const
- {
- return Equals(aOther);
- }
- NS_HIDDEN_(bool) operator==(const char_type* aOther) const
- {
- return Equals(aOther);
- }
- #ifdef MOZ_USE_CHAR16_WRAPPER
- NS_HIDDEN_(bool) operator==(char16ptr_t aOther) const
- {
- return Equals(aOther);
- }
- #endif
- NS_HIDDEN_(bool) operator>=(const self_type& aOther) const
- {
- return Compare(aOther) >= 0;
- }
- NS_HIDDEN_(bool) operator>=(const char_type* aOther) const
- {
- return Compare(aOther) >= 0;
- }
- NS_HIDDEN_(bool) operator>(const self_type& aOther) const
- {
- return Compare(aOther) > 0;
- }
- NS_HIDDEN_(bool) operator>(const char_type* aOther) const
- {
- return Compare(aOther) > 0;
- }
- NS_HIDDEN_(bool) operator!=(const self_type& aOther) const
- {
- return !Equals(aOther);
- }
- NS_HIDDEN_(bool) operator!=(const char_type* aOther) const
- {
- return !Equals(aOther);
- }
- NS_HIDDEN_(bool) EqualsLiteral(const char* aASCIIString) const;
- NS_HIDDEN_(bool) EqualsASCII(const char* aASCIIString) const
- {
- return EqualsLiteral(aASCIIString);
- }
- /**
- * Case-insensitive match this string to a lowercase ASCII string.
- */
- NS_HIDDEN_(bool) LowerCaseEqualsLiteral(const char* aASCIIString) const;
- /**
- * Find the first occurrence of aStr in this string.
- *
- * @return the offset of aStr, or -1 if not found
- */
- NS_HIDDEN_(int32_t) Find(const self_type& aStr,
- ComparatorFunc aComparator = DefaultComparator) const
- {
- return Find(aStr, 0, aComparator);
- }
- /**
- * Find the first occurrence of aStr in this string, beginning at aOffset.
- *
- * @return the offset of aStr, or -1 if not found
- */
- NS_HIDDEN_(int32_t) Find(const self_type& aStr, uint32_t aOffset,
- ComparatorFunc aComparator = DefaultComparator) const;
- /**
- * Find an ASCII string within this string.
- *
- * @return the offset of aStr, or -1 if not found.
- */
- NS_HIDDEN_(int32_t) Find(const char* aStr, bool aIgnoreCase = false) const
- {
- return Find(aStr, 0, aIgnoreCase);
- }
- NS_HIDDEN_(int32_t) Find(const char* aStr, uint32_t aOffset,
- bool aIgnoreCase = false) const;
- /**
- * Find the last occurrence of aStr in this string.
- *
- * @return The offset of aStr from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) RFind(const self_type& aStr,
- ComparatorFunc aComparator = DefaultComparator) const
- {
- return RFind(aStr, -1, aComparator);
- }
- /**
- * Find the last occurrence of aStr in this string, beginning at aOffset.
- *
- * @param aOffset the offset from the beginning of the string to begin
- * searching. If aOffset < 0, search from end of this string.
- * @return The offset of aStr from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) RFind(const self_type& aStr, int32_t aOffset,
- ComparatorFunc aComparator = DefaultComparator) const;
- /**
- * Find the last occurrence of an ASCII string within this string.
- *
- * @return The offset of aStr from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) RFind(const char* aStr, bool aIgnoreCase = false) const
- {
- return RFind(aStr, -1, aIgnoreCase);
- }
- /**
- * Find the last occurrence of an ASCII string beginning at aOffset.
- *
- * @param aOffset the offset from the beginning of the string to begin
- * searching. If aOffset < 0, search from end of this string.
- * @return The offset of aStr from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) RFind(const char* aStr, int32_t aOffset,
- bool aIgnoreCase) const;
- /**
- * Search for the offset of the first occurrence of a character in a
- * string.
- *
- * @param aOffset the offset from the beginning of the string to begin
- * searching
- * @return The offset of the character from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) FindChar(char_type aChar, uint32_t aOffset = 0) const;
- /**
- * Search for the offset of the last occurrence of a character in a
- * string.
- *
- * @return The offset of the character from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) RFindChar(char_type aChar) const;
- /**
- * Append a string representation of a number.
- */
- NS_HIDDEN_(void) AppendInt(int aInt, int32_t aRadix = 10);
- #ifndef XPCOM_GLUE_AVOID_NSPR
- /**
- * Convert this string to an integer.
- *
- * @param aErrorCode pointer to contain result code.
- * @param aRadix must be 10 or 16
- */
- NS_HIDDEN_(int32_t) ToInteger(nsresult* aErrorCode,
- uint32_t aRadix = 10) const;
- /**
- * Convert this string to a 64-bit integer.
- *
- * @param aErrorCode pointer to contain result code.
- * @param aRadix must be 10 or 16
- */
- NS_HIDDEN_(int64_t) ToInteger64(nsresult* aErrorCode,
- uint32_t aRadix = 10) const;
- #endif // XPCOM_GLUE_AVOID_NSPR
- protected:
- // Prevent people from allocating a nsAString directly.
- ~nsAString() {}
- };
- class nsACString
- {
- public:
- typedef char char_type;
- typedef nsACString self_type;
- typedef uint32_t size_type;
- typedef uint32_t index_type;
- /**
- * Returns the length, beginning, and end of a string in one operation.
- */
- NS_HIDDEN_(uint32_t) BeginReading(const char_type** aBegin,
- const char_type** aEnd = nullptr) const;
- NS_HIDDEN_(const char_type*) BeginReading() const;
- NS_HIDDEN_(const char_type*) EndReading() const;
- NS_HIDDEN_(char_type) CharAt(uint32_t aPos) const
- {
- NS_ASSERTION(aPos < Length(), "Out of bounds");
- return BeginReading()[aPos];
- }
- NS_HIDDEN_(char_type) operator [](uint32_t aPos) const
- {
- return CharAt(aPos);
- }
- NS_HIDDEN_(char_type) First() const
- {
- return CharAt(0);
- }
- NS_HIDDEN_(char_type) Last() const
- {
- const char_type* data;
- uint32_t dataLen = NS_CStringGetData(*this, &data);
- return data[dataLen - 1];
- }
- /**
- * Get the length, begin writing, and optionally set the length of a
- * string all in one operation.
- *
- * @param newSize Size the string to this length. Pass UINT32_MAX
- * to leave the length unchanged.
- * @return The new length of the string, or 0 if resizing failed.
- */
- NS_HIDDEN_(uint32_t) BeginWriting(char_type** aBegin,
- char_type** aEnd = nullptr,
- uint32_t aNewSize = UINT32_MAX);
- NS_HIDDEN_(char_type*) BeginWriting(uint32_t aLen = UINT32_MAX);
- NS_HIDDEN_(char_type*) EndWriting();
- NS_HIDDEN_(bool) SetLength(uint32_t aLen);
- NS_HIDDEN_(size_type) Length() const
- {
- const char_type* data;
- return NS_CStringGetData(*this, &data);
- }
- NS_HIDDEN_(bool) IsEmpty() const { return Length() == 0; }
- NS_HIDDEN_(void) SetIsVoid(bool aVal) { NS_CStringSetIsVoid(*this, aVal); }
- NS_HIDDEN_(bool) IsVoid() const { return NS_CStringGetIsVoid(*this); }
- NS_HIDDEN_(void) Assign(const self_type& aString)
- {
- NS_CStringCopy(*this, aString);
- }
- NS_HIDDEN_(void) Assign(const char_type* aData, size_type aLength = UINT32_MAX)
- {
- NS_CStringSetData(*this, aData, aLength);
- }
- NS_HIDDEN_(void) Assign(char_type aChar)
- {
- NS_CStringSetData(*this, &aChar, 1);
- }
- NS_HIDDEN_(void) AssignLiteral(const char_type* aData)
- {
- Assign(aData);
- }
- NS_HIDDEN_(void) AssignASCII(const char_type* aData)
- {
- Assign(aData);
- }
- NS_HIDDEN_(self_type&) operator=(const self_type& aString)
- {
- Assign(aString);
- return *this;
- }
- NS_HIDDEN_(self_type&) operator=(const char_type* aPtr)
- {
- Assign(aPtr);
- return *this;
- }
- NS_HIDDEN_(self_type&) operator=(char_type aChar)
- {
- Assign(aChar);
- return *this;
- }
- NS_HIDDEN_(void) Replace(index_type aCutStart, size_type aCutLength,
- const char_type* aData,
- size_type aLength = size_type(-1))
- {
- NS_CStringSetDataRange(*this, aCutStart, aCutLength, aData, aLength);
- }
- NS_HIDDEN_(void) Replace(index_type aCutStart, size_type aCutLength,
- char_type aChar)
- {
- Replace(aCutStart, aCutLength, &aChar, 1);
- }
- NS_HIDDEN_(void) Replace(index_type aCutStart, size_type aCutLength,
- const self_type& aReadable)
- {
- const char_type* data;
- uint32_t dataLen = NS_CStringGetData(aReadable, &data);
- NS_CStringSetDataRange(*this, aCutStart, aCutLength, data, dataLen);
- }
- NS_HIDDEN_(void) SetCharAt(char_type aChar, index_type aPos)
- {
- Replace(aPos, 1, &aChar, 1);
- }
- NS_HIDDEN_(void) Append(char_type aChar)
- {
- Replace(size_type(-1), 0, aChar);
- }
- NS_HIDDEN_(void) Append(const char_type* aData,
- size_type aLength = size_type(-1))
- {
- Replace(size_type(-1), 0, aData, aLength);
- }
- NS_HIDDEN_(void) Append(const self_type& aReadable)
- {
- Replace(size_type(-1), 0, aReadable);
- }
- NS_HIDDEN_(void) AppendLiteral(const char* aASCIIStr)
- {
- Append(aASCIIStr);
- }
- NS_HIDDEN_(void) AppendASCII(const char* aASCIIStr)
- {
- Append(aASCIIStr);
- }
- NS_HIDDEN_(self_type&) operator+=(char_type aChar)
- {
- Append(aChar);
- return *this;
- }
- NS_HIDDEN_(self_type&) operator+=(const char_type* aData)
- {
- Append(aData);
- return *this;
- }
- NS_HIDDEN_(self_type&) operator+=(const self_type& aReadable)
- {
- Append(aReadable);
- return *this;
- }
- NS_HIDDEN_(void) Insert(char_type aChar, index_type aPos)
- {
- Replace(aPos, 0, aChar);
- }
- NS_HIDDEN_(void) Insert(const char_type* aData, index_type aPos,
- size_type aLength = size_type(-1))
- {
- Replace(aPos, 0, aData, aLength);
- }
- NS_HIDDEN_(void) Insert(const self_type& aReadable, index_type aPos)
- {
- Replace(aPos, 0, aReadable);
- }
- NS_HIDDEN_(void) Cut(index_type aCutStart, size_type aCutLength)
- {
- Replace(aCutStart, aCutLength, nullptr, 0);
- }
- NS_HIDDEN_(void) Truncate(size_type aNewLength = 0)
- {
- NS_ASSERTION(aNewLength <= Length(), "Truncate cannot make string longer");
- SetLength(aNewLength);
- }
- /**
- * Remove all occurences of characters in aSet from the string.
- */
- NS_HIDDEN_(void) StripChars(const char* aSet);
- /**
- * Strip whitespace characters from the string.
- */
- NS_HIDDEN_(void) StripWhitespace() { StripChars("\b\t\r\n "); }
- NS_HIDDEN_(void) Trim(const char* aSet, bool aLeading = true,
- bool aTrailing = true);
- /**
- * Compare strings of characters. Return 0 if the characters are equal,
- */
- typedef int32_t (*ComparatorFunc)(const char_type* a,
- const char_type* b,
- uint32_t length);
- static NS_HIDDEN_(int32_t) DefaultComparator(const char_type* aStrA,
- const char_type* aStrB,
- uint32_t aLength);
- NS_HIDDEN_(int32_t) Compare(const char_type* aOther,
- ComparatorFunc aComparator = DefaultComparator) const;
- NS_HIDDEN_(int32_t) Compare(const self_type& aOther,
- ComparatorFunc aComparator = DefaultComparator) const;
- NS_HIDDEN_(bool) Equals(const char_type* aOther,
- ComparatorFunc aComparator = DefaultComparator) const;
- NS_HIDDEN_(bool) Equals(const self_type& aOther,
- ComparatorFunc aComparator = DefaultComparator) const;
- NS_HIDDEN_(bool) operator<(const self_type& aOther) const
- {
- return Compare(aOther) < 0;
- }
- NS_HIDDEN_(bool) operator<(const char_type* aOther) const
- {
- return Compare(aOther) < 0;
- }
- NS_HIDDEN_(bool) operator<=(const self_type& aOther) const
- {
- return Compare(aOther) <= 0;
- }
- NS_HIDDEN_(bool) operator<=(const char_type* aOther) const
- {
- return Compare(aOther) <= 0;
- }
- NS_HIDDEN_(bool) operator==(const self_type& aOther) const
- {
- return Equals(aOther);
- }
- NS_HIDDEN_(bool) operator==(const char_type* aOther) const
- {
- return Equals(aOther);
- }
- NS_HIDDEN_(bool) operator>=(const self_type& aOther) const
- {
- return Compare(aOther) >= 0;
- }
- NS_HIDDEN_(bool) operator>=(const char_type* aOther) const
- {
- return Compare(aOther) >= 0;
- }
- NS_HIDDEN_(bool) operator>(const self_type& aOther) const
- {
- return Compare(aOther) > 0;
- }
- NS_HIDDEN_(bool) operator>(const char_type* aOther) const
- {
- return Compare(aOther) > 0;
- }
- NS_HIDDEN_(bool) operator!=(const self_type& aOther) const
- {
- return !Equals(aOther);
- }
- NS_HIDDEN_(bool) operator!=(const char_type* aOther) const
- {
- return !Equals(aOther);
- }
- NS_HIDDEN_(bool) EqualsLiteral(const char_type* aOther) const
- {
- return Equals(aOther);
- }
- NS_HIDDEN_(bool) EqualsASCII(const char_type* aOther) const
- {
- return Equals(aOther);
- }
- /**
- * Case-insensitive match this string to a lowercase ASCII string.
- */
- NS_HIDDEN_(bool) LowerCaseEqualsLiteral(const char* aASCIIString) const
- {
- return Equals(aASCIIString, CaseInsensitiveCompare);
- }
- /**
- * Find the first occurrence of aStr in this string.
- *
- * @return the offset of aStr, or -1 if not found
- */
- NS_HIDDEN_(int32_t) Find(const self_type& aStr,
- ComparatorFunc aComparator = DefaultComparator) const
- {
- return Find(aStr, 0, aComparator);
- }
- /**
- * Find the first occurrence of aStr in this string, beginning at aOffset.
- *
- * @return the offset of aStr, or -1 if not found
- */
- NS_HIDDEN_(int32_t) Find(const self_type& aStr, uint32_t aOffset,
- ComparatorFunc aComparator = DefaultComparator) const;
- /**
- * Find the first occurrence of aStr in this string.
- *
- * @return the offset of aStr, or -1 if not found
- */
- NS_HIDDEN_(int32_t) Find(const char_type* aStr,
- ComparatorFunc aComparator = DefaultComparator) const;
- NS_HIDDEN_(int32_t) Find(const char_type* aStr, uint32_t aLen,
- ComparatorFunc aComparator = DefaultComparator) const;
- /**
- * Find the last occurrence of aStr in this string.
- *
- * @return The offset of the character from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) RFind(const self_type& aStr,
- ComparatorFunc aComparator = DefaultComparator) const
- {
- return RFind(aStr, -1, aComparator);
- }
- /**
- * Find the last occurrence of aStr in this string, beginning at aOffset.
- *
- * @param aOffset the offset from the beginning of the string to begin
- * searching. If aOffset < 0, search from end of this string.
- * @return The offset of aStr from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) RFind(const self_type& aStr, int32_t aOffset,
- ComparatorFunc aComparator = DefaultComparator) const;
- /**
- * Find the last occurrence of aStr in this string.
- *
- * @return The offset of aStr from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) RFind(const char_type* aStr,
- ComparatorFunc aComparator = DefaultComparator) const;
- /**
- * Find the last occurrence of an ASCII string in this string,
- * beginning at aOffset.
- *
- * @param aLen is the length of aStr
- * @return The offset of aStr from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) RFind(const char_type* aStr, int32_t aLen,
- ComparatorFunc aComparator = DefaultComparator) const;
- /**
- * Search for the offset of the first occurrence of a character in a
- * string.
- *
- * @param aOffset the offset from the beginning of the string to begin
- * searching
- * @return The offset of the character from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) FindChar(char_type aChar, uint32_t aOffset = 0) const;
- /**
- * Search for the offset of the last occurrence of a character in a
- * string.
- *
- * @return The offset of the character from the beginning of the string,
- * or -1 if not found.
- */
- NS_HIDDEN_(int32_t) RFindChar(char_type aChar) const;
- /**
- * Append a string representation of a number.
- */
- NS_HIDDEN_(void) AppendInt(int aInt, int32_t aRadix = 10);
- #ifndef XPCOM_GLUE_AVOID_NSPR
- /**
- * Convert this string to an integer.
- *
- * @param aErrorCode pointer to contain result code.
- * @param aRadix must be 10 or 16
- */
- NS_HIDDEN_(int32_t) ToInteger(nsresult* aErrorCode,
- uint32_t aRadix = 10) const;
- /**
- * Convert this string to a 64-bit integer.
- *
- * @param aErrorCode pointer to contain result code.
- * @param aRadix must be 10 or 16
- */
- NS_HIDDEN_(int64_t) ToInteger64(nsresult* aErrorCode,
- uint32_t aRadix = 10) const;
- #endif // XPCOM_GLUE_AVOID_NSPR
- protected:
- // Prevent people from allocating a nsAString directly.
- ~nsACString() {}
- };
- /* ------------------------------------------------------------------------- */
- /**
- * Below we define nsStringContainer and nsCStringContainer. These classes
- * have unspecified structure. In most cases, your code should use
- * nsString/nsCString instead of these classes; if you prefer C-style
- * programming, then look no further.
- */
- class nsStringContainer
- : public nsAString
- , private nsStringContainer_base
- {
- };
- class nsCStringContainer
- : public nsACString
- , private nsStringContainer_base
- {
- };
- /**
- * The following classes are C++ helper classes that make the frozen string
- * API easier to use.
- */
- /**
- * Rename symbols to avoid conflicting with internal versions.
- */
- #define nsString nsString_external
- #define nsCString nsCString_external
- #define nsDependentString nsDependentString_external
- #define nsDependentCString nsDependentCString_external
- #define NS_ConvertASCIItoUTF16 NS_ConvertASCIItoUTF16_external
- #define NS_ConvertUTF8toUTF16 NS_ConvertUTF8toUTF16_external
- #define NS_ConvertUTF16toUTF8 NS_ConvertUTF16toUTF8_external
- #define NS_LossyConvertUTF16toASCII NS_LossyConvertUTF16toASCII_external
- #define nsGetterCopies nsGetterCopies_external
- #define nsCGetterCopies nsCGetterCopies_external
- #define nsDependentSubstring nsDependentSubstring_external
- #define nsDependentCSubstring nsDependentCSubstring_external
- /**
- * basic strings
- */
- class nsString : public nsStringContainer
- {
- public:
- typedef nsString self_type;
- typedef nsAString abstract_string_type;
- nsString()
- {
- NS_StringContainerInit(*this);
- }
- nsString(const self_type& aString)
- {
- NS_StringContainerInit(*this);
- NS_StringCopy(*this, aString);
- }
- explicit nsString(const abstract_string_type& aReadable)
- {
- NS_StringContainerInit(*this);
- NS_StringCopy(*this, aReadable);
- }
- explicit nsString(const char_type* aData, size_type aLength = UINT32_MAX)
- {
- NS_StringContainerInit2(*this, aData, aLength, 0);
- }
- #ifdef MOZ_USE_CHAR16_WRAPPER
- explicit nsString(char16ptr_t aData, size_type aLength = UINT32_MAX)
- : nsString(static_cast<const char16_t*>(aData), aLength)
- {
- }
- #endif
- ~nsString()
- {
- NS_StringContainerFinish(*this);
- }
- char16ptr_t get() const
- {
- return char16ptr_t(BeginReading());
- }
- self_type& operator=(const self_type& aString)
- {
- Assign(aString);
- return *this;
- }
- self_type& operator=(const abstract_string_type& aReadable)
- {
- Assign(aReadable);
- return *this;
- }
- self_type& operator=(const char_type* aPtr)
- {
- Assign(aPtr);
- return *this;
- }
- self_type& operator=(char_type aChar)
- {
- Assign(aChar);
- return *this;
- }
- void Adopt(const char_type* aData, size_type aLength = UINT32_MAX)
- {
- NS_StringContainerFinish(*this);
- NS_StringContainerInit2(*this, aData, aLength,
- NS_STRING_CONTAINER_INIT_ADOPT);
- }
- protected:
- nsString(const char_type* aData, size_type aLength, uint32_t aFlags)
- {
- NS_StringContainerInit2(*this, aData, aLength, aFlags);
- }
- };
- class nsCString : public nsCStringContainer
- {
- public:
- typedef nsCString self_type;
- typedef nsACString abstract_string_type;
- nsCString()
- {
- NS_CStringContainerInit(*this);
- }
- nsCString(const self_type& aString)
- {
- NS_CStringContainerInit(*this);
- NS_CStringCopy(*this, aString);
- }
- explicit nsCString(const abstract_string_type& aReadable)
- {
- NS_CStringContainerInit(*this);
- NS_CStringCopy(*this, aReadable);
- }
- explicit nsCString(const char_type* aData, size_type aLength = UINT32_MAX)
- {
- NS_CStringContainerInit(*this);
- NS_CStringSetData(*this, aData, aLength);
- }
- ~nsCString()
- {
- NS_CStringContainerFinish(*this);
- }
- const char_type* get() const
- {
- return BeginReading();
- }
- self_type& operator=(const self_type& aString)
- {
- Assign(aString);
- return *this;
- }
- self_type& operator=(const abstract_string_type& aReadable)
- {
- Assign(aReadable);
- return *this;
- }
- self_type& operator=(const char_type* aPtr)
- {
- Assign(aPtr);
- return *this;
- }
- self_type& operator=(char_type aChar)
- {
- Assign(aChar);
- return *this;
- }
- void Adopt(const char_type* aData, size_type aLength = UINT32_MAX)
- {
- NS_CStringContainerFinish(*this);
- NS_CStringContainerInit2(*this, aData, aLength,
- NS_CSTRING_CONTAINER_INIT_ADOPT);
- }
- protected:
- nsCString(const char_type* aData, size_type aLength, uint32_t aFlags)
- {
- NS_CStringContainerInit2(*this, aData, aLength, aFlags);
- }
- };
- /**
- * dependent strings
- */
- class nsDependentString : public nsString
- {
- public:
- typedef nsDependentString self_type;
- nsDependentString() {}
- explicit nsDependentString(const char_type* aData,
- size_type aLength = UINT32_MAX)
- : nsString(aData, aLength, NS_CSTRING_CONTAINER_INIT_DEPEND)
- {
- }
- #ifdef MOZ_USE_CHAR16_WRAPPER
- explicit nsDependentString(char16ptr_t aData, size_type aLength = UINT32_MAX)
- : nsDependentString(static_cast<const char16_t*>(aData), aLength)
- {
- }
- #endif
- void Rebind(const char_type* aData, size_type aLength = UINT32_MAX)
- {
- NS_StringContainerFinish(*this);
- NS_StringContainerInit2(*this, aData, aLength,
- NS_STRING_CONTAINER_INIT_DEPEND);
- }
- private:
- self_type& operator=(const self_type& aString) = delete;
- };
- class nsDependentCString : public nsCString
- {
- public:
- typedef nsDependentCString self_type;
- nsDependentCString() {}
- explicit nsDependentCString(const char_type* aData,
- size_type aLength = UINT32_MAX)
- : nsCString(aData, aLength, NS_CSTRING_CONTAINER_INIT_DEPEND)
- {
- }
- void Rebind(const char_type* aData, size_type aLength = UINT32_MAX)
- {
- NS_CStringContainerFinish(*this);
- NS_CStringContainerInit2(*this, aData, aLength,
- NS_CSTRING_CONTAINER_INIT_DEPEND);
- }
- private:
- self_type& operator=(const self_type& aString) = delete;
- };
- /**
- * conversion classes
- */
- inline void
- CopyUTF16toUTF8(const nsAString& aSource, nsACString& aDest)
- {
- NS_UTF16ToCString(aSource, NS_CSTRING_ENCODING_UTF8, aDest);
- }
- inline void
- CopyUTF8toUTF16(const nsACString& aSource, nsAString& aDest)
- {
- NS_CStringToUTF16(aSource, NS_CSTRING_ENCODING_UTF8, aDest);
- }
- inline void
- LossyCopyUTF16toASCII(const nsAString& aSource, nsACString& aDest)
- {
- NS_UTF16ToCString(aSource, NS_CSTRING_ENCODING_ASCII, aDest);
- }
- inline void
- CopyASCIItoUTF16(const nsACString& aSource, nsAString& aDest)
- {
- NS_CStringToUTF16(aSource, NS_CSTRING_ENCODING_ASCII, aDest);
- }
- char*
- ToNewUTF8String(const nsAString& aSource);
- class NS_ConvertASCIItoUTF16 : public nsString
- {
- public:
- typedef NS_ConvertASCIItoUTF16 self_type;
- explicit NS_ConvertASCIItoUTF16(const nsACString& aStr)
- {
- NS_CStringToUTF16(aStr, NS_CSTRING_ENCODING_ASCII, *this);
- }
- explicit NS_ConvertASCIItoUTF16(const char* aData,
- uint32_t aLength = UINT32_MAX)
- {
- NS_CStringToUTF16(nsDependentCString(aData, aLength),
- NS_CSTRING_ENCODING_ASCII, *this);
- }
- private:
- self_type& operator=(const self_type& aString) = delete;
- };
- class NS_ConvertUTF8toUTF16 : public nsString
- {
- public:
- typedef NS_ConvertUTF8toUTF16 self_type;
- explicit NS_ConvertUTF8toUTF16(const nsACString& aStr)
- {
- NS_CStringToUTF16(aStr, NS_CSTRING_ENCODING_UTF8, *this);
- }
- explicit NS_ConvertUTF8toUTF16(const char* aData,
- uint32_t aLength = UINT32_MAX)
- {
- NS_CStringToUTF16(nsDependentCString(aData, aLength),
- NS_CSTRING_ENCODING_UTF8, *this);
- }
- private:
- self_type& operator=(const self_type& aString) = delete;
- };
- class NS_ConvertUTF16toUTF8 : public nsCString
- {
- public:
- typedef NS_ConvertUTF16toUTF8 self_type;
- explicit NS_ConvertUTF16toUTF8(const nsAString& aStr)
- {
- NS_UTF16ToCString(aStr, NS_CSTRING_ENCODING_UTF8, *this);
- }
- explicit NS_ConvertUTF16toUTF8(const char16ptr_t aData,
- uint32_t aLength = UINT32_MAX)
- {
- NS_UTF16ToCString(nsDependentString(aData, aLength),
- NS_CSTRING_ENCODING_UTF8, *this);
- }
- private:
- self_type& operator=(const self_type& aString) = delete;
- };
- class NS_LossyConvertUTF16toASCII : public nsCString
- {
- public:
- typedef NS_LossyConvertUTF16toASCII self_type;
- explicit NS_LossyConvertUTF16toASCII(const nsAString& aStr)
- {
- NS_UTF16ToCString(aStr, NS_CSTRING_ENCODING_ASCII, *this);
- }
- explicit NS_LossyConvertUTF16toASCII(const char16ptr_t aData,
- uint32_t aLength = UINT32_MAX)
- {
- NS_UTF16ToCString(nsDependentString(aData, aLength),
- NS_CSTRING_ENCODING_ASCII, *this);
- }
- private:
- self_type& operator=(const self_type& aString) = delete;
- };
- /**
- * literal strings
- */
- static_assert(sizeof(char16_t) == 2, "size of char16_t must be 2");
- static_assert(char16_t(-1) > char16_t(0), "char16_t must be unsigned");
- #define NS_MULTILINE_LITERAL_STRING(s) \
- nsDependentString(reinterpret_cast<const nsAString::char_type*>(s), \
- uint32_t((sizeof(s) / 2) - 1))
- #define NS_MULTILINE_LITERAL_STRING_INIT(n, s) \
- n(reinterpret_cast<const nsAString::char_type*>(s), \
- uint32_t((sizeof(s) / 2) - 1))
- #define NS_NAMED_MULTILINE_LITERAL_STRING(n,s) \
- const nsDependentString n(reinterpret_cast<const nsAString::char_type*>(s), \
- uint32_t((sizeof(s) / 2) - 1))
- typedef nsDependentString nsLiteralString;
- #define NS_LITERAL_STRING(s) \
- static_cast<const nsString&>(NS_MULTILINE_LITERAL_STRING(u"" s))
- #define NS_LITERAL_STRING_INIT(n, s) \
- NS_MULTILINE_LITERAL_STRING_INIT(n, (u"" s))
- #define NS_NAMED_LITERAL_STRING(n, s) \
- NS_NAMED_MULTILINE_LITERAL_STRING(n, (u"" s))
- #define NS_LITERAL_CSTRING(s) \
- static_cast<const nsDependentCString&>(nsDependentCString(s, uint32_t(sizeof(s) - 1)))
- #define NS_LITERAL_CSTRING_INIT(n, s) \
- n(s, uint32_t(sizeof(s)-1))
- #define NS_NAMED_LITERAL_CSTRING(n, s) \
- const nsDependentCString n(s, uint32_t(sizeof(s)-1))
- typedef nsDependentCString nsLiteralCString;
- /**
- * getter_Copies support
- *
- * NS_IMETHOD GetBlah(char16_t**);
- *
- * void some_function()
- * {
- * nsString blah;
- * GetBlah(getter_Copies(blah));
- * // ...
- * }
- */
- class nsGetterCopies
- {
- public:
- typedef char16_t char_type;
- explicit nsGetterCopies(nsString& aStr)
- : mString(aStr)
- , mData(nullptr)
- {
- }
- ~nsGetterCopies() { mString.Adopt(mData); }
- operator char_type**() { return &mData; }
- private:
- nsString& mString;
- char_type* mData;
- };
- inline nsGetterCopies
- getter_Copies(nsString& aString)
- {
- return nsGetterCopies(aString);
- }
- class nsCGetterCopies
- {
- public:
- typedef char char_type;
- explicit nsCGetterCopies(nsCString& aStr)
- : mString(aStr)
- , mData(nullptr)
- {
- }
- ~nsCGetterCopies() { mString.Adopt(mData); }
- operator char_type**() { return &mData; }
- private:
- nsCString& mString;
- char_type* mData;
- };
- inline nsCGetterCopies
- getter_Copies(nsCString& aString)
- {
- return nsCGetterCopies(aString);
- }
- /**
- * substrings
- */
- class nsDependentSubstring : public nsStringContainer
- {
- public:
- typedef nsDependentSubstring self_type;
- typedef nsAString abstract_string_type;
- ~nsDependentSubstring() { NS_StringContainerFinish(*this); }
- nsDependentSubstring() { NS_StringContainerInit(*this); }
- nsDependentSubstring(const char_type* aStart, uint32_t aLength)
- {
- NS_StringContainerInit2(*this, aStart, aLength,
- NS_STRING_CONTAINER_INIT_DEPEND |
- NS_STRING_CONTAINER_INIT_SUBSTRING);
- }
- nsDependentSubstring(const abstract_string_type& aStr,
- uint32_t aStartPos);
- nsDependentSubstring(const abstract_string_type& aStr,
- uint32_t aStartPos, uint32_t aLength);
- void Rebind(const char_type* aStart, uint32_t aLength)
- {
- NS_StringContainerFinish(*this);
- NS_StringContainerInit2(*this, aStart, aLength,
- NS_STRING_CONTAINER_INIT_DEPEND |
- NS_STRING_CONTAINER_INIT_SUBSTRING);
- }
- private:
- self_type& operator=(const self_type& aString) = delete;
- };
- class nsDependentCSubstring : public nsCStringContainer
- {
- public:
- typedef nsDependentCSubstring self_type;
- typedef nsACString abstract_string_type;
- ~nsDependentCSubstring() { NS_CStringContainerFinish(*this); }
- nsDependentCSubstring() { NS_CStringContainerInit(*this); }
- nsDependentCSubstring(const char_type* aStart, uint32_t aLength)
- {
- NS_CStringContainerInit2(*this, aStart, aLength,
- NS_CSTRING_CONTAINER_INIT_DEPEND |
- NS_CSTRING_CONTAINER_INIT_SUBSTRING);
- }
- nsDependentCSubstring(const abstract_string_type& aStr,
- uint32_t aStartPos);
- nsDependentCSubstring(const abstract_string_type& aStr,
- uint32_t aStartPos, uint32_t aLength);
- void Rebind(const char_type* aStart, uint32_t aLength)
- {
- NS_CStringContainerFinish(*this);
- NS_CStringContainerInit2(*this, aStart, aLength,
- NS_CSTRING_CONTAINER_INIT_DEPEND |
- NS_CSTRING_CONTAINER_INIT_SUBSTRING);
- }
- private:
- self_type& operator=(const self_type& aString) = delete;
- };
- /**
- * Various nsDependentC?Substring constructor functions
- */
- // char16_t
- inline const nsDependentSubstring
- Substring(const nsAString& aStr, uint32_t aStartPos)
- {
- return nsDependentSubstring(aStr, aStartPos);
- }
- inline const nsDependentSubstring
- Substring(const nsAString& aStr, uint32_t aStartPos, uint32_t aLength)
- {
- return nsDependentSubstring(aStr, aStartPos, aLength);
- }
- inline const nsDependentSubstring
- Substring(const char16_t* aStart, const char16_t* aEnd)
- {
- MOZ_ASSERT(uint32_t(aEnd - aStart) == uintptr_t(aEnd - aStart),
- "string too long");
- return nsDependentSubstring(aStart, uint32_t(aEnd - aStart));
- }
- inline const nsDependentSubstring
- Substring(const char16_t* aStart, uint32_t aLength)
- {
- return nsDependentSubstring(aStart, aLength);
- }
- inline const nsDependentSubstring
- StringHead(const nsAString& aStr, uint32_t aCount)
- {
- return nsDependentSubstring(aStr, 0, aCount);
- }
- inline const nsDependentSubstring
- StringTail(const nsAString& aStr, uint32_t aCount)
- {
- return nsDependentSubstring(aStr, aStr.Length() - aCount, aCount);
- }
- // char
- inline const nsDependentCSubstring
- Substring(const nsACString& aStr, uint32_t aStartPos)
- {
- return nsDependentCSubstring(aStr, aStartPos);
- }
- inline const nsDependentCSubstring
- Substring(const nsACString& aStr, uint32_t aStartPos, uint32_t aLength)
- {
- return nsDependentCSubstring(aStr, aStartPos, aLength);
- }
- inline const nsDependentCSubstring
- Substring(const char* aStart, const char* aEnd)
- {
- MOZ_ASSERT(uint32_t(aEnd - aStart) == uintptr_t(aEnd - aStart),
- "string too long");
- return nsDependentCSubstring(aStart, uint32_t(aEnd - aStart));
- }
- inline const nsDependentCSubstring
- Substring(const char* aStart, uint32_t aLength)
- {
- return nsDependentCSubstring(aStart, aLength);
- }
- inline const nsDependentCSubstring
- StringHead(const nsACString& aStr, uint32_t aCount)
- {
- return nsDependentCSubstring(aStr, 0, aCount);
- }
- inline const nsDependentCSubstring
- StringTail(const nsACString& aStr, uint32_t aCount)
- {
- return nsDependentCSubstring(aStr, aStr.Length() - aCount, aCount);
- }
- inline bool
- StringBeginsWith(const nsAString& aSource, const nsAString& aSubstring,
- nsAString::ComparatorFunc aComparator = nsAString::DefaultComparator)
- {
- return aSubstring.Length() <= aSource.Length() &&
- StringHead(aSource, aSubstring.Length()).Equals(aSubstring, aComparator);
- }
- inline bool
- StringEndsWith(const nsAString& aSource, const nsAString& aSubstring,
- nsAString::ComparatorFunc aComparator = nsAString::DefaultComparator)
- {
- return aSubstring.Length() <= aSource.Length() &&
- StringTail(aSource, aSubstring.Length()).Equals(aSubstring, aComparator);
- }
- inline bool
- StringBeginsWith(const nsACString& aSource, const nsACString& aSubstring,
- nsACString::ComparatorFunc aComparator = nsACString::DefaultComparator)
- {
- return aSubstring.Length() <= aSource.Length() &&
- StringHead(aSource, aSubstring.Length()).Equals(aSubstring, aComparator);
- }
- inline bool
- StringEndsWith(const nsACString& aSource, const nsACString& aSubstring,
- nsACString::ComparatorFunc aComparator = nsACString::DefaultComparator)
- {
- return aSubstring.Length() <= aSource.Length() &&
- StringTail(aSource, aSubstring.Length()).Equals(aSubstring, aComparator);
- }
- /**
- * Trim whitespace from the beginning and end of a string; then compress
- * remaining runs of whitespace characters to a single space.
- */
- NS_HIDDEN_(void) CompressWhitespace(nsAString& aString);
- #define EmptyCString() nsCString()
- #define EmptyString() nsString()
- /**
- * Convert an ASCII string to all upper/lowercase (a-z,A-Z only). As a bonus,
- * returns the string length.
- */
- NS_HIDDEN_(uint32_t) ToLowerCase(nsACString& aStr);
- NS_HIDDEN_(uint32_t) ToUpperCase(nsACString& aStr);
- NS_HIDDEN_(uint32_t) ToLowerCase(const nsACString& aSrc, nsACString& aDest);
- NS_HIDDEN_(uint32_t) ToUpperCase(const nsACString& aSrc, nsACString& aDest);
- /**
- * The following declarations are *deprecated*, and are included here only
- * to make porting from existing code that doesn't use the frozen string API
- * easier. They may disappear in the future.
- */
- inline char*
- ToNewCString(const nsACString& aStr)
- {
- return NS_CStringCloneData(aStr);
- }
- inline char16_t*
- ToNewUnicode(const nsAString& aStr)
- {
- return NS_StringCloneData(aStr);
- }
- typedef nsString PromiseFlatString;
- typedef nsCString PromiseFlatCString;
- typedef nsCString nsAutoCString;
- typedef nsString nsAutoString;
- NS_HIDDEN_(bool) ParseString(const nsACString& aAstring, char aDelimiter,
- nsTArray<nsCString>& aArray);
- #endif // nsStringAPI_h__
|