Exemple #1
0
        // loop through optimize members of the group
        public void OptimizeGroup(Memo memo, PhysicProperty required)
        {
            // solver group shall optimize all its children before it can start
            if (IsSolverOptimizedGroup())
            {
                OptimizeSolverOptimizedGroupChildren(memo, required);
            }

            for (int i = 0; i < exprList_.Count; i++)
            {
                CGroupMember member = exprList_[i];

                // optimize the member and it shall generate a set of member
                member.OptimizeMember(memo);
            }

            // mark the group explored
            explored_ = true;
        }
Exemple #2
0
        internal void OptimizeSolverOptimizedGroupChildren(Memo memo, PhysicProperty required)
        {
            Debug.Assert(IsSolverOptimizedGroup());
            CGroupMember member    = exprList_[0];
            var          joinblock = member.Logic() as LogicJoinBlock;

            // optimize all children group and newly generated groups
            var prevGroupCount = memo.cgroups_.Count;

            joinblock.children_.ForEach(x =>
                                        (x as LogicMemoRef).group_.OptimizeGroup(memo, required));
            while (memo.stack_.Count > prevGroupCount)
            {
                memo.stack_.Pop().OptimizeGroup(memo, required);
            }

            // calculate the lowest inclusive members
            foreach (var c in joinblock.children_)
            {
                (c as LogicMemoRef).group_.CalculateMinInclusiveCostMember();
            }
        }