SmallString.h revision 39db3439bfcdca4073dd513879f8ce12ee8c593b
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" 190861d1fa5c1c8ca2adb8af1df0b3fce8f6d3ba5bArgyrios Kyrtzidis#include "llvm/Support/DataTypes.h" 20dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#include <cstring> 21dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 22dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnernamespace llvm { 23dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 24dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner/// SmallString - A SmallString is just a SmallVector with methods and accessors 25dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner/// that make it work better as a string (e.g. operator+ etc). 26dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnertemplate<unsigned InternalLen> 27dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnerclass SmallString : public SmallVector<char, InternalLen> { 28dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnerpublic: 29dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Default ctor - Initialize to empty. 30dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner SmallString() {} 31dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 32dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Initialize with a range. 33dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner template<typename ItTy> 34dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner SmallString(ItTy S, ItTy E) : SmallVector<char, InternalLen>(S, E) {} 353a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman 36dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Copy ctor. 37dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner SmallString(const SmallString &RHS) : SmallVector<char, InternalLen>(RHS) {} 38dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 393a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman 40dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Extra methods. 4104087d069a17265b964b30e8210262bbdbc4fbecDaniel Dunbar StringRef str() const { return StringRef(this->begin(), this->size()); } 4204087d069a17265b964b30e8210262bbdbc4fbecDaniel Dunbar 43dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Extra operators. 4439db3439bfcdca4073dd513879f8ce12ee8c593bDaniel Dunbar const SmallString &operator=(StringRef RHS) { 450fbdfc3664830e8387c13bf817c44e8b71085142Chris Lattner this->clear(); 460fbdfc3664830e8387c13bf817c44e8b71085142Chris Lattner return *this += RHS; 470fbdfc3664830e8387c13bf817c44e8b71085142Chris Lattner } 483a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman 4939db3439bfcdca4073dd513879f8ce12ee8c593bDaniel Dunbar SmallString &operator+=(StringRef RHS) { 5039db3439bfcdca4073dd513879f8ce12ee8c593bDaniel Dunbar this->append(RHS.begin(), RHS.end()); 51dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner return *this; 52dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner } 53703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner SmallString &operator+=(char C) { 54703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner this->push_back(C); 55703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner return *this; 56703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner } 57dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner}; 583a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman 593a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman 60dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner} 61dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 62dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#endif 63