(*~\Глагол\Отделы\Иное~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                             ОТДЕЛ Фигура;
(*============================================================================*)
(* НАЗНАЧЕНИЕ: опорные вид Фигура и вид ДОСТУП К 'Фигура'
//             при Предметно-описательном Подходе (ПоП) на Глаголе            *)
(*============================================================================*)

ВИД
     (*- Абстрактные ВИДы: Фигура.Вид    -          'пустой  набор  Фигура' и
                     ВИД   Фигура.Доступ - ДОСТУП К 'пустому набору Фигура'
      -*)
  Доступ- = ДОСТУП К Вид;   (* предок (опора) доступа к любому ВИДу Фигура.Вид *)
                     Вид- =
  НАБОР
  КОН;                      (* предок (опора)           любого ВИДа Фигура.Вид *)

      (*- НЕ абстрактные образцы ВИДов: Набор.Звено   - (односвязное)
                                        Набор.Список  - звеньев с головой и хвостом
                                 вид    Набор.ДкЗвену - ДОСТУП К 'звену' -*)

   (*= описание экспортируемого/общедоступного/
                               публичного/видимого НАБОРа-класса - нЗвено =*)
  ДкЗвену- = ДОСТУП К нЗвено;
                      нЗвено- =
  НАБОР                                   (* односвязное звено цепного списка *)
    телоД+ :Доступ;   (* свойство набора Звено (Доступ к набору - телу звена) *)
    слеД+  :ДкЗвену   (* свойство набора Звено (Доступ к следующему    звену) *)
  КОН;

        (* Двуконцевой цепной 'Список' (очередь) из односвязных звеньев
с добавлением нового звена в конец-хвост <конЗвеноД+> и
                              со ссылкой <начЗвеноД+> на голову - 1-е звено и
                              со ссылкой <телоД+> на набор разнотипных полей  *)
  ДкСписку- = ДОСТУП К нСписок;
                       нСписок- =
  НАБОР
    цВсегоЗвеньев+:ЦЕЛ;
    начЗвеноД+:ДкЗвену;               (* ссылка на голову списка *)
    конЗвеноД+:ДкЗвену                (* ссылка на  хвост списка *)
  КОН;

         (*- Примеры задач для работы с образцовым набором вида 'Список' из звеньев-наборов 
                или  задачи-методы  для набора <список+>
          -*)
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА (Фигура.Вид) ОчиститьСписок-(цепнойСписок+:Набор.нСписок);
УКАЗ
  цепнойСписок.цВсегоЗвеньев:=0;
  цепнойСписок.начЗвеноД:=ПУСТО;
  цепнойСписок.конЗвеноД:=ПУСТО
КОН ОчиститьСписок;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА (Набор.нСписок) ВКонецСписка-(цепнойСписок+:Набор.нСписок;
                                          данныеД:Набор.Доступ);
(*
 * Цель: создать и присоединить новое звеноД в конец <цепнойСписок+>,
 *          а в его поле со ссылкой на телоД+ заслать <данныеД>
 *)
ПЕР
          звеноД:ДкЗвену;
УКАЗ
  СОЗДАТЬ(звеноД);
          звеноД.телоД:=данныеД;
  ЕСЛИ
       цепнойСписок.начЗвеноД = ПУСТО
  ТО
       цепнойСписок.начЗвеноД:=звеноД;
       цепнойСписок.конЗвеноД:=звеноД
  ИНАЧЕ          (* не 1-е  звено *)
    (* цепнойСписок.начЗвеноД:=звеноД; - голову очереди не изменяем
     при добавлении не 1-го звена, а только при удалении 1-го и единственного *)
       цепнойСписок.конЗвеноД.слеД:=звеноД;
       цепнойСписок.конЗвеноД     :=звеноД
  КОН;
  УВЕЛИЧИТЬ(цепнойСписок.цВсегоЗвеньев)
КОН ВКонецСписка;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА (Набор.нСписок) Дк1муЗвену-(цепнойСписок-:Набор.нСписок):ДкЗвену;
(*
   Цель: получить доступ к первому звену <цепнойСписок+> (без удаления звена)
 *)
УКАЗ
            ВОЗВРАТ цепнойСписок.начЗвеноД
КОН Дк1муЗвену;

КОН Фигура.
