// как его использовать public static void Тест() { var адресДХ = Хранилище.Добавить(new ДисковоеХранилище() { ИмяФайла = "имя" }); // теперь Дисковое хранилище может восстанавливается открываться var хр = ((ДисковоеХранилище)адресДХ.АдресВКуче()); хр.Открыть(); var д = new ДисковоеХранилище() { ИмяФайла = "дисковое хранилище" }; д.Создать(); var адресЦелого = д.ДобавитьВКонец(new ЦелоеЧисло() { Значение = 10 }); var целое = д.ПрочитатьОбъект(адресЦелого.НомерВФайле); var адресСтроки2 = д.ДобавитьВКонец(new Строка() { Значение = "с" }); var строкаПрочитнная = д.ПрочитатьОбъект(адресСтроки2.НомерВФайле); var адресСтроки3 = д.ДобавитьВКонец(new Строка() { Значение = "Строка" }); var адресСтроки = хр.ДобавитьВКонец(new Строка() { Значение = "строка на диске" }); // строка не добавляется в Память, только на Диск Хранилище.Добавить(адресСтроки); // теперь можно по адресу добраться до самой строки //примитивы должны сохраняться вместе с адресом,иначе они будут потеряны, Дисковое хранилище можно полностью прочитать, последовательно и просмотреть все объекты // важна замена объекта по адресу, либо перезапись, либо перенаправление. Перезапись предполагает резервирование дополнительного места (байтов), перенаправление, должно содержать //новый адрес, который должен уместиться в старое пространство, т.е. строка не может быть меньше 4 байт(минимального адреса) var копияСтрокиВПамяти = адресСтроки.АдресВКуче(); // теперь добавим адрес строки на диск var адресАдресаСтроки = хр.ДобавитьВКонец(адресСтроки); // теперь по этому адресу храниться (1.номер ДХ в Хранилище и 2.номер строки в ДХ) 1 здеь лишниее //похоже адрес в файле не должен содержать адреса ДХ в хранилище- это уже }
public override ПримитивИлиАдрес АдресВКуче() { if (АдресГруппыВкуче == null) { АдресГруппыВкуче = (ДисковоеХранилище)СобственныйАдресПримитива.АдресВКуче(); } return(АдресГруппыВкуче.ПрочитатьОбъект(НомерВФайле)); }