Beispiel #1
0
        public static ЦелоеЧисло Создать()
        {
            var этот  = new ЦелоеЧисло();
            var адрес = Хранилище.Добавить(этот);

            return(этот);
        }
        public ЦелоеЧисло дайЗначение()
        {
            ЦелоеЧисло знач = new ЦелоеЧисло(); // в целомчисле надо разделить сохранние значения и сохранение всего объекта (свойства+значение)

            знач.Восстановить(поток);           //плохо что читается и код типа каждый раз

            return(знач);
        }
Beispiel #3
0
        public override ПримитивИлиАдрес Копировать()
        {
            var копия = new ЦелоеЧисло();

            копия.Значение = Значение;
            копия.СобственныйАдресПримитива = СобственныйАдресПримитива;
            return(копия);
        }
Beispiel #4
0
        public override АМОбъект Копировать()      // надо указывать пространство куда
        {
            var копия = new ЦелоеЧисло
            {
                Значение = Значение,
                //СобственныйАдресПримитива = (Адрес) СобственныйАдресПримитива.Копировать()
            };

            return(копия);
        }
Beispiel #5
0
 public ЦелоеЧисло ДайЗначение()  // это хранитель Значения , но не Получатель Значения , если хранения Суммы нет, то Чистый вычмслмитель
 {
     if (_Слогаемое[0] != null && _Слогаемое[1] != null)
     {
         var сумма = new ЦелоеЧисло(_Слогаемое[0].Значение + _Слогаемое[1].Значение);
         Сумма.Значение = _Слогаемое[0].Значение + _Слогаемое[1].Значение;
         return(сумма); // без хранения
     }
     return(Сумма);     // с хранением без вычисления
     // можно еще вернуть частмчный вариант например Сумма= 2+ Значение по адресу
 }
        public ПримитивИлиАдрес ДайОбъектПоИндексу(ЦелоеЧисло номер)
        {
            ЧитательИндекса.BaseStream.Position = номер.Значение * 4;
            var адресОбъекта = ЧитательИндекса.ReadInt32();

            Читатель.BaseStream.Position = адресОбъекта;

            var прим = ПримитивИлиАдрес.Создать(Читатель.BaseStream);

            return(прим);
        }
Beispiel #7
0
        public ПримитивИлиАдрес ПередайКоманду(Команда команда)
        {
            var номерКоманды = new ЦелоеЧисло(0);
            var ком2         = new Команда("Команда", номерКоманды, команда);

            Канал.ПередайИсходящееСообщение(ком2);
            //здесь должно быть ДайВходящееСПрерыванием

            var команда2      = (Команда)Канал.ДайВходящее();
            var номерКоманды2 = команда2.Параметры[0]; // номер команды на которую дается ответ
            var ответ         = команда.Параметры[1];

            return(ответ);
        }
Beispiel #8
0
        public override object Выполнить(План вызывающееДействие)
        {
            ЦелоеЧисло[] слогаемое = new ЦелоеЧисло[2]; //это внутренние переменные



            слогаемое[0] = ПреобразоватьСлогаемое(вызывающееДействие, слогаемое1);
            слогаемое[1] = ПреобразоватьСлогаемое(вызывающееДействие, слогаемое2);


            езультатДействия = new ЦелоеЧисло()
            {
                Значение = слогаемое[0].Значение + слогаемое[1].Значение
            };

            return(езультатДействия);
        }
        public void НаОбъектПоИндексу(ЦелоеЧисло индекс, ПримитивИлиАдрес объект)
        {
            ЧитательИндекса.BaseStream.Position = индекс.Значение * 4;
            var адресОбъекта = ЧитательИндекса.ReadInt32();

            Читатель.BaseStream.Position = адресОбъекта;
            int длинаОбъекта;

            длинаОбъекта = ЧитательИндекса.ReadInt32(); // вариант с записью длины в индекс
            // узнать длину сохраненного объекта, его тип
            var номерТипа = Читатель.ReadByte();

            var тип = Хранилище.Типы[номерТипа];

            // для примитивов

            длинаОбъекта = (int)тип.InvokeMember("Длина", BindingFlags.InvokeMethod, null, null, null);
            //для групп и строк
            длинаОбъекта = Читатель.ReadUInt16();

            // если тип объекта совпадает с типом сохраненного объекта и этот тип не группа = длины сохраненных объектов совпадают
            Записать(объект, адресОбъекта);
            // если ттип не совпадает
            // то сравнить длину , если длина совпадает, то ттоже записать

            // если длина не совпадает
            //то найти подходящее место
            // в файле с удалениями есть
            // запомниттьпустое место

            int новыйАдресОбъекта = 0;

            // запомнить новый адрес в индексе
            ЧитательИндекса.BaseStream.Position = индекс.Значение * 4;
            ПисательИндекса.Write(новыйАдресОбъекта);
            Записать(объект, новыйАдресОбъекта);

            // записать в удаленных пусттое место адрес начала, длина, было бы не плохо отсортировать этот файл по длинам
            // еще вариант использовать
        }
Beispiel #10
0
 public static void Выполнить(ЦелоеЧисло слагаемое1, ЦелоеЧисло слагаемое2, ЦелоеЧисло результат)
 {
     результат.Значение = слагаемое1.Значение + слагаемое2.Значение;
 }
Beispiel #11
0
 public ЦелоеЧисло Сложи(ЦелоеЧисло слогаемое1, ЦелоеЧисло слогаемое2)  // услуга интерпритатор
 {
     return(слогаемое1 + слогаемое2);
 }