SmallString.h revision 703f5291c4f7199a95274df5e3381b36f8faf38c
1dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//===- llvm/ADT/SmallString.h - 'Normally small' strings --------*- C++ -*-===// 2dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// 3dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// The LLVM Compiler Infrastructure 4dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// 5dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// This file was developed by Chris Lattner and is distributed under 6dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// the University of Illinois Open Source 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" 18dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#include <cstring> 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 30dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Initialize with a range. 31dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner template<typename ItTy> 32dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner SmallString(ItTy S, ItTy E) : SmallVector<char, InternalLen>(S, E) {} 33dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 34dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Copy ctor. 35dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner SmallString(const SmallString &RHS) : SmallVector<char, InternalLen>(RHS) {} 36dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 37dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 38dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Extra methods. 39dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner const char *c_str() const { 40dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner SmallString *This = const_cast<SmallString*>(this); 41dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Ensure that there is a \0 at the end of the string. 42dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner This->reserve(this->size()+1); 43dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner This->End[0] = 0; 44dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner return this->begin(); 45dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner } 46dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 47dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner // Extra operators. 48dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner SmallString &operator+=(const char *RHS) { 49dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner this->append(RHS, RHS+strlen(RHS)); 50dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner return *this; 51dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner } 52703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner SmallString &operator+=(char C) { 53703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner this->push_back(C); 54703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner return *this; 55703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner } 56703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner 57dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner}; 58dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 59dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 60dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner} 61dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner 62dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#endif 63