//
// The LLVM Compiler Infrastructure
//
-// This file was developed by Chris Lattner and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
#define LLVM_ADT_SMALLSTRING_H
#include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/DataTypes.h"
#include <cstring>
namespace llvm {
// 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.
const char *c_str() const {
SmallString *This = const_cast<SmallString*>(this);
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