本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
cocos2d-x节点(b2GrowableStack.h)API
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
//可增长的协议栈,和出栈入栈操作
///cocos2d-x-3.0alpha0/external/Box2D/Common //可增长的协议栈,和出栈入栈操作 #ifndef B2_GROWABLE_STACK_H #define B2_GROWABLE_STACK_H #include <Box2D/Common/b2Settings.h> #include <cstring> /// 这是一个可增长的后进先出栈它的初始容量为 N. /// 如果栈大小超过初始容量,则在堆中增加堆栈的大小。 template <typename T, int32 N> class b2GrowableStack { public: // 栈构造函数,初始化相关数据 b2GrowableStack() { m_stack = m_array; m_count = 0; m_capacity = N; } //栈析构函数,释放相关内存 ~b2GrowableStack() { if (m_stack != m_array) { b2Free(m_stack); m_stack = NULL; } } // 进栈操作 // * 参数说明:element :进栈元素 void Push(const T& element) { //栈已满 if (m_count == m_capacity) { //获取栈头指针并保存到old中 T* old = m_stack; //将栈的容量扩充到原来的2倍 m_capacity *= 2; //申请内存,并保存到m_stack中 m_stack = (T*)b2Alloc(m_capacity * sizeof(T)); //将原来的内容整体拷贝到m_stack中去 std::memcpy(m_stack, old, m_count * sizeof(T)); if (old != m_array) { //释放old指向的内存 b2Free(old); } } //进栈,并将元素个数自加 m_stack[m_count] = element; ++m_count; } // 出栈操作 // * 参数说明:(void) // * 返 回 值:返回最近进入栈的值 T Pop() { //验证元素个数的有效性 b2Assert(m_count > 0); //元素个数自减,并出栈 --m_count; return m_stack[m_count]; } //获取栈中元素的个数 int32 GetCount() { return m_count; } private: T* m_stack; //栈头指针 T m_array[N]; //辅助数组 int32 m_count; //元素的数量 int32 m_capacity; //栈的容量 }; #endif