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

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

Метод WriteClass


После записи в архив информации о классе необходимо убедиться, что сохраненное в архиве число объектов не превышает максимально допустимого значения, которое в файле метод WriteClass() должен убе­диться, проверяет, не превышено ли максимальное допустимое число сохраненных классов. Это максимально допустимое число определено в файле arcobj.cpp следующим образом:

#define nMaxMapCount ((DWORD)0×3FFFFFFE)

// 0×3FFFFFFE last valid mapCount

Проверка производится при помощи метода CheckCount():

void CArchive::CheckCount() {

if (m_nMapCount >= nMaxMapCount)

AfxThrowArchiveException(CArchiveException::badlndex,

m_strFileName);

}

Честно говоря, у меня есть БОООООЛЬШИИИИИЕ сомнения, что когда-нибудь этот метод сформирует исключение. Сохранять более миллиарда объектов, это, знаете ли, достаточно серьезно! ©

Но вернемся к методу WriteClass(). После проверки числа объ­ектов в хэш-таблице происходит то, что объясняет, почему из хэш-таблицы выбирается какой-то ИНДЕКС, а не указатель. В хэш-таб­лицу с ключом, равным указателю на информацию времени вы­полнения, записывается порядковый номер добавляемого элемен­та! Так как нулевой элемент в хэш-таблицу записывается при ее создании и инициализации в методе MapObjectQ, то порядковые номера элементов будут начинаться с единицы, а не с нуля. Итак, если мы будем записывать в архив объекты разных классов, то получим хэш-таблицу, при этом элементами хэш-таблицы в грубом приближении будут п{ары «указатель на элемент – порядковый но­мер, т.е. ИНДЕКС элемента». Думаю, теперь читатель понял о ка­ком индексе идет речь.

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