Программирование на языке MFC

Мой второй блог в серии программирования

Метод MapObject


Что ж, в связи с важностью метода необходимо этот метод рассмотреть более подробно. Понятно, что в качестве аргумен­та методу передается указатель на записываемый в архив объ­ект. Сразу после проведения необходимых проверок вызывает­ся метод MapObject(). При этом (обратите, пожалуйста, на это внимание, читатель) методу MapObject() в качестве аргумента передается не указатель на объект, как следовало бы ожидать, a NULL. Исходный код метода MapObject() также находится в фай­ле arcobj.cpp:

void CArchive::MapObject(const CObject* pOb) {

if (IsStoring()) {

if (m_pStoreMap == NULL) {

// initialize the storage map

// (use CMapPtrToPtr because it is used for

// HANDLE maps too)

m_pStoreMap = new CMapPtrToPtr(m_nGrowSize) ; m_pStoreMap->InitHashTable(m_nHashSize); m_pStoreMap->SetAt(NULL, (void*) (DWORD)wNullTag) ; m_nMapCount = 1;

}

if (pOb != NULL) {

CheckCount(); (*m_pStoreMap)[(void*)pOb] = (void*)m_nMapCount++;

}

}

else {

if (m_pLoadArray == NULL) {

// initialize the loaded object pointer array // and set special values m_pLoadArray = new CPtrArray; m_pLoadArray->SetSize(1, m_nGrowSize); ASSERT(wNullTag == 0); m_pLoadArray->SetAt(wNullTag, NULL); m_nMapCount = 1;

}

if (pOb != NULL) {

CheckCount() ;

m_pLoadArray->InsertAt(m_nMapCount++, (void*)pOb);

}

}

}

Похожие статьи: