SmallString.h revision 983c7fe847dd3f46945f0117ab19345b9c68e88f
13bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//===- llvm/ADT/SmallString.h - 'Normally small' strings --------*- C++ -*-===//
23bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//
33bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//                     The LLVM Compiler Infrastructure
43bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//
53bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// This file is distributed under the University of Illinois Open Source
63bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// License. See LICENSE.TXT for details.
73bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//
83bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//===----------------------------------------------------------------------===//
93bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//
103bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes// This file defines the SmallString class.
113bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//
123bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes//===----------------------------------------------------------------------===//
133bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes
143bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes#ifndef LLVM_ADT_SMALLSTRING_H
153bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes#define LLVM_ADT_SMALLSTRING_H
163bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes
17bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman#include "llvm/ADT/SmallVector.h"
183bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes#include "llvm/ADT/StringRef.h"
193bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes
203bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopesnamespace llvm {
213bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes
223bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes/// SmallString - A SmallString is just a SmallVector with methods and accessors
23bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman/// that make it work better as a string (e.g. operator+ etc).
243bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopestemplate<unsigned InternalLen>
25bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedmanclass SmallString : public SmallVector<char, InternalLen> {
26bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedmanpublic:
273bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  // Default ctor - Initialize to empty.
283bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  SmallString() {}
293bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes
303bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  // Initialize with a range.
313bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  template<typename ItTy>
323bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  SmallString(ItTy S, ItTy E) : SmallVector<char, InternalLen>(S, E) {}
333bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes
343bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  // Copy ctor.
353bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  SmallString(const SmallString &RHS) : SmallVector<char, InternalLen>(RHS) {}
363bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes
373bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes
383bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  // Extra methods.
393bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  StringRef str() const { return StringRef(this->begin(), this->size()); }
403bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes
413bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  // Implicit conversion to StringRef.
423bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  operator StringRef() const { return str(); }
433bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes
443bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes  const char *c_str() {
453bde6fe0df05558b89e7edfe48ac05da59beb81aBruno Cardoso Lopes    this->push_back(0);
46bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman    this->pop_back();
47bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman    return this->data();
48bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman  }
49bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman
50bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman  // Extra operators.
51bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman  const SmallString &operator=(StringRef RHS) {
52bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman    this->clear();
53bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman    return *this += RHS;
54bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman  }
55bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman
56bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman  SmallString &operator+=(StringRef RHS) {
57bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman    this->append(RHS.begin(), RHS.end());
58bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman    return *this;
59bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman  }
60bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman  SmallString &operator+=(char C) {
61bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman    this->push_back(C);
62bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman    return *this;
63bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman  }
64bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman};
65bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman
66bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman}
67bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman
68bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman#endif
69bd00a934c653fb1666fa7d18267644b4e9d14e5eEli Friedman