summaryrefslogtreecommitdiff
path: root/core/dvector.cpp
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2017-01-07 18:25:37 -0300
committerJuan Linietsky <reduzio@gmail.com>2017-01-07 18:26:38 -0300
commit2ab83e1abbf5ee6d00e16056a9e9394114026f28 (patch)
tree7efbb375cc4d00d8e8589fcf1b6a1303bec5df2d /core/dvector.cpp
parent2a38a5eaa844043b846e03d6655f84caf8a31e74 (diff)
Memory pool vectors (DVector) have been enormously simplified in code, and renamed to PoolVector
Diffstat (limited to 'core/dvector.cpp')
-rw-r--r--core/dvector.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/core/dvector.cpp b/core/dvector.cpp
index 7caa198c4c..f6b5a5fcbf 100644
--- a/core/dvector.cpp
+++ b/core/dvector.cpp
@@ -30,3 +30,44 @@
Mutex* dvector_lock=NULL;
+PoolAllocator *MemoryPool::memory_pool=NULL;
+uint8_t *MemoryPool::pool_memory=NULL;
+size_t *MemoryPool::pool_size=NULL;
+
+
+MemoryPool::Alloc *MemoryPool::allocs=NULL;
+MemoryPool::Alloc *MemoryPool::free_list=NULL;
+uint32_t MemoryPool::alloc_count=0;
+uint32_t MemoryPool::allocs_used=0;
+Mutex *MemoryPool::alloc_mutex=NULL;
+
+size_t MemoryPool::total_memory=0;
+size_t MemoryPool::max_memory=0;
+
+
+void MemoryPool::setup(uint32_t p_max_allocs) {
+
+ allocs = memnew_arr( Alloc, p_max_allocs);
+ alloc_count = p_max_allocs;
+ allocs_used=0;
+
+ for(uint32_t i=0;i<alloc_count-1;i++) {
+
+ allocs[i].free_list=&allocs[i+1];
+ }
+
+ free_list=&allocs[0];
+
+ alloc_mutex = Mutex::create();
+
+}
+
+void MemoryPool::cleanup() {
+
+ memdelete_arr(allocs);
+ memdelete(alloc_mutex);
+
+ ERR_EXPLAINC("There are still MemoryPool allocs in use at exit!");
+ ERR_FAIL_COND(allocs_used>0);
+
+}