PATH:
usr
/
include
/
unicode
// Copyright (C) 2009-2012, International Business Machines // Corporation and others. All Rights Reserved. // // Copyright 2001 and onwards Google Inc. // Author: Sanjay Ghemawat // This code is a contribution of Google code, and the style used here is // a compromise between the original Google code and the ICU coding guidelines. // For example, data types are ICU-ified (size_t,int->int32_t), // and API comments doxygen-ified, but function names and behavior are // as in the original, if possible. // Assertion-style error handling, not available in ICU, was changed to // parameter "pinning" similar to UnicodeString. // // In addition, this is only a partial port of the original Google code, // limited to what was needed so far. The (nearly) complete original code // is in the ICU svn repository at icuhtml/trunk/design/strings/contrib // (see ICU ticket 6765, r25517). #ifndef __STRINGPIECE_H__ #define __STRINGPIECE_H__ /** * \file * \brief C++ API: StringPiece: Read-only byte string wrapper class. */ #include "unicode/utypes.h" #include "unicode/uobject.h" #include "unicode/std_string.h" // Arghh! I wish C++ literals were "string". U_NAMESPACE_BEGIN /** * A string-like object that points to a sized piece of memory. * * We provide non-explicit singleton constructors so users can pass * in a "const char*" or a "string" wherever a "StringPiece" is * expected. * * Functions or methods may use const StringPiece& parameters to accept either * a "const char*" or a "string" value that will be implicitly converted to * a StringPiece. * * Systematic usage of StringPiece is encouraged as it will reduce unnecessary * conversions from "const char*" to "string" and back again. * * @stable ICU 4.2 */ class U_COMMON_API StringPiece : public UMemory { private: const char* ptr_; int32_t length_; public: /** * Default constructor, creates an empty StringPiece. * @stable ICU 4.2 */ StringPiece() : ptr_(NULL), length_(0) { } /** * Constructs from a NUL-terminated const char * pointer. * @param str a NUL-terminated const char * pointer * @stable ICU 4.2 */ StringPiece(const char* str); #if U_HAVE_STD_STRING /** * Constructs from a std::string. * @stable ICU 4.2 */ StringPiece(const std::string& str) : ptr_(str.data()), length_(static_cast<int32_t>(str.size())) { } #endif /** * Constructs from a const char * pointer and a specified length. * @param offset a const char * pointer (need not be terminated) * @param len the length of the string; must be non-negative * @stable ICU 4.2 */ StringPiece(const char* offset, int32_t len) : ptr_(offset), length_(len) { } /** * Substring of another StringPiece. * @param x the other StringPiece * @param pos start position in x; must be non-negative and <= x.length(). * @stable ICU 4.2 */ StringPiece(const StringPiece& x, int32_t pos); /** * Substring of another StringPiece. * @param x the other StringPiece * @param pos start position in x; must be non-negative and <= x.length(). * @param len length of the substring; * must be non-negative and will be pinned to at most x.length() - pos. * @stable ICU 4.2 */ StringPiece(const StringPiece& x, int32_t pos, int32_t len); /** * Returns the string pointer. May be NULL if it is empty. * * data() may return a pointer to a buffer with embedded NULs, and the * returned buffer may or may not be null terminated. Therefore it is * typically a mistake to pass data() to a routine that expects a NUL * terminated string. * @return the string pointer * @stable ICU 4.2 */ const char* data() const { return ptr_; } /** * Returns the string length. Same as length(). * @return the string length * @stable ICU 4.2 */ int32_t size() const { return length_; } /** * Returns the string length. Same as size(). * @return the string length * @stable ICU 4.2 */ int32_t length() const { return length_; } /** * Returns whether the string is empty. * @return TRUE if the string is empty * @stable ICU 4.2 */ UBool empty() const { return length_ == 0; } /** * Sets to an empty string. * @stable ICU 4.2 */ void clear() { ptr_ = NULL; length_ = 0; } /** * Reset the stringpiece to refer to new data. * @param xdata pointer the new string data. Need not be nul terminated. * @param len the length of the new data * @stable ICU 4.8 */ void set(const char* xdata, int32_t len) { ptr_ = xdata; length_ = len; } /** * Reset the stringpiece to refer to new data. * @param str a pointer to a NUL-terminated string. * @stable ICU 4.8 */ void set(const char* str); /** * Removes the first n string units. * @param n prefix length, must be non-negative and <=length() * @stable ICU 4.2 */ void remove_prefix(int32_t n) { if (n >= 0) { if (n > length_) { n = length_; } ptr_ += n; length_ -= n; } } /** * Removes the last n string units. * @param n suffix length, must be non-negative and <=length() * @stable ICU 4.2 */ void remove_suffix(int32_t n) { if (n >= 0) { if (n <= length_) { length_ -= n; } else { length_ = 0; } } } /** * Maximum integer, used as a default value for substring methods. * @stable ICU 4.2 */ static const int32_t npos = 0x7fffffff; /** * Returns a substring of this StringPiece. * @param pos start position; must be non-negative and <= length(). * @param len length of the substring; * must be non-negative and will be pinned to at most length() - pos. * @return the substring StringPiece * @stable ICU 4.2 */ StringPiece substr(int32_t pos, int32_t len = npos) const { return StringPiece(*this, pos, len); } }; /** * Global operator == for StringPiece * @param x The first StringPiece to compare. * @param y The second StringPiece to compare. * @return TRUE if the string data is equal * @stable ICU 4.8 */ U_EXPORT UBool U_EXPORT2 operator==(const StringPiece& x, const StringPiece& y); /** * Global operator != for StringPiece * @param x The first StringPiece to compare. * @param y The second StringPiece to compare. * @return TRUE if the string data is not equal * @stable ICU 4.8 */ inline UBool operator!=(const StringPiece& x, const StringPiece& y) { return !(x == y); } U_NAMESPACE_END #endif // __STRINGPIECE_H__
[-] tzrule.h
[edit]
[-] utrans.h
[edit]
[-] ucnv.h
[edit]
[-] dtrule.h
[edit]
[-] format.h
[edit]
[-] uvernum.h
[edit]
[-] utf32.h
[edit]
[-] ubidi.h
[edit]
[-] enumset.h
[edit]
[-] normlzr.h
[edit]
[-] measfmt.h
[edit]
[-] ubrk.h
[edit]
[-] upluralrules.h
[edit]
[-] sortkey.h
[edit]
[-] bytestrie.h
[edit]
[-] fpositer.h
[edit]
[-] utf_old.h
[edit]
[-] tmutamt.h
[edit]
[-] uconfig.h
[edit]
[-] alphaindex.h
[edit]
[-] vtzone.h
[edit]
[-] locdspnm.h
[edit]
[-] numsys.h
[edit]
[-] simpletz.h
[edit]
[-] tznames.h
[edit]
[-] stringpiece.h
[edit]
[-] parseerr.h
[edit]
[-] ucsdet.h
[edit]
[-] appendable.h
[edit]
[+]
..
[-] dtptngen.h
[edit]
[-] dtintrv.h
[edit]
[-] resbund.h
[edit]
[-] ptypes.h
[edit]
[-] ustdio.h
[edit]
[-] symtable.h
[edit]
[-] ucnv_err.h
[edit]
[-] utypes.h
[edit]
[-] bytestream.h
[edit]
[-] dtfmtsym.h
[edit]
[-] unorm2.h
[edit]
[-] udateintervalformat.h
[edit]
[-] ucat.h
[edit]
[-] usearch.h
[edit]
[-] platform.h
[edit]
[-] unum.h
[edit]
[-] locid.h
[edit]
[-] uversion.h
[edit]
[-] regex.h
[edit]
[-] strenum.h
[edit]
[-] ucasemap.h
[edit]
[-] utmscale.h
[edit]
[-] decimfmt.h
[edit]
[-] messagepattern.h
[edit]
[-] brkiter.h
[edit]
[-] ucurr.h
[edit]
[-] uset.h
[edit]
[-] tztrans.h
[edit]
[-] udata.h
[edit]
[-] currpinf.h
[edit]
[-] datefmt.h
[edit]
[-] rbbi.h
[edit]
[-] parsepos.h
[edit]
[-] rbtz.h
[edit]
[-] ucnv_cb.h
[edit]
[-] ucoleitr.h
[edit]
[-] udat.h
[edit]
[-] putil.h
[edit]
[-] coll.h
[edit]
[-] gender.h
[edit]
[-] ucharstriebuilder.h
[edit]
[-] unimatch.h
[edit]
[-] currunit.h
[edit]
[-] ugender.h
[edit]
[-] colldata.h
[edit]
[-] uchriter.h
[edit]
[-] tmunit.h
[edit]
[-] ulocdata.h
[edit]
[-] timezone.h
[edit]
[-] unirepl.h
[edit]
[-] umisc.h
[edit]
[-] tmutfmt.h
[edit]
[-] ushape.h
[edit]
[-] dtitvinf.h
[edit]
[-] usetiter.h
[edit]
[-] uniset.h
[edit]
[-] listformatter.h
[edit]
[-] umsg.h
[edit]
[-] ustream.h
[edit]
[-] ustringtrie.h
[edit]
[-] icudataver.h
[edit]
[-] bytestriebuilder.h
[edit]
[-] bms.h
[edit]
[-] uldnames.h
[edit]
[-] uregex.h
[edit]
[-] schriter.h
[edit]
[-] uenum.h
[edit]
[-] uclean.h
[edit]
[-] bmsearch.h
[edit]
[-] utf16.h
[edit]
[-] normalizer2.h
[edit]
[-] calendar.h
[edit]
[-] udatpg.h
[edit]
[-] unifunct.h
[edit]
[-] dbbi.h
[edit]
[-] utext.h
[edit]
[-] uchar.h
[edit]
[-] tzfmt.h
[edit]
[-] urep.h
[edit]
[-] uscript.h
[edit]
[-] urename.h
[edit]
[-] std_string.h
[edit]
[-] choicfmt.h
[edit]
[-] rep.h
[edit]
[-] idna.h
[edit]
[-] unorm.h
[edit]
[-] dtitvfmt.h
[edit]
[-] utrace.h
[edit]
[-] uidna.h
[edit]
[-] search.h
[edit]
[-] uobject.h
[edit]
[-] basictz.h
[edit]
[-] dcfmtsym.h
[edit]
[-] coleitr.h
[edit]
[-] translit.h
[edit]
[-] ures.h
[edit]
[-] unistr.h
[edit]
[-] udisplaycontext.h
[edit]
[-] fmtable.h
[edit]
[-] rbnf.h
[edit]
[-] gregocal.h
[edit]
[-] uiter.h
[edit]
[-] umachine.h
[edit]
[-] plurrule.h
[edit]
[-] plurfmt.h
[edit]
[-] ucnvsel.h
[edit]
[-] curramt.h
[edit]
[-] ucal.h
[edit]
[-] measure.h
[edit]
[-] utf8.h
[edit]
[-] uspoof.h
[edit]
[-] icuplug.h
[edit]
[-] chariter.h
[edit]
[-] stringtriebuilder.h
[edit]
[-] caniter.h
[edit]
[-] utf.h
[edit]
[-] fieldpos.h
[edit]
[-] ucharstrie.h
[edit]
[-] tblcoll.h
[edit]
[-] ustring.h
[edit]
[-] errorcode.h
[edit]
[-] stsearch.h
[edit]
[-] localpointer.h
[edit]
[-] usprep.h
[edit]
[-] docmain.h
[edit]
[-] msgfmt.h
[edit]
[-] selfmt.h
[edit]
[-] unifilt.h
[edit]
[-] uloc.h
[edit]
[-] measunit.h
[edit]
[-] ucol.h
[edit]
[-] numfmt.h
[edit]
[-] smpdtfmt.h
[edit]