Files
envi-code/SourceCode/Code2026/tg_shs/shs_subgeLib/TWArraysAr.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

119 lines
2.1 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
// = FileName : TWArraysAr.cpp
// = Version : ver2.0
// = Author : xlc
// = CreateDate : 2002-09-09
// = Description: 类的定义
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#include "StdAfx.h"
#include "TWArraysAr.h"
TWArraysAr::TWArraysAr(long unitSize)
: m_iUnitSize(unitSize)
{
}
TWArraysAr::~TWArraysAr()
{
}
long TWArraysAr::GetUnitSize()const
{
return m_iUnitSize;
}
long TWArraysAr::GetUnit(long i)const
{
return i / GetUnitSize();
}
long TWArraysAr::GetSubIndex(long i)const
{
return i % GetUnitSize();
}
void TWArraysAr::Clear()
{
TWArchive::Clear();
m_bufTable.Clear();
}
void TWArraysAr::Read(void *p, long size)
{
if (GetLength() - GetCur() < size)
{
size = GetLength() - GetCur();
}
char *pData = (char*)p;
long i = 0;
for (m_bufTable.MoveTo(GetUnit(GetCur())); i < size && !m_bufTable.IsOut(); m_bufTable.MoveToNext())
{
TWArrayAr &ar = m_bufTable.GetCurPData();
if (i == 0)
{
ar.MoveTo(GetSubIndex(GetCur()));
}
else
{
ar.MoveToFirst();
}
long num = size - i;
if (num > GetUnitSize() - ar.GetCur())
{
num = GetUnitSize() - ar.GetCur();
}
ar.Read(pData,num);
pData += num;
i += num;
}
}
void TWArraysAr::Write(void *p, long size)
{
long iEndUnit = GetUnit(GetCur() + size - 1);
while (m_bufTable.GetLength() <= iEndUnit)
{
TWArrayAr* pAr = new TWArrayAr(GetUnitSize());
pAr->SetLength(GetUnitSize());
m_bufTable.AddTail(pAr);
}
char *pData = (char*)p;
long i = 0;
for (m_bufTable.MoveTo(GetUnit(GetCur())); i < size; m_bufTable.MoveToNext())
{
TWArrayAr &ar = m_bufTable.GetCurPData();
if (i == 0)
{
ar.MoveTo(GetSubIndex(GetCur()));
}
else
{
ar.MoveToFirst();
}
long num = size - i;
if (num > GetUnitSize() - ar.GetCur())
{
num = GetUnitSize() - ar.GetCur();
}
ar.Write(pData,num);
pData += num;
i += num;
}
if ((GetCur() + size) > m_iLength)
{
m_iLength = GetCur() + size;
}
}