void CWordArray::Serialize(CArchive& ar) { UINT_PTR nWORDsLeft; UINT nWORDsToWrite; UINT nWORDsToRead; LPWORD pwData; ASSERT_VALID(this); CObject::Serialize(ar); if (ar.IsStoring()) { ar.WriteCount(m_nSize); nWORDsLeft = m_nSize; pwData = m_pData; while(nWORDsLeft > 0) { nWORDsToWrite = UINT(min(nWORDsLeft, INT_MAX/sizeof(WORD))); ar.Write(pwData, nWORDsToWrite*sizeof(WORD)); nWORDsLeft -= nWORDsToWrite; pwData += nWORDsToWrite; } } else { DWORD_PTR nOldSize = ar.ReadCount(); SetSize(nOldSize); nWORDsLeft = m_nSize; pwData = m_pData; while(nWORDsLeft > 0) { nWORDsToRead = UINT(min( nWORDsLeft, INT_MAX/sizeof(WORD))); ar.EnsureRead(pwData, nWORDsToRead*sizeof(WORD)); nWORDsLeft -= nWORDsToRead; pwData += nWORDsToRead; } } }