

Программирование на языке 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, то порядковые номера элементов будут начинаться с единицы, а не с нуля. Итак, если мы будем записывать в архив объекты разных классов, то получим хэш-таблицу, при этом элементами хэш-таблицы в грубом приближении будут п{ары «указатель на элемент – порядковый номер, т.е. ИНДЕКС элемента». Думаю, теперь читатель понял о каком индексе идет речь.
Похожие статьи: Метод Write
