cocos2d-x节点(b2GrowableStack.h)API

来源:互联网 发布:控制反转和依赖注入php 编辑:程序博客网 时间:2024/05/21 07:00

本文来自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


原创粉丝点击