102 lines
2.1 KiB
C++
102 lines
2.1 KiB
C++
#pragma once
|
||
#include "GdCPP_Exports.h"
|
||
|
||
template<typename T>
|
||
class CStack
|
||
{
|
||
public:
|
||
/// 构造函数指定预先分配的空间,和实际使用的数量
|
||
CStack(uint32_t maxnum = 0, uint32_t num = 0)
|
||
: _Num(num)
|
||
, _MaxNum(maxnum)
|
||
, _Data(nullptr)
|
||
{
|
||
ASSERT(_MaxNum >= _Num);
|
||
if (_MaxNum) {
|
||
_Data = new T[_MaxNum];
|
||
}
|
||
}
|
||
|
||
|
||
~CStack()
|
||
{
|
||
clearArray();
|
||
}
|
||
|
||
/// 调整实际使用的数量
|
||
bool resizeCnt(uint32_t num)
|
||
{
|
||
ASSERT(_MaxNum >= num);
|
||
if (_Num != num && num <= _MaxNum) {
|
||
_Num = num;
|
||
return true;
|
||
}
|
||
else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
// 调整预留空间
|
||
bool reserveCnt(uint32_t maxnum, bool useall = false)
|
||
{
|
||
if (maxnum > _MaxNum) {
|
||
clearArray();
|
||
_MaxNum = maxnum;
|
||
_Data = new T[_MaxNum];
|
||
if (_Data == nullptr) return false;
|
||
if (useall) {
|
||
_Num = _MaxNum;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/// 重载[]操作符简化图像的引用,调用必须保证camid在[0, camNum-1]范围内
|
||
inline T& operator [](size_t id)
|
||
{
|
||
return _Data[id];
|
||
}
|
||
|
||
inline const T& operator [](size_t id) const
|
||
{
|
||
return _Data[id];
|
||
}
|
||
|
||
inline T& at(size_t id)
|
||
{
|
||
return _Data[id];
|
||
}
|
||
|
||
inline const T& at(size_t id) const
|
||
{
|
||
return _Data[id];
|
||
}
|
||
|
||
inline uint32_t Num() const { return _Num; }
|
||
inline uint32_t MaxNum() const { return _MaxNum; }
|
||
|
||
void clearArray() {
|
||
delete[] _Data;
|
||
_Data = nullptr;
|
||
_MaxNum = 0;
|
||
_Num = 0;
|
||
}
|
||
|
||
private:
|
||
/// 禁用复制构造函数
|
||
CStack(const CStack& r);
|
||
|
||
protected:
|
||
/// 图形数组长度
|
||
uint32_t _Num;
|
||
uint32_t _MaxNum;
|
||
|
||
|
||
|
||
/// 动态分配的CImageBuf数组。数量没有使用宏CAM_MAX_NUM,因为CAM_MAX_NUM在不同应用可能发生变化。
|
||
/// 为了通用性不在构造时动态分配,camNum指定数量;
|
||
/// 或者默认构造空数组,使用resize函数分配。
|
||
T* _Data=nullptr;
|
||
};
|
||
|