16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Copyright (C) 2009-2013, International Business Machines 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Corporation and others. All Rights Reserved. 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Copyright 2001 and onwards Google Inc. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Author: Sanjay Ghemawat 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// This code is a contribution of Google code, and the style used here is 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// a compromise between the original Google code and the ICU coding guidelines. 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// For example, data types are ICU-ified (size_t,int->int32_t), 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// and API comments doxygen-ified, but function names and behavior are 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// as in the original, if possible. 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Assertion-style error handling, not available in ICU, was changed to 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// parameter "pinning" similar to UnicodeString. 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// In addition, this is only a partial port of the original Google code, 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// limited to what was needed so far. The (nearly) complete original code 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// is in the ICU svn repository at icuhtml/trunk/design/strings/contrib 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// (see ICU ticket 6765, r25517). 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef __STRINGPIECE_H__ 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define __STRINGPIECE_H__ 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C++ API: StringPiece: Read-only byte string wrapper class. 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uobject.h" 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/std_string.h" 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Arghh! I wish C++ literals were "string". 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * A string-like object that points to a sized piece of memory. 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * We provide non-explicit singleton constructors so users can pass 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in a "const char*" or a "string" wherever a "StringPiece" is 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * expected. 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Functions or methods may use const StringPiece& parameters to accept either 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a "const char*" or a "string" value that will be implicitly converted to 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a StringPiece. 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Systematic usage of StringPiece is encouraged as it will reduce unnecessary 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * conversions from "const char*" to "string" and back again. 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass U_COMMON_API StringPiece : public UMemory { 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org private: 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* ptr_; 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length_; 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org public: 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Default constructor, creates an empty StringPiece. 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringPiece() : ptr_(NULL), length_(0) { } 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs from a NUL-terminated const char * pointer. 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param str a NUL-terminated const char * pointer 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringPiece(const char* str); 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_HAVE_STD_STRING 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs from a std::string. 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringPiece(const std::string& str) 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : ptr_(str.data()), length_(static_cast<int32_t>(str.size())) { } 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constructs from a const char * pointer and a specified length. 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param offset a const char * pointer (need not be terminated) 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param len the length of the string; must be non-negative 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringPiece(const char* offset, int32_t len) : ptr_(offset), length_(len) { } 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Substring of another StringPiece. 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param x the other StringPiece 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pos start position in x; must be non-negative and <= x.length(). 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringPiece(const StringPiece& x, int32_t pos); 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Substring of another StringPiece. 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param x the other StringPiece 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pos start position in x; must be non-negative and <= x.length(). 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param len length of the substring; 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * must be non-negative and will be pinned to at most x.length() - pos. 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringPiece(const StringPiece& x, int32_t pos, int32_t len); 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns the string pointer. May be NULL if it is empty. 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * data() may return a pointer to a buffer with embedded NULs, and the 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * returned buffer may or may not be null terminated. Therefore it is 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * typically a mistake to pass data() to a routine that expects a NUL 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * terminated string. 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the string pointer 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char* data() const { return ptr_; } 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns the string length. Same as length(). 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the string length 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t size() const { return length_; } 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns the string length. Same as size(). 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the string length 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t length() const { return length_; } 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns whether the string is empty. 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the string is empty 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool empty() const { return length_ == 0; } 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets to an empty string. 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void clear() { ptr_ = NULL; length_ = 0; } 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Reset the stringpiece to refer to new data. 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param xdata pointer the new string data. Need not be nul terminated. 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param len the length of the new data 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void set(const char* xdata, int32_t len) { ptr_ = xdata; length_ = len; } 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Reset the stringpiece to refer to new data. 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param str a pointer to a NUL-terminated string. 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void set(const char* str); 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Removes the first n string units. 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param n prefix length, must be non-negative and <=length() 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void remove_prefix(int32_t n) { 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (n >= 0) { 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (n > length_) { 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org n = length_; 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ptr_ += n; 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length_ -= n; 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Removes the last n string units. 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param n suffix length, must be non-negative and <=length() 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void remove_suffix(int32_t n) { 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (n >= 0) { 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (n <= length_) { 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length_ -= n; 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org length_ = 0; 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Maximum integer, used as a default value for substring methods. 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const int32_t npos; // = 0x7fffffff; 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns a substring of this StringPiece. 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pos start position; must be non-negative and <= length(). 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param len length of the substring; 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * must be non-negative and will be pinned to at most length() - pos. 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the substring StringPiece 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.2 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringPiece substr(int32_t pos, int32_t len = npos) const { 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return StringPiece(*this, pos, len); 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Global operator == for StringPiece 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param x The first StringPiece to compare. 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param y The second StringPiece to compare. 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the string data is equal 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_EXPORT UBool U_EXPORT2 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgoperator==(const StringPiece& x, const StringPiece& y); 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Global operator != for StringPiece 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param x The first StringPiece to compare. 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param y The second StringPiece to compare. 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return TRUE if the string data is not equal 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UBool operator!=(const StringPiece& x, const StringPiece& y) { 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return !(x == y); 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // __STRINGPIECE_H__ 225