📄 resarray.h
字号:
// ResArray.h
//
// Author: Lea Hayes
// Date Created: 10/03/2006
// Date Modified: 24/03/2006
// Description: Resource array which automatically resizes due to
// its link-list nature.
//
// A resource array object will always comprise of a
// hidden dummy node. This node both simplifies node
// generation/destruction and provides an end of array
// indicator which will be used during iterations.
//
#pragma once
#include "IResource.h"
#include "ResListNode.h"
#include "ResArrayIt.h"
#include "ResArrayHandle.h"
namespace Resources
{
class ResourceArray
{
// Construction and destruction.
public:
ResourceArray();
virtual ~ResourceArray();
void Destroy();
void ReleaseUnusedResources();
// Resource handle.
typedef ResArrayHandle ResHandle;
static const ResHandle NullHandle;
// Iterations.
typedef ResArrayIt iterator;
inline iterator Begin()
{
return iterator(m_pBegin);
}
inline iterator End()
{
return iterator(m_pEnd);
}
inline iterator Last()
{
return iterator(m_pLast);
}
inline iterator At(size_t nIndex)
{
return Begin() + nIndex;
}
static const iterator NullIterator;
// Array manipulation.
void Insert(iterator& itPos, LPRESOURCE pRes);
void Append(LPRESOURCE pRes);
ResHandle Aquire(ResHandle& handle);
ResHandle AquireByIndex(size_t nIndex);
inline ResHandle Aquire(DWORD dwUniqueResID)
{
return Aquire(Find(dwUniqueResID));
}
inline ResHandle Aquire(LPCSTR lpszFilePath)
{
return Aquire(Find(lpszFilePath));
}
inline ResHandle AquireNext(const ResHandle& prev, DWORD dwUniqueResID)
{
return Aquire(FindNext(iterator(prev.m_pItem), dwUniqueResID));
}
inline ResHandle AquireNext(const ResHandle& prev, LPCSTR lpszFilePath)
{
return Aquire(FindNext(iterator(prev.m_pItem), lpszFilePath));
}
void Release(iterator& itPos);
void Release(size_t nIndex);
void Release(LPRESOURCE pRes);
iterator Find(LPRESOURCE pRes);
iterator Find(DWORD dwUniqueResID);
iterator Find(LPCSTR lpszFilePath);
iterator FindNext(const iterator& prev, DWORD dwUniqueResID);
iterator FindNext(const iterator& prev, LPCSTR lpszFilePath);
// Properties.
inline size_t GetCount() const
{
return m_nSize;
}
inline bool IsAutoFreeUnused() const
{
return m_bAutoFree;
}
bool EnableAutoFreeUnused(bool bEnable = true);
// Link list nodes and helper functions.
protected:
typedef ResListNode ListNode;
typedef ListNode * LPLISTNODE;
void CreateDummyNode();
void QueryUpdate();
void UpdateIndexes();
// Attributes.
private:
LPLISTNODE m_pBegin, m_pEnd, m_pLast;
size_t m_nSize;
bool m_bAutoFree;
};
typedef ResourceArray * LPRESOURCEARRAY;
}; // namespace Resources
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -