From 8147752976bda4499863c3db9feee760cf0b9015 Mon Sep 17 00:00:00 2001 From: Nick Kledzik Date: Wed, 5 Feb 2014 22:22:56 +0000 Subject: Fix layering StringRef copy using BumpPtrAllocator. Now to copy a string into a BumpPtrAllocator and get a StringRef to the copy: StringRef myCopy = myStr.copy(myAllocator); git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200885 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/ArrayRef.h | 8 ++++++++ include/llvm/ADT/StringRef.h | 8 ++++++++ include/llvm/Support/Allocator.h | 36 ------------------------------------ 3 files changed, 16 insertions(+), 36 deletions(-) (limited to 'include/llvm') diff --git a/include/llvm/ADT/ArrayRef.h b/include/llvm/ADT/ArrayRef.h index e5562c3683..c95889a187 100644 --- a/include/llvm/ADT/ArrayRef.h +++ b/include/llvm/ADT/ArrayRef.h @@ -12,6 +12,7 @@ #include "llvm/ADT/None.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/Support/Allocator.h" #include namespace llvm { @@ -120,6 +121,13 @@ namespace llvm { return Data[Length-1]; } + // copy - Allocate copy in BumpPtrAllocator and return ArrayRef to it. + ArrayRef copy(BumpPtrAllocator &Allocator) { + T *Buff = Allocator.Allocate(Length); + std::copy(begin(), end(), Buff); + return ArrayRef(Buff, Length); + } + /// equals - Check for element-wise equality. bool equals(ArrayRef RHS) const { if (Length != RHS.Length) diff --git a/include/llvm/ADT/StringRef.h b/include/llvm/ADT/StringRef.h index 2128f37dd3..a1d10c18d7 100644 --- a/include/llvm/ADT/StringRef.h +++ b/include/llvm/ADT/StringRef.h @@ -11,6 +11,7 @@ #define LLVM_ADT_STRINGREF_H #include "llvm/Support/type_traits.h" +#include "llvm/Support/Allocator.h" #include #include #include @@ -124,6 +125,13 @@ namespace llvm { return Data[Length-1]; } + // copy - Allocate copy in BumpPtrAllocator and return StringRef to it. + StringRef copy(BumpPtrAllocator &Allocator) { + char *S = Allocator.Allocate(Length); + std::copy(begin(), end(), S); + return StringRef(S, Length); + } + /// equals - Check for string equality, this is more efficient than /// compare() when the relative ordering of inequal strings isn't needed. bool equals(StringRef RHS) const { diff --git a/include/llvm/Support/Allocator.h b/include/llvm/Support/Allocator.h index 275086bffd..397f50fbe3 100644 --- a/include/llvm/Support/Allocator.h +++ b/include/llvm/Support/Allocator.h @@ -14,8 +14,6 @@ #ifndef LLVM_SUPPORT_ALLOCATOR_H #define LLVM_SUPPORT_ALLOCATOR_H -#include "llvm/ADT/ArrayRef.h" -#include "llvm/ADT/StringRef.h" #include "llvm/Support/AlignOf.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/MathExtras.h" @@ -181,40 +179,6 @@ public: void PrintStats() const; - - /// Allocate space and copy content into it. - void *allocateCopy(const void *Src, size_t Size, size_t Alignment=1) { - void *P = Allocate(Size, Alignment); - memcpy(P, Src, Size); - return P; - } - - /// Allocate space for an array of type T, and use std::copy() - /// to copy the array contents. - template - typename enable_if, T*>::type - allocateCopy(const T Src[], size_t Num) { - T *P = Allocate(Num); - std::copy(Src, &Src[Num], P); - return P; - } - - /// Copy a StringRef by allocating copy in BumpPtrAllocator. - StringRef allocateCopy(StringRef Str) { - size_t Length = Str.size(); - char *P = allocateCopy(Str.data(), Length); - return StringRef(P, Length); - } - - /// Copy a ArrayRef by allocating copy in BumpPtrAllocator. - template - typename enable_if, ArrayRef >::type - allocateCopy(ArrayRef Src) { - size_t Length = Src.size(); - T *P = allocateCopy(Src.data(), Length); - return makeArrayRef(P, Length); - } - /// Compute the total physical memory allocated by this allocator. size_t getTotalMemory() const; }; -- cgit v1.2.3