RioEngine  0.1
My first attempt to create a 3D WYSIWYG Game Engine
cautoreleasepool.cpp
Go to the documentation of this file.
1 //--------------------------------------------------------------- @License begins
2 // RioEngine: The late night Coke -without whores- debugging sessions
3 // 2012-2015 Leopoldo Lomas Flores. Torreon, Coahuila. MEXICO
4 // leopoldolomas [at] gmail
5 // www.rioengine.com
6 // www.leopoldolomas.info
7 // "You have a problem, you face it like a man."
8 //
9 // This is free and unencumbered software released into the public domain.
10 //
11 // Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
12 // software, either in source code form or as a compiled binary, for any purpose,
13 // commercial or non-commercial, and by any means.
14 //
15 // In jurisdictions that recognize copyright laws, the author or authors of this
16 // software dedicate any and all copyright interest in the software to the public
17 // domain. We make this dedication for the benefit of the public at large and to
18 // the detriment of our heirs and successors. We intend this dedication to be
19 // an overt act of relinquishment in perpetuity of all present and future
20 // rights to this software under copyright law.
21 //
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS
24 // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
26 // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //--------------------------------------------------------------- @License ends
29 
30 #include "misc/genericshelper.hpp"
31 #include "cautoreleasepool.h"
32 
33 //-----------------------------------------------------------------------------
34 
35 std::vector< std::vector<CObject*>* >* CAutoreleasePool::m_pools =
36  new std::vector< std::vector<CObject*>* >();
37 
38 //-----------------------------------------------------------------------------
39 
41 {
42  m_localPool = new std::vector<CObject*>();
43  m_pools->push_back(m_localPool);
44 }
45 
46 //-----------------------------------------------------------------------------
47 
49  RE_ASSERT(m_pools->size() > 0);
50  std::vector< CObject* >* current_pool = m_pools->at(m_pools->size() - 1);
51  current_pool->push_back(obj);
52 }
53 
54 //-----------------------------------------------------------------------------
55 
57  std::vector< CObject* >* current_pool = m_pools->at(m_pools->size() - 1);
58  if(current_pool->size() > 0) {
59  for(std::vector< CObject* >::iterator it = current_pool->begin();
60  it != current_pool->end();
61  ++it) {
62  SAFE_RELEASE(*it);
63  }
64  SAFE_RELEASE(current_pool);
65  m_localPool = new std::vector<CObject*>();
66  m_pools->at(m_pools->size() - 1) = m_localPool;
67  }
68 }
69 
70 //-----------------------------------------------------------------------------
71 
73  LOG("=========================================== Autorelease pools");
74  LOG("");
75 
76  int pos = 0;
77  for(std::vector< std::vector<CObject*>* >::iterator it = m_pools->begin();
78  it != m_pools->end();
79  ++it) {
80  pos++;
81  LOG("Pool position: %i", pos);
82  for(std::vector<CObject*>::iterator it2 = (*it)->begin();
83  it2 != (*it)->end();
84  ++it2) {
85  CObject* obj = *it2;
86  const char* name = obj->metaObject()->className();
87  LOG("Addr: %p -> Classname: %s -> Retain count: %u", obj, name, obj->retainCount());
88  LOG("-----");
89  }
90  }
91 
92  LOG("");
93  LOG("===========================================");
94 }
95 
96 //-----------------------------------------------------------------------------
97 
100 }
101 
102 //-----------------------------------------------------------------------------
103 
105  m_pools->pop_back();
107 }
#define LOG
Definition: macro.h:43
static void releasePools()
static void deleteVector(std::vector< T * > *vec)
std::vector< CObject * > * m_localPool
unsigned int retainCount() const
Definition: cobject.cpp:94
#define SAFE_RELEASE(x)
Definition: cobject.h:36
#define RE_ASSERT
Definition: macro.h:57
virtual void drain()
static std::vector< std::vector< CObject * > * > * m_pools
virtual void addObject(CObject *obj)