📄 stash.h
字号:
// Stash.h
#ifndef STASH_H
#define STASH_H
#include "afxtempl.h"
template <class T>
class AFX_EXT_CLASS CStash {
int m_nNum;
int m_nSize;
int m_nAccSize;
T* m_p;
public:
CStash() : m_nNum(0), m_nAccSize(100), m_nSize(0), m_p(NULL){
}
~CStash(){
FreeStash();
}
/////////////////////////////////
T* GetPtr() {
return m_p;
}
/////////////////////////////////
int GetNum() {
return m_nNum;
}
/////////////////////////////////
int GetSize() {
return m_nSize;
}
/////////////////////////////////
int GetAccSize() {
return m_nAccSize;
}
/////////////////////////////////
void SetAccSize(int nSize) {
m_nAccSize = nSize;
}
/////////////////////////////////
T operator[](int n) {
return *(m_p + n);
}
/////////////////////////////////
T* PointAt(int n) {
return (T*)(m_p + n);
}
/////////////////////////////////
BOOL SetAt(int n, T& t) {
if(n > m_nSize) return FALSE;
memcpy(m_p+n, &t, sizeof(T));
return TRUE;
}
/////////////////////////////////
BOOL Add(T& t);
/////////////////////////////////
BOOL Add(T* pt, int nSize);
/////////////////////////////////
BOOL Delete(int nIndex, int nDelNum);
/////////////////////////////////
void FreeStash(){
if(m_p != NULL) {
free(m_p);
m_p = NULL;
}
m_nNum = m_nSize = 0;
}
void ClearStash(){
m_nNum = 0;
}
};
/////////////////////////////////
template <class T>
BOOL CStash<T>::Add(T& t)
{
if(m_nNum >= m_nSize) {
int nSize = m_nSize + m_nAccSize;
ASSERT((m_p = (T*)realloc(m_p, nSize * sizeof(T))) != NULL);
m_nSize = nSize;
}
SetAt(m_nNum, t);
m_nNum++;
return TRUE;
}
/////////////////////////////////
template <class T>
BOOL CStash<T>::Add(T* pt, int nSize)
{
int n = m_nNum + nSize;
if(n > m_nSize) {
int nAdd = ((n - m_nSize) / m_nAccSize + 1) * m_nAccSize;
ASSERT((m_p = (T*)realloc(m_p, (m_nSize + nAdd) * sizeof(T))) != NULL);
m_nSize += nAdd;
}
memcpy(m_p+m_nNum, pt, sizeof(T) * nSize);
m_nNum = n;
return TRUE;
}
/////////////////////////////////
template <class T>
BOOL CStash<T>::Delete(int nIndex, int nDelNum)
{
int nleft = m_nNum - nIndex;
if(nleft <= nDelNum) {m_nNum = nIndex; return TRUE;}
int nIndex1 = nIndex + nDelNum;
nleft = m_nNum - nIndex;
if(memmove(m_p+nIndex, m_p+nIndex1, nleft*sizeof(T)) == NULL)
return FALSE;
m_nNum -= nDelNum;
return TRUE;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -