SmallString.h revision 39db3439bfcdca4073dd513879f8ce12ee8c593b
1dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//===- llvm/ADT/SmallString.h - 'Normally small' strings --------*- C++ -*-===//
2dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//
3dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//                     The LLVM Compiler Infrastructure
4dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//
57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// This file is distributed under the University of Illinois Open Source
67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// License. See LICENSE.TXT for details.
7dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//
8dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//===----------------------------------------------------------------------===//
9dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//
10dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// This file defines the SmallString class.
11dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//
12dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//===----------------------------------------------------------------------===//
13dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
14dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#ifndef LLVM_ADT_SMALLSTRING_H
15dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#define LLVM_ADT_SMALLSTRING_H
16dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
17dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#include "llvm/ADT/SmallVector.h"
1804087d069a17265b964b30e8210262bbdbc4fbecDaniel Dunbar#include "llvm/ADT/StringRef.h"
190861d1fa5c1c8ca2adb8af1df0b3fce8f6d3ba5bArgyrios Kyrtzidis#include "llvm/Support/DataTypes.h"
20dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#include <cstring>
21dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
22dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnernamespace llvm {
23dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
24dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner/// SmallString - A SmallString is just a SmallVector with methods and accessors
25dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner/// that make it work better as a string (e.g. operator+ etc).
26dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnertemplate<unsigned InternalLen>
27dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnerclass SmallString : public SmallVector<char, InternalLen> {
28dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnerpublic:
29dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  // Default ctor - Initialize to empty.
30dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  SmallString() {}
31dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
32dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  // Initialize with a range.
33dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  template<typename ItTy>
34dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  SmallString(ItTy S, ItTy E) : SmallVector<char, InternalLen>(S, E) {}
353a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman
36dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  // Copy ctor.
37dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  SmallString(const SmallString &RHS) : SmallVector<char, InternalLen>(RHS) {}
38dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
393a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman
40dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  // Extra methods.
4104087d069a17265b964b30e8210262bbdbc4fbecDaniel Dunbar  StringRef str() const { return StringRef(this->begin(), this->size()); }
4204087d069a17265b964b30e8210262bbdbc4fbecDaniel Dunbar
43dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  // Extra operators.
4439db3439bfcdca4073dd513879f8ce12ee8c593bDaniel Dunbar  const SmallString &operator=(StringRef RHS) {
450fbdfc3664830e8387c13bf817c44e8b71085142Chris Lattner    this->clear();
460fbdfc3664830e8387c13bf817c44e8b71085142Chris Lattner    return *this += RHS;
470fbdfc3664830e8387c13bf817c44e8b71085142Chris Lattner  }
483a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman
4939db3439bfcdca4073dd513879f8ce12ee8c593bDaniel Dunbar  SmallString &operator+=(StringRef RHS) {
5039db3439bfcdca4073dd513879f8ce12ee8c593bDaniel Dunbar    this->append(RHS.begin(), RHS.end());
51dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner    return *this;
52dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  }
53703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner  SmallString &operator+=(char C) {
54703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner    this->push_back(C);
55703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner    return *this;
56703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner  }
57dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner};
583a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman
593a54b3dc87a581c203b18050b4f787b4ca28a12cMisha Brukman
60dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner}
61dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
62dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#endif
63