Example #1
0
 public override ПримитивИлиАдрес АдресВКуче()
 {
     if (АдресГруппыВкуче == null)
     {
         АдресГруппыВкуче = (ДисковоеХранилище)СобственныйАдресПримитива.АдресВКуче();
     }
     return(АдресГруппыВкуче.ПрочитатьОбъект(НомерВФайле));
 }
Example #2
0
        // как его использовать

        //
        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 здеь лишниее
            //похоже адрес в файле не должен содержать адреса ДХ в хранилище- это уже
        }