aboutsummaryrefslogtreecommitdiff
path: root/core/dvector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/dvector.cpp')
-rw-r--r--core/dvector.cpp43
1 files changed, 42 insertions, 1 deletions
diff --git a/core/dvector.cpp b/core/dvector.cpp
index fa0639913..f6b5a5fcb 100644
--- a/core/dvector.cpp
+++ b/core/dvector.cpp
@@ -5,7 +5,7 @@
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2007-2017 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
@@ -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);
+
+}