| //===- 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 |