File: MemoryBlock.hpp

package info (click to toggle)
macaulay2 1.21%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 133,096 kB
  • sloc: cpp: 110,377; ansic: 16,306; javascript: 4,193; makefile: 3,821; sh: 3,580; lisp: 764; yacc: 590; xml: 177; python: 140; perl: 114; lex: 65; awk: 3
file content (70 lines) | stat: -rw-r--r-- 1,712 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#ifndef __memory_block_hpp__
#define __memory_block_hpp__

#include <memtailor/Arena.h>  // for Arena
#include <iostream>           // for operator<<, endl, basic_ostream, cout
#include <utility>            // for pair

class MemoryBlock
{
public:
  MemoryBlock() { mArena = new memt::Arena; }
  ~MemoryBlock() { delete mArena; }
  //MemoryBlock(MemoryBlock&& source) : mArena(std::move(source.mArena)) {}

  //MemoryBlock& operator=(MemoryBlock&& source) {
    // mArena = std::move(source.mArena);
    // return (*this);
  //}

  template<typename T>
  std::pair<T*, T*> allocateArray(size_t nelems)
  {
    return mArena->allocArrayNoCon<T>(nelems);
  }

  template<typename T, typename MutexType>
  std::pair<T*, T*> safeAllocateArray(size_t nelems, MutexType& mutex)
  {
    typename MutexType::scoped_lock myLock(mutex);
    return mArena->allocArrayNoCon<T>(nelems);
  }

  template<typename T>
  std::pair<T*, T*> shrinkLastAllocate(T* begin, T* end, T* newtop)
  {
    mArena->freeTopArray(begin, end);
    std::pair<T*, T*> result = mArena->allocArrayNoCon<T>(newtop - begin);
    if (result.first != begin) std::cout << "ooops: location changed" << std::endl;
    return result;
  }

  template<typename T>
  void freeTopArray(T* begin, T*end)
  {
    mArena->freeTopArray(begin,end);
  }

  void deallocateAll()
  {
    mArena->freeAllAllocs();
  }

  void swap(MemoryBlock& source) {
    memt::Arena* temp = mArena;
    mArena = source.mArena;
    source.mArena = temp;
  }

  size_t getMemoryUsedInBytes() { return mArena->getMemoryUse(); } 

private:
  memt::Arena* mArena;
};
  
#endif

// Local Variables:
// compile-command: "make -C $M2BUILDDIR/Macaulay2/e  "
// indent-tabs-mode: nil
// End: