SmallString.h revision 703f5291c4f7199a95274df5e3381b36f8faf38c
1dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//===- llvm/ADT/SmallString.h - 'Normally small' strings --------*- C++ -*-===//
2dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//
3dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//                     The LLVM Compiler Infrastructure
4dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner//
5dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// This file was developed by Chris Lattner and is distributed under
6dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner// the University of Illinois Open Source 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"
18dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#include <cstring>
19dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
20dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnernamespace llvm {
21dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
22dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner/// SmallString - A SmallString is just a SmallVector with methods and accessors
23dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner/// that make it work better as a string (e.g. operator+ etc).
24dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnertemplate<unsigned InternalLen>
25dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnerclass SmallString : public SmallVector<char, InternalLen> {
26dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattnerpublic:
27dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  // Default ctor - Initialize to empty.
28dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  SmallString() {}
29dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
30dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  // Initialize with a range.
31dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  template<typename ItTy>
32dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  SmallString(ItTy S, ItTy E) : SmallVector<char, InternalLen>(S, E) {}
33dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
34dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  // Copy ctor.
35dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  SmallString(const SmallString &RHS) : SmallVector<char, InternalLen>(RHS) {}
36dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
37dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
38dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  // Extra methods.
39dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  const char *c_str() const {
40dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner    SmallString *This = const_cast<SmallString*>(this);
41dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner    // Ensure that there is a \0 at the end of the string.
42dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner    This->reserve(this->size()+1);
43dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner    This->End[0] = 0;
44dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner    return this->begin();
45dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  }
46dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
47dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  // Extra operators.
48dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  SmallString &operator+=(const char *RHS) {
49dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner    this->append(RHS, RHS+strlen(RHS));
50dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner    return *this;
51dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner  }
52703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner  SmallString &operator+=(char C) {
53703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner    this->push_back(C);
54703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner    return *this;
55703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner  }
56703f5291c4f7199a95274df5e3381b36f8faf38cChris Lattner
57dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner};
58dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
59dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
60dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner}
61dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner
62dd94c8d6b2afb9c33c364ac8f0c8f8ed5d4c04a0Chris Lattner#endif
63