X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FSupport%2FAllocator.h;h=c0414f970a29533c80bebcbdddc1656594406df8;hb=6f2c64d70aad5328a843a6f6a6547ada69ead33b;hp=eab6d332c409d5d62fc0eff1a46a58923f989c18;hpb=7698252750b29bbd8de20f5404241953221470f4;p=oota-llvm.git diff --git a/include/llvm/Support/Allocator.h b/include/llvm/Support/Allocator.h index eab6d332c40..c0414f970a2 100644 --- a/include/llvm/Support/Allocator.h +++ b/include/llvm/Support/Allocator.h @@ -18,20 +18,25 @@ #include namespace llvm { - + class MallocAllocator { public: MallocAllocator() {} ~MallocAllocator() {} - + void Reset() {} void *Allocate(size_t Size, size_t /*Alignment*/) { return malloc(Size); } - + template T *Allocate() { return static_cast(malloc(sizeof(T))); } - - void Deallocate(void *Ptr) { free(Ptr); } + + template + T *Allocate(size_t Num) { + return static_cast(malloc(sizeof(T)*Num)); + } + + void Deallocate(const void *Ptr) { free(const_cast(Ptr)); } void PrintStats() const {} }; @@ -48,17 +53,35 @@ class BumpPtrAllocator { public: BumpPtrAllocator(); ~BumpPtrAllocator(); - + void Reset(); void *Allocate(size_t Size, size_t Alignment); + /// Allocate space, but do not construct, one object. + /// template - T *Allocate() { + T *Allocate() { return static_cast(Allocate(sizeof(T),AlignOf::Alignment)); } - - void Deallocate(void * /*Ptr*/) {} + + /// Allocate space for an array of objects. This does not construct the + /// objects though. + template + T *Allocate(size_t Num) { + return static_cast(Allocate(Num * sizeof(T), AlignOf::Alignment)); + } + + /// Allocate space for a specific count of elements and with a specified + /// alignment. + template + T *Allocate(size_t Num, size_t Alignment) { + // Round EltSize up to the specified alignment. + size_t EltSize = (sizeof(T)+Alignment-1)&(-Alignment); + return static_cast(Allocate(Num * EltSize, Alignment)); + } + + void Deallocate(const void * /*Ptr*/) {} void PrintStats() const; };