Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/CombinedOperator.cs @ 10635

Last change on this file since 10635 was 10416, checked in by ascheibe, 11 years ago

#1886 adapted branch to changes of #2119

File size: 2.6 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using HeuristicLab.Common;
23using HeuristicLab.Core;
24using HeuristicLab.Operators;
25using HeuristicLab.Parameters;
26using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
27
28namespace HeuristicLab.Analysis.AlgorithmBehavior.Analyzers {
29  [Item("CombinedOperator", "An operator that executes a collection of other operators.")]
30  [StorableClass]
31  public class CombinedOperator : MultiOperator<IOperator> {
32    private ScopeParameter CurrentScopeParameter {
33      get { return (ScopeParameter)Parameters["CurrentScope"]; }
34    }
35    public IScope CurrentScope {
36      get { return CurrentScopeParameter.ActualValue; }
37    }
38
39    [StorableConstructor]
40    protected CombinedOperator(bool deserializing) : base(deserializing) { }
41    protected CombinedOperator(CombinedOperator original, Cloner cloner)
42      : base(original, cloner) {
43    }
44
45    public CombinedOperator()
46      : base() {
47      Parameters.Add(new ScopeParameter("CurrentScope", "The current scope whose variables and sub-scopes should be removed."));
48    }
49
50    public override IDeepCloneable Clone(Cloner cloner) {
51      return new CombinedOperator(this, cloner);
52    }
53
54    public virtual void InitializeOperators() { }
55
56    protected IOperation BaseApply() {
57      return base.InstrumentedApply();
58    }
59
60    public override IOperation InstrumentedApply() {
61      if (Operators.Count == 0)
62        InitializeOperators();
63
64      OperationCollection next = new OperationCollection(base.InstrumentedApply());
65      OperationCollection inner = new OperationCollection();
66      inner.Parallel = false;
67
68      for (int i = 0; i < Operators.Count; i++) {
69        inner.Add(ExecutionContext.CreateOperation(Operators[i], CurrentScope));
70      }
71      next.Insert(0, inner);
72      return next;
73    }
74  }
75}
Note: See TracBrowser for help on using the repository browser.