Macaulay2 Engine
Loading...
Searching...
No Matches
MemoryBlock.hpp
Go to the documentation of this file.
1#ifndef __memory_block_hpp__
2#define __memory_block_hpp__
3
36
37#include <memtailor/Arena.h> // for Arena
38#include <iostream> // for operator<<, endl, basic_ostream, cout
39#include <utility> // for pair
40
57{
58public:
59 MemoryBlock() { mArena = new memt::Arena; }
60 ~MemoryBlock() { delete mArena; }
61 //MemoryBlock(MemoryBlock&& source) : mArena(std::move(source.mArena)) {}
62
63 //MemoryBlock& operator=(MemoryBlock&& source) {
64 // mArena = std::move(source.mArena);
65 // return (*this);
66 //}
67
68 template<typename T>
69 std::pair<T*, T*> allocateArray(size_t nelems)
70 {
71 return mArena->allocArrayNoCon<T>(nelems);
72 }
73
74 template<typename T, typename MutexType>
75 std::pair<T*, T*> safeAllocateArray(size_t nelems, MutexType& mutex)
76 {
77 typename MutexType::scoped_lock myLock(mutex);
78 return mArena->allocArrayNoCon<T>(nelems);
79 }
80
81 template<typename T>
82 std::pair<T*, T*> shrinkLastAllocate(T* begin, T* end, T* newtop)
83 {
84 mArena->freeTopArray(begin, end);
85 std::pair<T*, T*> result = mArena->allocArrayNoCon<T>(newtop - begin);
86 if (result.first != begin) std::cout << "ooops: location changed" << std::endl;
87 return result;
88 }
89
90 template<typename T>
92 {
93 mArena->freeTopArray(begin,end);
94 }
95
97 {
98 mArena->freeAllAllocs();
99 }
100
101 void swap(MemoryBlock& source) {
102 memt::Arena* temp = mArena;
103 mArena = source.mArena;
104 source.mArena = temp;
105 }
106
107 size_t getMemoryUsedInBytes() { return mArena->getMemoryUse(); }
108
109private:
110 memt::Arena* mArena;
111};
112
113#endif
114
115// Local Variables:
116// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
117// indent-tabs-mode: nil
118// End:
void freeTopArray(T *begin, T *end)
std::pair< T *, T * > safeAllocateArray(size_t nelems, MutexType &mutex)
std::pair< T *, T * > shrinkLastAllocate(T *begin, T *end, T *newtop)
size_t getMemoryUsedInBytes()
void deallocateAll()
memt::Arena * mArena
void swap(MemoryBlock &source)
std::pair< T *, T * > allocateArray(size_t nelems)
VALGRIND_MAKE_MEM_DEFINED & result(result)
TermIterator< Nterm > begin(Nterm *ptr)
Definition ringelem.cpp:4
TermIterator< Nterm > end(Nterm *)
Definition ringelem.cpp:5
#define T
Definition table.c:13