Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Parameters/3.3/Parameter.cs @ 2790

Last change on this file since 2790 was 2790, checked in by swagner, 14 years ago

Operator architecture refactoring (#95)

  • implemented reviewers' comments
  • added additional plugins HeuristicLab.Evolutionary, HeuristicLab.Permutation, HeuristicLab.Selection, and HeuristicLab.Routing.TSP
File size: 2.9 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2010 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 System;
23using System.Collections.Generic;
24using System.Text;
25using System.Xml;
26using HeuristicLab.Core;
27using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
28
29namespace HeuristicLab.Parameters {
30  /// <summary>
31  /// A base class for parameters.
32  /// </summary>
33  [Item("Parameter", "A base class for parameters.")]
34  public abstract class Parameter : NamedItem, IParameter {
35    public override bool CanChangeName {
36      get { return false; }
37    }
38    public override bool CanChangeDescription {
39      get { return false; }
40    }
41
42    [Storable]
43    private Type dataType;
44    public Type DataType {
45      get { return dataType; }
46    }
47    public IItem ActualValue {
48      get { return GetActualValue(); }
49      set { SetActualValue(value); }
50    }
51    [Storable]
52    private ExecutionContext executionContext;
53    public ExecutionContext ExecutionContext {
54      get { return executionContext; }
55      set {
56        if (value != executionContext) {
57          executionContext = value;
58          OnExecutionContextChanged();
59        }
60      }
61    }
62
63    protected Parameter()
64      : base("Anonymous") {
65      dataType = typeof(IItem);
66    }
67    protected Parameter(string name, Type dataType)
68      : base(name) {
69      if (dataType == null) throw new ArgumentNullException();
70      this.dataType = dataType;
71    }
72    protected Parameter(string name, string description, Type dataType)
73      : base(name, description) {
74      if (dataType == null) throw new ArgumentNullException();
75      this.dataType = dataType;
76    }
77
78    public override IDeepCloneable Clone(Cloner cloner) {
79      Parameter clone = (Parameter)base.Clone(cloner);
80      clone.dataType = dataType;
81      clone.executionContext = (ExecutionContext)cloner.Clone(executionContext);
82      return clone;
83    }
84
85    public override string ToString() {
86      return string.Format("{0} ({1})", Name, DataType.Name);
87    }
88
89    protected abstract IItem GetActualValue();
90    protected abstract void SetActualValue(IItem value);
91
92    protected virtual void OnExecutionContextChanged() { }
93  }
94}
Note: See TracBrowser for help on using the repository browser.