Newer
Older
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
/*
* PtrMemory.hpp
*
* Created on: Apr 15, 2015
* Author: Pietro Incardona
*/
#ifndef PTRMEMORY_HPP_
#define PTRMEMORY_HPP_
/**
* \brief This class give memory from a preallocated memory, memory destruction is not performed
*
* Useful to shape pieces of memory
*
* Usage:
*
* void * ptr = new int[1000]
*
* PtrMemory m = new PtrMemory(ptr,1000);
*
* m.allocate();
* int * ptr = m.getPointer();
* *ptr[999] = 1000;
* ....
*
* delete[] ptr;
*
*/
#include "config.h"
#include "memory.hpp"
#include <cstddef>
#include <cstdint>
#include <iostream>
class PtrMemory : public memory
{
//! Size of the pointed memory
size_t spm;
//! Pointed memory
void * dm;
//! Reference counter
long int ref_cnt;
//! copy from Pointer to Heap
bool copyFromPointer(const void * ptr, size_t sz);
//! Set alignment the memory will be aligned with this number
void setAlignment(size_t align);
public:
//! copy from same Heap to Heap
bool copyDeviceToDevice(const PtrMemory & m);
//! flush the memory
virtual bool flush() {return true;};
//! allocate memory
virtual bool allocate(size_t sz);
//! destroy memory
virtual void destroy();
//! copy memory
virtual bool copy(const memory & m);
//! resize the memory allocated
virtual bool resize(size_t sz);
//! get a readable pointer with the data
virtual void * getPointer();
//! get a readable pointer with the data
virtual const void * getPointer() const;
//! get a readable pointer with the data
virtual void * getDevicePointer();
//! Do nothing
virtual void deviceToHost(){};
//! Do nothing
virtual void hostToDevice(){};
//! Do nothing
virtual void deviceToHost(size_t start, size_t stop) {};
//! Do nothing
virtual void hostToDevice(size_t start, size_t top) {};
/*! \brief fill memory with the selected byte
*
*
*/
virtual void fill(unsigned char c);
//! Increment the reference counter
virtual void incRef()
{ref_cnt++;}
//! Decrement the reference counter
virtual void decRef()
{ref_cnt--;}
//! Return the reference counter
virtual long int ref()
{
return ref_cnt;
}
/*! \brief Return true if the device and the host pointer are the same
*
* \return true if they are the same
*
*/
/*! \brief Allocated Memory is already initialized
*
* \return true
*
*/
bool isInitialized()
{
return true;
}
PtrMemory():spm(0),dm(NULL),ref_cnt(0)
{
};
//! Constructor, we choose a default alignment of 32 for avx
PtrMemory(void * ptr, size_t sz):spm(sz),dm(ptr),ref_cnt(0)