//===- 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/Support/DataTypes.h" #include 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 class SmallString : public SmallVector { public: // Default ctor - Initialize to empty. SmallString() {} // Initialize with a range. template SmallString(ItTy S, ItTy E) : SmallVector(S, E) {} // Copy ctor. SmallString(const SmallString &RHS) : SmallVector(RHS) {} // Extra methods. const char *c_str() const { SmallString *This = const_cast(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. const SmallString &operator=(const char *RHS) { this->clear(); return *this += RHS; } SmallString &operator+=(const char *RHS) { this->append(RHS, RHS+strlen(RHS)); return *this; } SmallString &operator+=(char C) { this->push_back(C); return *this; } SmallString &append_uint_32(uint32_t N) { char Buffer[20]; char *BufPtr = Buffer+20; if (N == 0) *--BufPtr = '0'; // Handle special case. while (N) { *--BufPtr = '0' + char(N % 10); N /= 10; } this->append(BufPtr, Buffer+20); return *this; } SmallString &append_uint(uint64_t N) { if (N == uint32_t(N)) return append_uint_32(uint32_t(N)); char Buffer[40]; char *BufPtr = Buffer+40; if (N == 0) *--BufPtr = '0'; // Handle special case... while (N) { *--BufPtr = '0' + char(N % 10); N /= 10; } this->append(BufPtr, Buffer+40); return *this; } SmallString &append_sint(int64_t N) { // TODO, wrong for minint64. if (N < 0) { this->push_back('-'); N = -N; } return append_uint(N); } }; } #endif