Sleeping Wombat Common Library  0.50.0
swCommonLibrary
MemoryChunk.h
1 #pragma once
2 
4 
5 #include <vector>
6 
9 {
10 private:
11 protected:
12  int8* m_memory;
13  uint32 m_size;
14 public:
17  : m_memory( nullptr ),
18  m_size( 0 )
19  {}
20 
22  MemoryChunk( int8*&& dataPointer, uint32 dataSize )
23  : m_memory( dataPointer ),
24  m_size( dataSize )
25  {}
27  MemoryChunk( uint32 dataSize )
28  : m_memory( new int8[dataSize] ),
29  m_size( dataSize )
30  {}
31 
32  //template<typename Type>
33  //MemoryChunk( std::vector<Type>&& vector )
34  //{
35  // //vector.
36  //}
37 
40  {
41  delete[] m_memory;
42  }
43 
44  MemoryChunk& operator=( const MemoryChunk& ) = delete;
45  MemoryChunk( const MemoryChunk& ) = delete;
46 
48  {
49  m_memory = chunk.m_memory;
50  m_size = chunk.m_size;
51  chunk.m_memory = nullptr;
52  chunk.m_size = 0;
53  }
54 
56  {
57  if( &chunk != this )
58  {
59  delete[] m_memory;
60  m_memory = chunk.m_memory;
61  m_size = chunk.m_size;
62  chunk.m_size = 0;
63  chunk.m_memory = nullptr;
64  }
65  return *this;
66  }
67 
69  template<typename Type>
70  inline Type* GetMemory () { return reinterpret_cast<Type*>( m_memory ); }
71 
73  template<typename Type>
74  inline const Type* GetMemory () const { return reinterpret_cast<Type*>( m_memory ); }
75 
76  inline uint32 GetMemorySize () const { return m_size; }
77 
82  template<typename Type>
83  inline Type& Get ( uint32 index )
84  { return reinterpret_cast<Type*>( m_memory )[ index ]; }
85 
89  template<typename Type>
90  inline uint32 Count ()
91  { return GetMemorySize() / sizeof( Type ); }
92 
93  inline bool IsNull () const { return !m_memory; }
94 
100  inline void MemoryCopy ( const int8* dataPointer, uint32 dataSize )
101  {
102  if( m_memory )
103  delete[] m_memory;
104 
105  m_memory = new int8[ dataSize ];
106  memcpy( m_memory, dataPointer, dataSize );
107  m_size = dataSize;
108  }
109 
110 };
111 
112 
MemoryChunk(uint32 dataSize)
alokuje obszar pamięciu o podanym rozmiarze, nie inicjując go.
Definition: MemoryChunk.h:27
MemoryChunk(int8 *&&dataPointer, uint32 dataSize)
Przejmuje na własność podany obszar pamięci.
Definition: MemoryChunk.h:22
bool IsNull() const
Sprawdza czy MemoryChunk ma zawartość.
Definition: MemoryChunk.h:93
Klasa przechowuje pamięć o dowolnym przeznaczeniu.
Definition: MemoryChunk.h:8
MemoryChunk & operator=(MemoryChunk &&chunk)
Definition: MemoryChunk.h:55
~MemoryChunk()
Definition: MemoryChunk.h:39
Plik zawiera definicje podstawowych typów zmiennych.
uint32 GetMemorySize() const
Zwraca rozmiar pamięci przechowywanej w obiekcie.
Definition: MemoryChunk.h:76
const Type * GetMemory() const
Zwraca otypowany wskaźnik na pamięć obiektu.
Definition: MemoryChunk.h:74
Type * GetMemory()
Zwraca otypowany wskaźnik na pamięć obiektu.
Definition: MemoryChunk.h:70
uint32 Count()
Zwraca liczbę elementów w buforze o typie podanym w parametrze szablonu.
Definition: MemoryChunk.h:90
MemoryChunk(MemoryChunk &&chunk)
Definition: MemoryChunk.h:47
Type & Get(uint32 index)
Zwraca referencję na obiekt w tablicy pod podanym indeksem.
Definition: MemoryChunk.h:83
MemoryChunk & operator=(const MemoryChunk &)=delete
Przypisanie obiektów nie ma sensu, bo może prowadzić do dwukrotnego zwalniania pamięci.
MemoryChunk()
Tworzy pusty obszar pamięci.
Definition: MemoryChunk.h:16
void MemoryCopy(const int8 *dataPointer, uint32 dataSize)
Kopiuje podany obszar pamięci.
Definition: MemoryChunk.h:100