#pragma oncetemplate <class SAsync>class CVQueueAsync
{
public:
CVQueueAsync(void);
~CVQueueAsync(void);public:
SAsync* QAlloc();
SAsync* QGetFirst();
SAsync* QGetAt(int index);public:
int QSkip();
int QCount();private: SAsync m_asyncs[VTCP_ASYNC_MAX_COUNT]; int m_s; //开始索引
int m_c; //个数};template <class SAsync>CVQueueAsync<SAsync>::CVQueueAsync(void)
{
m_s=0;
m_c=0;
}template <class SAsync>CVQueueAsync<SAsync>::~CVQueueAsync(void)
{
}template <class SAsync>SAsync* CVQueueAsync<SAsync>::QAlloc()
{
if (m_c == VTCP_ASYNC_MAX_COUNT)
{
ASSERT(FALSE); return NULL;
} int index = (m_s + m_c) & VTCP_ASYNC_MAX_COUNT_MASK; m_c++; return &m_asyncs[index];
}template <class SAsync>SAsync* CVQueueAsync<SAsync>::QGetFirst()
{
if (0 >= m_c)
{
return NULL;
} return &m_asyncs[m_s];
}template <class SAsync>SAsync* CVQueueAsync<SAsync>::QGetAt(int index)
{
if (index >= m_c)
{
ASSERT(FALSE); return NULL;
} return &m_asyncs[(m_s + index) & VTCP_ASYNC_MAX_COUNT_MASK];
}template <class SAsync>int CVQueueAsync<SAsync>::QSkip()
{
if (m_c == 0)
{
ASSERT(FALSE); return ERROR_OBJECT_NOT_FOUND;
} m_s = (m_s + 1) & VTCP_ASYNC_MAX_COUNT_MASK;
m_c--; return 0;
}template <class SAsync>int CVQueueAsync<SAsync>::QCount()
{
return m_c;
}
求转换 VC到DELPHI版//重点是
public:
SAsync* QAlloc();
SAsync* QGetFirst();
SAsync* QGetAt(int index);
这个我不清楚怎么转换
{
public:
CVQueueAsync(void);
~CVQueueAsync(void);public:
SAsync* QAlloc();
SAsync* QGetFirst();
SAsync* QGetAt(int index);public:
int QSkip();
int QCount();private: SAsync m_asyncs[VTCP_ASYNC_MAX_COUNT]; int m_s; //开始索引
int m_c; //个数};template <class SAsync>CVQueueAsync<SAsync>::CVQueueAsync(void)
{
m_s=0;
m_c=0;
}template <class SAsync>CVQueueAsync<SAsync>::~CVQueueAsync(void)
{
}template <class SAsync>SAsync* CVQueueAsync<SAsync>::QAlloc()
{
if (m_c == VTCP_ASYNC_MAX_COUNT)
{
ASSERT(FALSE); return NULL;
} int index = (m_s + m_c) & VTCP_ASYNC_MAX_COUNT_MASK; m_c++; return &m_asyncs[index];
}template <class SAsync>SAsync* CVQueueAsync<SAsync>::QGetFirst()
{
if (0 >= m_c)
{
return NULL;
} return &m_asyncs[m_s];
}template <class SAsync>SAsync* CVQueueAsync<SAsync>::QGetAt(int index)
{
if (index >= m_c)
{
ASSERT(FALSE); return NULL;
} return &m_asyncs[(m_s + index) & VTCP_ASYNC_MAX_COUNT_MASK];
}template <class SAsync>int CVQueueAsync<SAsync>::QSkip()
{
if (m_c == 0)
{
ASSERT(FALSE); return ERROR_OBJECT_NOT_FOUND;
} m_s = (m_s + 1) & VTCP_ASYNC_MAX_COUNT_MASK;
m_c--; return 0;
}template <class SAsync>int CVQueueAsync<SAsync>::QCount()
{
return m_c;
}
求转换 VC到DELPHI版//重点是
public:
SAsync* QAlloc();
SAsync* QGetFirst();
SAsync* QGetAt(int index);
这个我不清楚怎么转换
自己定义个数组就行了, 或者用TList, TStringlist之类的列表对象
type
CVQueueAsync = class
private
m_asyncs: array [0..VTCP_ASYNC_MAX_COUNT-1] of SAsync;
protected
public
constructor Create();
destructor Destroy; override;
function QAlloc(): SAsync;
end;
...
function CVQueueAsync.QAlloc(): SAsync;
begin
result := nil;
end;delphi中对象就是个指针.