//===- llvm/ADT/SmallString.h - 'Normally small' strings --------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file was developed by Chris Lattner and is distributed under // the University of Illinois Open Source License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines the SmallString class. // //===----------------------------------------------------------------------===// #ifndef LLVM_ADT_SMALLSTRING_H #define LLVM_ADT_SMALLSTRING_H #include "llvm/ADT/SmallVector.h" #include <cstring> namespace llvm { /// SmallString - A SmallString is just a SmallVector with methods and accessors /// that make it work better as a string (e.g. operator+ etc). template<unsigned InternalLen> class SmallString : public SmallVector<char, InternalLen> { public: // Default ctor - Initialize to empty. SmallString() {} // Initialize with a range. template<typename ItTy> SmallString(ItTy S, ItTy E) : SmallVector<char, InternalLen>(S, E) {} // Copy ctor. SmallString(const SmallString &RHS) : SmallVector<char, InternalLen>(RHS) {} // Extra methods. const char *c_str() const { SmallString *This = const_cast<SmallString*>(this); // Ensure that there is a \0 at the end of the string. This->reserve(this->size()+1); This->End[0] = 0; return this->begin(); } // Extra operators. SmallString &operator+=(const char *RHS) { this->append(RHS, RHS+strlen(RHS)); return *this; } SmallString &operator+=(char C) { this->push_back(C); return *this; } }; } #endif