Функция преобразующая элемент в константный массив из одного (этого) элемента.
И кеширующая результат выполнения.
Используется для оптимизации расхода памяти.
Массивы создаются не каждый раз при вызове функции, а один раз на элемент.
И вызов:
И кеширующая результат выполнения.
ModelElement elem_func WeakRef %SUMMARY 'Возвращает СЛАБУЮ ссылку на элемент.' ; RULES ( Self IsIntf ) ( Self pop:WordBox:Boxed ) DEFAULT Self ; // RULES >>> Result ; // WeakRef WordAlias [[ [ %REMARK 'Начинает определение константного массива. Пока просто мапируется на неконстантный.' WordAlias ]] ] %REMARK 'Заканчивает определение константного массива. Пока просто мапируется на неконстантный.' ARRAY elem_func ElementToArray Cached: ( [[ Self .WeakRef ]] ) >>> Result ; // ElementToArray ARRAY elem_func ElementToArray: ^ IN aLambda Self aLambda DO .ElementToArray >>> Result ; // ElementToArray:
Используется для оптимизации расхода памяти.
Массивы создаются не каждый раз при вызове функции, а один раз на элемент.
И вызов:
elem_proc OutClass
Self .DefineImplementedMixInValues
if ( Self .UPisTrue "need UC" ) then
begin
Self .UserCode: 'ci' ()
end // ( Self .UPisTrue "need UC" )
Self .MixInValues .for> (
IN aValue
aValue .Name array:AddTo g_MixInValues
[ '_' aValue .Name '_' ' = ' aValue .Target .TypeName ';' ] .Out
)
VAR l_Parent
Self .CalcParentAndInclude >>> l_Parent
if ( Self .UPisTrue "need UC" ) then
begin
Self .UserCode: 'cit' ()
end // ( Self .UPisTrue "need UC" )
[
Self .TypeName
' = '
Self .Abstraction CASE
at_abstract
[ cOpenComment 'abstract' cCloseComment cSpace ]
at_final
[ cOpenComment 'final' cCloseComment cSpace ]
END // CASE
'class'
ARRAY VAR l_Implements
[] >>> l_Implements
VAR l_WasComma
false >>> l_WasComma
l_Parent .ElementToArray
.join> (
Self .ClassImplements
.filter> (
IN anItem
if ( anItem l_Implements array:Has ! ) then
begin
anItem array:AddTo l_Implements
true
end // ( anItem l_Implements array:Has ! )
else
begin
false
end // ( anItem l_Implements array:Has ! )
) // .filter>
) // .join>
.With()> (
IN anItem
RULES
( anItem .IsMixIn )
( anItem .TypeName .WithComma: l_WasComma .KeepInStack )
DEFAULT
begin
anItem .IfDefBraceLn:
(
anItem .TypeName .WithComma: l_WasComma .KeepInStack
) // anItem .IfDefBraceLn:
end // DEFAULT
; // RULES
) // .With()>
] .Out
Self .OutDocumentation
Self .OutClassInner
[ 'end;//' Self .TypeName ] .Out
Self .UndefineImplementedMixInValues
; // OutClass
Комментариев нет:
Отправить комментарий