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