抛弃GdCpp*.dll/pdb历史重新建库。libhv和Sqlite的dll保留
This commit is contained in:
101
include/Mem/CStack.h
Normal file
101
include/Mem/CStack.h
Normal file
@@ -0,0 +1,101 @@
|
||||
#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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user