Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Core/3.3/VariableInfo.cs @ 2591

Last change on this file since 2591 was 2526, checked in by swagner, 15 years ago

Refactored cloning (#806)

File size: 5.5 KB
RevLine 
[2]1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2008 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;
[1823]26using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
[2]27
28namespace HeuristicLab.Core {
[776]29  /// <summary>
30  /// Class for storing meta-information about variables/parameters of an operator.
31  /// </summary>
[2]32  public class VariableInfo : ItemBase, IVariableInfo {
[1667]33
34    [Storable]
[2]35    private string myActualName;
[776]36    /// <summary>
37    /// Gets or sets the actual name of the current instance.
38    /// </summary>
39    /// <remarks>Calls <see cref="OnActualNameChanged"/> in the setter.</remarks>
[2]40    public string ActualName {
41      get { return myActualName; }
42      set {
43        if (myActualName != value) {
44          myActualName = value;
45          OnActualNameChanged();
46        }
47      }
48    }
[1667]49
50    [Storable]
[2]51    private string myFormalName;
[776]52    /// <summary>
53    /// Gets the formal name of the current instance.
54    /// </summary>
[2]55    public string FormalName {
56      get { return myFormalName; }
57    }
[1667]58
59    [Storable]
[2]60    private string myDescription;
[776]61    /// <summary>
62    /// Gets the description of the current instance.
63    /// </summary>
[2]64    public string Description {
65      get { return myDescription; }
66    }
[1667]67
68    [Storable]
[2]69    private Type myDataType;
[776]70    /// <summary>
71    /// Gets the data type of the parameter.
72    /// </summary>
[2]73    public Type DataType {
74      get { return myDataType; }
75    }
[1667]76
77    [Storable]
[2]78    private VariableKind myKind;
[776]79    /// <summary>
80    /// Gets the kind of the parameter (input parameter, output parameter,...).
81    /// </summary>
[2]82    public VariableKind Kind {
83      get { return myKind; }
84    }
[1667]85
86    [Storable]
[2]87    private bool myLocal;
[776]88    /// <summary>
89    /// Gets or sets a boolean value, whether the variable is a local one.
90    /// </summary>
91    /// <remarks>Calls <see cref="OnLocalChanged"/> in the setter.</remarks>
[2]92    public bool Local {
93      get { return myLocal; }
94      set {
95        if (myLocal != value) {
96          myLocal = value;
97          OnLocalChanged();
98        }
99      }
100    }
101
[776]102    /// <summary>
103    /// Initializes a new instance of <see cref="VariableInfo"/> with actual and formal name "Anonymous",
104    /// no description, a <c>null</c> data type and the <c>local</c> flag set to <c>false</c>. The type of
105    /// the variable is an input parameter.
106    /// </summary>
[2]107    public VariableInfo() {
108      myActualName = "Anonymous";
109      myFormalName = "Anonymous";
110      myDescription = "";
111      myDataType = null;
112      myKind = VariableKind.In;
113      myLocal = false;
114    }
[776]115    /// <summary>
116    /// Initializes a new instance of <see cref="VariableInfo"/> with the given parameters.
117    /// </summary>
118    /// <remarks>Calls <see cref="VariableInfo()"/>.<br/>
119    /// The formal name is assigned to the actual name, too.</remarks>
120    /// <param name="formalName">The formal name of the current instance.</param>
121    /// <param name="description">The description of the current instance.</param>
122    /// <param name="dataType">The data type of the parameter.</param>
123    /// <param name="kind">The type of the parameter.</param>
[2]124    public VariableInfo(string formalName, string description, Type dataType, VariableKind kind)
125      : this() {
126      myActualName = formalName;
127      myFormalName = formalName;
128      myDescription = description;
129      myDataType = dataType;
130      myKind = kind;
131    }
132
[776]133    /// <summary>
134    /// Clones the current instance (deep clone).
135    /// </summary>
136    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
137    /// <returns>The cloned object as <see cref="VariableInfo"/>.</returns>
[2526]138    public override IItem Clone(ICloner cloner) {
[2]139      VariableInfo clone = new VariableInfo();
[2526]140      cloner.RegisterClonedObject(this, clone);
[2]141      clone.myActualName = ActualName;
142      clone.myFormalName = FormalName;
143      clone.myDescription = Description;
144      clone.myDataType = DataType;
145      clone.myKind = Kind;
146      clone.myLocal = Local;
147      return clone;
148    }
149
[776]150    /// <inheritdoc/>
[2]151    public event EventHandler ActualNameChanged;
[776]152    /// <summary>
153    /// Fires a new <c>ActualNameChanged</c> event.
154    /// </summary>
[2]155    protected virtual void OnActualNameChanged() {
156      if (ActualNameChanged != null)
157        ActualNameChanged(this, new EventArgs());
158    }
[776]159    /// <inheritdoc />
[2]160    public event EventHandler LocalChanged;
[776]161    /// <summary>
162    /// Fires a new <c>LocalChanged</c> event.
163    /// </summary>
[2]164    protected virtual void OnLocalChanged() {
165      if (LocalChanged != null)
166        LocalChanged(this, new EventArgs());
167    }
168  }
169}
Note: See TracBrowser for help on using the repository browser.