File size: 1,101 Bytes
36ceee4 |
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 71 72 73 74 75 76 77 78 |
/*
* MemPool.h
*
* Created on: 28 Oct 2015
* Author: hieu
*/
#pragma once
#include <algorithm>
#include <iostream>
#include <vector>
#include <stdint.h>
#include <stdlib.h>
#include <limits>
#include <iostream>
namespace Moses2
{
class MemPool
{
struct Page {
uint8_t *mem;
uint8_t *end;
size_t size;
Page() = delete;
Page(std::size_t size);
~Page();
};
public:
MemPool(std::size_t initSize = 10240);
~MemPool();
uint8_t* Allocate(std::size_t size);
template<typename T>
T *Allocate() {
uint8_t *ret = Allocate(sizeof(T));
return (T*) ret;
}
template<typename T>
T *Allocate(size_t num) {
size_t size = sizeof(T);
size_t m = size % 16;
size += m;
uint8_t *ret = Allocate(size * num);
return (T*) ret;
}
// re-use pool
void Reset();
size_t Size();
private:
uint8_t *More(std::size_t size);
std::vector<Page*> m_pages;
size_t m_currSize;
size_t m_currPage;
uint8_t *current_;
// no copying
MemPool(const MemPool &) = delete;
MemPool &operator=(const MemPool &) = delete;
};
}
|