|  | //===- llvm/ADT/SmallString.h - 'Normally small' strings --------*- C++ -*-===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file 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 "llvm/ADT/StringRef.h" | 
|  |  | 
|  | 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 from a StringRef. | 
|  | SmallString(StringRef S) : SmallVector<char, InternalLen>(S.begin(), S.end()) {} | 
|  |  | 
|  | // 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. | 
|  | StringRef str() const { return StringRef(this->begin(), this->size()); } | 
|  |  | 
|  | // TODO: Make this const, if it's safe... | 
|  | const char* c_str() { | 
|  | this->push_back(0); | 
|  | this->pop_back(); | 
|  | return this->data(); | 
|  | } | 
|  |  | 
|  | // Implicit conversion to StringRef. | 
|  | operator StringRef() const { return str(); } | 
|  |  | 
|  | // Extra operators. | 
|  | const SmallString &operator=(StringRef RHS) { | 
|  | this->clear(); | 
|  | return *this += RHS; | 
|  | } | 
|  |  | 
|  | SmallString &operator+=(StringRef RHS) { | 
|  | this->append(RHS.begin(), RHS.end()); | 
|  | return *this; | 
|  | } | 
|  | SmallString &operator+=(char C) { | 
|  | this->push_back(C); | 
|  | return *this; | 
|  | } | 
|  | }; | 
|  |  | 
|  | } | 
|  |  | 
|  | #endif |