SmallString.h revision 983c7fe847dd3f46945f0117ab19345b9c68e88f
13bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//===- llvm/ADT/SmallString.h - 'Normally small' strings --------*- C++ -*-===// 23bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// 33bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// The LLVM Compiler Infrastructure 43bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// 53bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// This file is distributed under the University of Illinois Open Source 63bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// License. See LICENSE.TXT for details. 73bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// 83bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//===----------------------------------------------------------------------===// 93bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// 103bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// This file defines the SmallString class. 113bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// 123bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//===----------------------------------------------------------------------===// 133bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes 143bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes#ifndef LLVM_ADT_SMALLSTRING_H 153bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes#define LLVM_ADT_SMALLSTRING_H 163bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes 17bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman#include "llvm/ADT/SmallVector.h" 183bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes#include "llvm/ADT/StringRef.h" 193bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes 203bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopesnamespace llvm { 213bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes 223bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes/// SmallString - A SmallString is just a SmallVector with methods and accessors 23bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman/// that make it work better as a string (e.g. operator+ etc). 243bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopestemplate<unsigned InternalLen> 25bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedmanclass SmallString : public SmallVector<char, InternalLen> { 26bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedmanpublic: 273bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes // Default ctor - Initialize to empty. 283bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes SmallString() {} 293bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes 303bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes // Initialize with a range. 313bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes template<typename ItTy> 323bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes SmallString(ItTy S, ItTy E) : SmallVector<char, InternalLen>(S, E) {} 333bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes 343bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes // Copy ctor. 353bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes SmallString(const SmallString &RHS) : SmallVector<char, InternalLen>(RHS) {} 363bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes 373bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes 383bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes // Extra methods. 393bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes StringRef str() const { return StringRef(this->begin(), this->size()); } 403bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes 413bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes // Implicit conversion to StringRef. 423bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes operator StringRef() const { return str(); } 433bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes 443bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes const char *c_str() { 453bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes this->push_back(0); 46bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman this->pop_back(); 47bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman return this->data(); 48bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman } 49bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman 50bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman // Extra operators. 51bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman const SmallString &operator=(StringRef RHS) { 52bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman this->clear(); 53bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman return *this += RHS; 54bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman } 55bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman 56bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman SmallString &operator+=(StringRef RHS) { 57bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman this->append(RHS.begin(), RHS.end()); 58bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman return *this; 59bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman } 60bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman SmallString &operator+=(char C) { 61bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman this->push_back(C); 62bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman return *this; 63bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman } 64bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman}; 65bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman 66bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman} 67bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman 68bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman#endif 69bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman