SmallString.h revision 965841cfe4de695fc56cab4821fd7e032ff85b83
1dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//===- llvm/ADT/SmallString.h - 'Normally small' strings --------*- C++ -*-===// 2dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// 3dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// The LLVM Compiler Infrastructure 4dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// 57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// This file is distributed under the University of Illinois Open Source 67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// License. See LICENSE.TXT for details. 7dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// 8dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//===----------------------------------------------------------------------===// 9dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// 10dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// This file defines the SmallString class. 11dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// 12dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//===----------------------------------------------------------------------===// 13dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 14dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#ifndef LLVM_ADT_SMALLSTRING_H 15dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#define LLVM_ADT_SMALLSTRING_H 16dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 17dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#include "llvm/ADT/SmallVector.h" 1804087d069a17265b964b30e8210262bbdbc4fbecDaniel Dunbar#include "llvm/ADT/StringRef.h" 19dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 20dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnernamespace llvm { 21dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 22dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner/// SmallString - A SmallString is just a SmallVector with methods and accessors 23dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner/// that make it work better as a string (e.g. operator+ etc). 24dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnertemplate<unsigned InternalLen> 25dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnerclass SmallString : public SmallVector<char, InternalLen> { 26dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnerpublic: 27dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Default ctor - Initialize to empty. 28dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner SmallString() {} 29dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 30965841cfe4de695fc56cab4821fd7e032ff85b83Michael J. Spencer // Initialize from a StringRef. 31965841cfe4de695fc56cab4821fd7e032ff85b83Michael J. Spencer SmallString(StringRef S) : SmallVector<char, InternalLen>(S.begin(), S.end()) {} 32965841cfe4de695fc56cab4821fd7e032ff85b83Michael J. Spencer 33dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Initialize with a range. 34dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner template<typename ItTy> 35dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner SmallString(ItTy S, ItTy E) : SmallVector<char, InternalLen>(S, E) {} 363a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman 37dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Copy ctor. 38dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner SmallString(const SmallString &RHS) : SmallVector<char, InternalLen>(RHS) {} 39dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 403a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman 41dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Extra methods. 4204087d069a17265b964b30e8210262bbdbc4fbecDaniel Dunbar StringRef str() const { return StringRef(this->begin(), this->size()); } 4304087d069a17265b964b30e8210262bbdbc4fbecDaniel Dunbar 4458fe86dc0ecb7efff01abe2b0024a6a53ebb2c81Michael J. Spencer // TODO: Make this const, if it's safe... 4558fe86dc0ecb7efff01abe2b0024a6a53ebb2c81Michael J. Spencer const char* c_str() { 4658fe86dc0ecb7efff01abe2b0024a6a53ebb2c81Michael J. Spencer this->push_back(0); 4758fe86dc0ecb7efff01abe2b0024a6a53ebb2c81Michael J. Spencer this->pop_back(); 4858fe86dc0ecb7efff01abe2b0024a6a53ebb2c81Michael J. Spencer return this->data(); 4958fe86dc0ecb7efff01abe2b0024a6a53ebb2c81Michael J. Spencer } 5058fe86dc0ecb7efff01abe2b0024a6a53ebb2c81Michael J. Spencer 51983c7fe847dd3f46945f0117ab19345b9c68e88fDaniel Dunbar // Implicit conversion to StringRef. 52983c7fe847dd3f46945f0117ab19345b9c68e88fDaniel Dunbar operator StringRef() const { return str(); } 53983c7fe847dd3f46945f0117ab19345b9c68e88fDaniel Dunbar 54dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Extra operators. 5539db3439bfcdca4073dd513879f8ce12ee8c593bDaniel Dunbar const SmallString &operator=(StringRef RHS) { 560fbdfc3664830e8387c13bf817c44e8b71085142Chris Lattner this->clear(); 570fbdfc3664830e8387c13bf817c44e8b71085142Chris Lattner return *this += RHS; 580fbdfc3664830e8387c13bf817c44e8b71085142Chris Lattner } 593a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman 6039db3439bfcdca4073dd513879f8ce12ee8c593bDaniel Dunbar SmallString &operator+=(StringRef RHS) { 6139db3439bfcdca4073dd513879f8ce12ee8c593bDaniel Dunbar this->append(RHS.begin(), RHS.end()); 62dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner return *this; 63dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner } 64703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner SmallString &operator+=(char C) { 65703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner this->push_back(C); 66703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner return *this; 67703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner } 68dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner}; 693a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman 70dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner} 71dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 72dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#endif 73