From f2ca1d3b19ca5b7de3ee41360740b0dd8d3dbc08 Mon Sep 17 00:00:00 2001 From: Pietro Incardona <incardon@mpi-cbg.de> Date: Wed, 22 Apr 2015 18:43:04 +0200 Subject: [PATCH] Add PtrMemory.hpp --- src/memory/PtrMemory.hpp | 127 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/memory/PtrMemory.hpp diff --git a/src/memory/PtrMemory.hpp b/src/memory/PtrMemory.hpp new file mode 100644 index 0000000..156739f --- /dev/null +++ b/src/memory/PtrMemory.hpp @@ -0,0 +1,127 @@ +/* + * 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> + +#ifdef MEMLEAK_CHECK +#include "Memleak_check.hpp" +#endif + +class PtrMemory : public memory +{ + //! Size of the pointed memory + size_t spm; + + //! Pointed memory + void * dm; + + //! Size of the memory + size_t sz; + + //! Reference counter + long int ref_cnt; + + //! copy from same Heap to Heap + bool copyDeviceToDevice(PtrMemory & m); + + //! copy from Pointer to Heap + bool copyFromPointer(void * ptr, size_t sz); + + //! Set alignment the memory will be aligned with this number + void setAlignment(size_t align); + +public: + + //! allocate memory + virtual bool allocate(size_t sz); + //! destroy memory + virtual void destroy(); + //! copy memory + virtual bool copy(memory & m); + //! the the size of the allocated memory + virtual size_t size(); + //! resize the memory allocated + virtual bool resize(size_t sz); + //! get a readable pointer with the data + virtual void * getPointer(); + + //! 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; + } + + // Default constructor + PtrMemory():spm(0),dm(NULL),sz(0),ref_cnt(0) + { +#ifdef MEMLEAK_CHECK + if (process_to_print == process_v_cl) + std::cout << "Creating PtrMemory: " << this << "\n"; +#endif + }; + + //! Constructor, we choose a default alignment of 32 for avx + PtrMemory(void * ptr, size_t sz):spm(sz),dm(ptr),sz(0),ref_cnt(0) + { +#ifdef MEMLEAK_CHECK + if (process_to_print == process_v_cl) + std::cout << "Creating PtrMemory: " << this << "\n"; +#endif + }; + + ~PtrMemory() + { +#ifdef MEMLEAK_CHECK + if (process_to_print == process_v_cl) + std::cout << "Delete PtrMemory: " << this << "\n"; +#endif + + if(ref_cnt == 0) + destroy(); + else + std::cerr << "Error: " << __FILE__ << " " << __LINE__ << " destroying a live object" << "\n"; + }; +}; + + +#endif /* PTRMEMORY_HPP_ */ -- GitLab