summaryrefslogtreecommitdiffstats
path: root/src/ChunkData.h
diff options
context:
space:
mode:
authorTycho <work.tycho+git@gmail.com>2014-05-23 18:18:11 +0200
committerTycho <work.tycho+git@gmail.com>2014-05-23 18:18:11 +0200
commit8be3a8f7dc10dbc49dfcdeca572677ef1e00f714 (patch)
tree204743272c8948237a8322027510f5240bfdb71e /src/ChunkData.h
parentUse placement new to initalise objects (diff)
downloadcuberite-8be3a8f7dc10dbc49dfcdeca572677ef1e00f714.tar
cuberite-8be3a8f7dc10dbc49dfcdeca572677ef1e00f714.tar.gz
cuberite-8be3a8f7dc10dbc49dfcdeca572677ef1e00f714.tar.bz2
cuberite-8be3a8f7dc10dbc49dfcdeca572677ef1e00f714.tar.lz
cuberite-8be3a8f7dc10dbc49dfcdeca572677ef1e00f714.tar.xz
cuberite-8be3a8f7dc10dbc49dfcdeca572677ef1e00f714.tar.zst
cuberite-8be3a8f7dc10dbc49dfcdeca572677ef1e00f714.zip
Diffstat (limited to '')
-rw-r--r--src/ChunkData.h33
1 files changed, 22 insertions, 11 deletions
diff --git a/src/ChunkData.h b/src/ChunkData.h
index 9c852ee24..527c5b2ae 100644
--- a/src/ChunkData.h
+++ b/src/ChunkData.h
@@ -7,6 +7,8 @@
#include "ChunkDef.h"
+#include "AllocationPool.h"
+
#define CHUNK_SECTION_HEIGHT 16
#define CHUNK_SECTION_NUM (256 / CHUNK_SECTION_HEIGHT)
@@ -21,11 +23,14 @@ class cChunkData
{
public:
- cChunkData()
+ struct sChunkSection;
+
+ cChunkData(cAllocationPool<cChunkData::sChunkSection, 1600>& a_Pool) :
#if __cplusplus < 201103L
// auto_ptr style interface for memory management
- : IsOwner(true)
+ IsOwner(true),
#endif
+ m_Pool(a_Pool)
{
memset(m_Sections, 0, sizeof(m_Sections));
}
@@ -44,7 +49,8 @@ public:
#if __cplusplus < 201103L
// auto_ptr style interface for memory management
cChunkData(const cChunkData& other) :
- IsOwner(true)
+ IsOwner(true),
+ m_Pool(other.m_Pool)
{
for (int i = 0; i < CHUNK_SECTION_NUM; i++)
{
@@ -70,13 +76,15 @@ public:
m_Sections[i] = other.m_Sections[i];
}
other.IsOwner = false;
+ ASSERT(&m_Pool == &other.m_Pool);
}
return *this;
}
#else
// unique_ptr style interface for memory management
- cChunkData(cChunkData&& other)
+ cChunkData(cChunkData&& other) :
+ m_Pool(other.m_Pool)
{
for (int i = 0; i < CHUNK_SECTION_NUM; i++)
{
@@ -95,6 +103,7 @@ public:
m_Sections[i] = other.m_Sections[i];
other.m_Sections[i] = 0;
}
+ ASSERT(&m_Pool == &other.m_Pool);
}
return *this;
}
@@ -252,13 +261,6 @@ public:
void SetLight (const NIBBLETYPE * a_src);
void SetSkyLight (const NIBBLETYPE * a_src);
-private:
-
- #if __cplusplus < 201103L
- // auto_ptr style interface for memory management
- mutable bool IsOwner;
- #endif
-
struct sChunkSection {
BLOCKTYPE m_BlockTypes [CHUNK_SECTION_HEIGHT * 16 * 16] ;
NIBBLETYPE m_BlockMeta [CHUNK_SECTION_HEIGHT * 16 * 16 / 2];
@@ -266,12 +268,21 @@ private:
NIBBLETYPE m_BlockSkyLight[CHUNK_SECTION_HEIGHT * 16 * 16 / 2];
};
+private:
+
+ #if __cplusplus < 201103L
+ // auto_ptr style interface for memory management
+ mutable bool IsOwner;
+ #endif
+
sChunkSection *m_Sections[CHUNK_SECTION_NUM];
sChunkSection * Allocate() const;
void Free(sChunkSection * ptr) const;
void ZeroSection(sChunkSection * ptr) const;
+
+ cAllocationPool<cChunkData::sChunkSection, 1600>& m_Pool;
};