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