Функция преобразующая элемент в константный массив из одного (этого) элемента.
И кеширующая результат выполнения.
Используется для оптимизации расхода памяти.
Массивы создаются не каждый раз при вызове функции, а один раз на элемент.
И вызов:
И кеширующая результат выполнения.
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
Комментариев нет:
Отправить комментарий