String8.h revision 647925ddf053989b641b4c5c8a51efd55c931f22
1cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project/* 2cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project 3cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 4cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * you may not use this file except in compliance with the License. 6cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * You may obtain a copy of the License at 7cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 8cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 10cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * See the License for the specific language governing permissions and 14cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * limitations under the License. 15cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 16cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 17cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#ifndef ANDROID_STRING8_H 18cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#define ANDROID_STRING8_H 19cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 20cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#include <utils/Errors.h> 21ba0165bef09729a33ab8e0ca329342be05e0d859Kenny Root#include <utils/SharedBuffer.h> 22ba0165bef09729a33ab8e0ca329342be05e0d859Kenny Root#include <utils/Unicode.h> 23cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 24ba0165bef09729a33ab8e0ca329342be05e0d859Kenny Root#include <string.h> // for strcmp 25647925ddf053989b641b4c5c8a51efd55c931f22Jeff Brown#include <stdarg.h> 2644dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa 2744dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa// --------------------------------------------------------------------------- 2844dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa 29cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectnamespace android { 30cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 31ba0165bef09729a33ab8e0ca329342be05e0d859Kenny Rootclass String16; 32cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectclass TextOutput; 33cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 3444dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa//! This is a string holding UTF-8 characters. Does not allow the value more 3544dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa// than 0x10FFFF, which is not valid unicode codepoint. 36cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectclass String8 37cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 38cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectpublic: 39cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8(); 40cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8(const String8& o); 41cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project explicit String8(const char* o); 42cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project explicit String8(const char* o, size_t numChars); 43cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 44cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project explicit String8(const String16& o); 45cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project explicit String8(const char16_t* o); 46cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project explicit String8(const char16_t* o, size_t numChars); 4744dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa explicit String8(const char32_t* o); 4844dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa explicit String8(const char32_t* o, size_t numChars); 49cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ~String8(); 50cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 51cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline const char* string() const; 52cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline size_t size() const; 53cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline size_t length() const; 54cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline size_t bytes() const; 5548da31b735ebbc6a00c4e9fe9631f4af79e2c9dfJeff Brown inline bool isEmpty() const; 56cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 57cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline const SharedBuffer* sharedBuffer() const; 58cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 5948da31b735ebbc6a00c4e9fe9631f4af79e2c9dfJeff Brown void clear(); 6048da31b735ebbc6a00c4e9fe9631f4af79e2c9dfJeff Brown 61cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project void setTo(const String8& other); 62cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project status_t setTo(const char* other); 63cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project status_t setTo(const char* other, size_t numChars); 64cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project status_t setTo(const char16_t* other, size_t numChars); 6544dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa status_t setTo(const char32_t* other, 6644dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa size_t length); 6744dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa 68cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project status_t append(const String8& other); 69cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project status_t append(const char* other); 70cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project status_t append(const char* other, size_t numChars); 71cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 7238fb25b9d040ac16dc838027da2889301a38fc7dJeff Brown status_t appendFormat(const char* fmt, ...) 7338fb25b9d040ac16dc838027da2889301a38fc7dJeff Brown __attribute__((format (printf, 2, 3))); 74647925ddf053989b641b4c5c8a51efd55c931f22Jeff Brown status_t appendFormatV(const char* fmt, va_list args); 7535a154e57f2f59722de580395ccd5172e44842cbJeff Brown 7644dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa // Note that this function takes O(N) time to calculate the value. 7744dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa // No cache value is stored. 7844dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa size_t getUtf32Length() const; 7944dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa int32_t getUtf32At(size_t index, 8044dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa size_t *next_index) const; 81ba0165bef09729a33ab8e0ca329342be05e0d859Kenny Root void getUtf32(char32_t* dst) const; 8244dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa 83cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline String8& operator=(const String8& other); 84cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline String8& operator=(const char* other); 85cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 86cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline String8& operator+=(const String8& other); 87cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline String8 operator+(const String8& other) const; 88cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 89cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline String8& operator+=(const char* other); 90cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline String8 operator+(const char* other) const; 91cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 92cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline int compare(const String8& other) const; 93cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 94cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator<(const String8& other) const; 95cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator<=(const String8& other) const; 96cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator==(const String8& other) const; 97cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator!=(const String8& other) const; 98cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator>=(const String8& other) const; 99cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator>(const String8& other) const; 100cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 101cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator<(const char* other) const; 102cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator<=(const char* other) const; 103cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator==(const char* other) const; 104cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator!=(const char* other) const; 105cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator>=(const char* other) const; 106cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline bool operator>(const char* other) const; 107cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 108cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project inline operator const char*() const; 109cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 110cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project char* lockBuffer(size_t size); 111cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project void unlockBuffer(); 112cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project status_t unlockBuffer(size_t size); 113cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 114cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project // return the index of the first byte of other in this at or after 115cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project // start, or -1 if not found 116cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project ssize_t find(const char* other, size_t start = 0) const; 117cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 118cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project void toLower(); 119cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project void toLower(size_t start, size_t numChars); 120cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project void toUpper(); 121cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project void toUpper(size_t start, size_t numChars); 12244dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa 123cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 124cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * These methods operate on the string as if it were a path name. 125cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 126cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 127cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 128cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Set the filename field to a specific value. 129cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 130cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Normalizes the filename, removing a trailing '/' if present. 131cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 132cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project void setPathName(const char* name); 133cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project void setPathName(const char* name, size_t numChars); 134cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 135cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 136cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Get just the filename component. 137cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 138cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "/tmp/foo/bar.c" --> "bar.c" 139cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 140cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8 getPathLeaf(void) const; 141cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 142cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 143cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Remove the last (file name) component, leaving just the directory 144cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * name. 145cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 146cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "/tmp/foo/bar.c" --> "/tmp/foo" 147cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "/tmp" --> "" // ????? shouldn't this be "/" ???? XXX 148cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "bar.c" --> "" 149cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 150cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8 getPathDir(void) const; 151cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 152cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 153cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Retrieve the front (root dir) component. Optionally also return the 154cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * remaining components. 155cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 156cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "/tmp/foo/bar.c" --> "tmp" (remain = "foo/bar.c") 157cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "/tmp" --> "tmp" (remain = "") 158cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "bar.c" --> "bar.c" (remain = "") 159cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 160cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8 walkPath(String8* outRemains = NULL) const; 161cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 162cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 163cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Return the filename extension. This is the last '.' and up to 164cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * four characters that follow it. The '.' is included in case we 165cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * decide to expand our definition of what constitutes an extension. 166cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 167cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "/tmp/foo/bar.c" --> ".c" 168cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "/tmp" --> "" 169cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "/tmp/foo.bar/baz" --> "" 170cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "foo.jpeg" --> ".jpeg" 171cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "foo." --> "" 172cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 173cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8 getPathExtension(void) const; 174cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 175cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 176cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Return the path without the extension. Rules for what constitutes 177cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * an extension are described in the comment for getPathExtension(). 178cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 179cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * "/tmp/foo/bar.c" --> "/tmp/foo/bar" 180cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 181cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8 getBasePath(void) const; 182cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 183cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 184cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Add a component to the pathname. We guarantee that there is 185cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * exactly one path separator between the old path and the new. 186cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * If there is no existing name, we just copy the new name in. 187cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 188cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * If leaf is a fully qualified path (i.e. starts with '/', it 189cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * replaces whatever was there before. 190cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 191cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8& appendPath(const char* leaf); 192cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8& appendPath(const String8& leaf) { return appendPath(leaf.string()); } 193cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 194cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 195cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Like appendPath(), but does not affect this string. Returns a new one instead. 196cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 197cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8 appendPathCopy(const char* leaf) const 198cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project { String8 p(*this); p.appendPath(leaf); return p; } 199cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8 appendPathCopy(const String8& leaf) const { return appendPathCopy(leaf.string()); } 200cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 201cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project /* 202cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Converts all separators in this string to /, the default path separator. 203cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * 204cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * If the default OS separator is backslash, this converts all 205cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * backslashes to slashes, in-place. Otherwise it does nothing. 206cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project * Returns self. 207cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project */ 208cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project String8& convertToResPath(); 209cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 210cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectprivate: 211cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project status_t real_append(const char* other, size_t numChars); 212cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project char* find_extension(void) const; 213cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 214cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project const char* mString; 215cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project}; 216cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 217cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const String16& val); 218cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 219cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 220cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// No user servicable parts below. 221cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 222cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline int compare_type(const String8& lhs, const String8& rhs) 223cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 224cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return lhs.compare(rhs); 225cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 226cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 227cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline int strictly_order_type(const String8& lhs, const String8& rhs) 228cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 229cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return compare_type(lhs, rhs) < 0; 230cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 231cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 232cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline const char* String8::string() const 233cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 234cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return mString; 235cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 236cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 237cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline size_t String8::length() const 238cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 239cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return SharedBuffer::sizeFromData(mString)-1; 240cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 241cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 242cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline size_t String8::size() const 243cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 244cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return length(); 245cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 246cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 24748da31b735ebbc6a00c4e9fe9631f4af79e2c9dfJeff Browninline bool String8::isEmpty() const 24848da31b735ebbc6a00c4e9fe9631f4af79e2c9dfJeff Brown{ 24948da31b735ebbc6a00c4e9fe9631f4af79e2c9dfJeff Brown return length() == 0; 25048da31b735ebbc6a00c4e9fe9631f4af79e2c9dfJeff Brown} 25148da31b735ebbc6a00c4e9fe9631f4af79e2c9dfJeff Brown 252cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline size_t String8::bytes() const 253cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 254cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return SharedBuffer::sizeFromData(mString)-1; 255cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 256cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 257cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline const SharedBuffer* String8::sharedBuffer() const 258cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 259cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return SharedBuffer::bufferFromData(mString); 260cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 261cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 262cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline String8& String8::operator=(const String8& other) 263cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 264cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project setTo(other); 265cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *this; 266cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 267cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 268cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline String8& String8::operator=(const char* other) 269cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 270cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project setTo(other); 271cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *this; 272cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 273cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 274cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline String8& String8::operator+=(const String8& other) 275cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 276cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project append(other); 277cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *this; 278cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 279cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 280cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline String8 String8::operator+(const String8& other) const 281cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 28223b4a0936f1ee11e587b7be9dc3bcae5b55d31cfKenny Root String8 tmp(*this); 283cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project tmp += other; 284cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return tmp; 285cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 286cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 287cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline String8& String8::operator+=(const char* other) 288cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 289cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project append(other); 290cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return *this; 291cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 292cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 293cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline String8 String8::operator+(const char* other) const 294cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 29523b4a0936f1ee11e587b7be9dc3bcae5b55d31cfKenny Root String8 tmp(*this); 296cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project tmp += other; 297cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return tmp; 298cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 299cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 300cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline int String8::compare(const String8& other) const 301cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 302cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other.mString); 303cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 304cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 305cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator<(const String8& other) const 306cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 307cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other.mString) < 0; 308cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 309cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 310cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator<=(const String8& other) const 311cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 312cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other.mString) <= 0; 313cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 314cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 315cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator==(const String8& other) const 316cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 3179d589aa0d63e1eb088b10f065ee7fb0765d2e285Brad Fitzpatrick return strcmp(mString, other.mString) == 0; 318cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 319cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 320cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator!=(const String8& other) const 321cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 322cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other.mString) != 0; 323cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 324cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 325cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator>=(const String8& other) const 326cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 327cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other.mString) >= 0; 328cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 329cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 330cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator>(const String8& other) const 331cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 332cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other.mString) > 0; 333cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 334cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 335cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator<(const char* other) const 336cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 337cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other) < 0; 338cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 339cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 340cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator<=(const char* other) const 341cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 342cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other) <= 0; 343cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 344cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 345cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator==(const char* other) const 346cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 347cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other) == 0; 348cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 349cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 350cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator!=(const char* other) const 351cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 352cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other) != 0; 353cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 354cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 355cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator>=(const char* other) const 356cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 357cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other) >= 0; 358cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 359cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 360cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline bool String8::operator>(const char* other) const 361cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 362cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return strcmp(mString, other) > 0; 363cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 364cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 365cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Projectinline String8::operator const char*() const 366cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project{ 367cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project return mString; 368cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project} 369cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 37044dad3e006e0a966d93473dde3d74b2b43555519Daisuke Miyakawa} // namespace android 371cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 372cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project// --------------------------------------------------------------------------- 373cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project 374cbb1011c95e0c25c29e40e203a6a31bccd029da3The Android Open Source Project#endif // ANDROID_STRING8_H 375