Skip to content

Commit

Permalink
Tail recursive filter1OnTrueSync_tail
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@22447 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Sep 26, 2014
1 parent cbc75e6 commit e4a3ac8
Showing 1 changed file with 6 additions and 13 deletions.
19 changes: 6 additions & 13 deletions Compiler/Util/List.mo
Expand Up @@ -8167,30 +8167,23 @@ protected function filter1OnTrueSync_tail
output Boolean outResult;
end FilterFunc;
algorithm
(outList,outSyncList) := matchcontinue(inList, inFilterFunc, inArg1, inSyncLst, inAccumList, inAccumSyncList)
(outList,outSyncList) := match (inList, inFilterFunc, inArg1, inSyncLst, inAccumList, inAccumSyncList)
local
ElementType1 e;
ElementType2 f;
list<ElementType1> rest,lst1;
list<ElementType2> restf,lst2;
Boolean b;
case ({}, _, _, _, _, _) then (inAccumList, inAccumSyncList);

// Add to front if the condition works.
case (e :: rest, _, _, f :: restf, _, _)
equation
true = inFilterFunc(e,inArg1);
(lst1,lst2) = filter1OnTrueSync_tail(rest, inFilterFunc, inArg1, restf, e :: inAccumList, f :: inAccumSyncList);
then
(lst1,lst2);

// Filter out and move along.
case (_ :: rest, _, _, _ :: restf, _, _)
equation
(lst1,lst2) = filter1OnTrueSync_tail(rest, inFilterFunc, inArg1, restf, inAccumList, inAccumSyncList);
then
(lst1,lst2);
b = inFilterFunc(e,inArg1);
(lst1,lst2) = filter1OnTrueSync_tail(rest, inFilterFunc, inArg1, restf, consOnTrue(b,e,inAccumList), consOnTrue(b,f,inAccumSyncList));
then (lst1,lst2);

end matchcontinue;
end match;
end filter1OnTrueSync_tail;


Expand Down

0 comments on commit e4a3ac8

Please sign in to comment.