Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/05/10 14:28:22 (14 years ago)
Author:
swagner
Message:

Worked on best solution analysis for the TSP (#999)

File:
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Parameters/3.3/SubScopesSubScopesLookupParameter.cs

    r3626 r3634  
    2727namespace HeuristicLab.Parameters {
    2828  /// <summary>
    29   /// A generic parameter representing instances of type T which are collected from the sub-scopes of the current scope.
     29  /// A generic parameter representing instances of type T which are collected from or written to the sub-scopes of the sub-scopes of the current scope.
    3030  /// </summary>
    31   [Item("SubScopesLookupParameter<T>", "A generic parameter representing instances of type T which are collected from or written to the sub-scopes of the current scope.")]
     31  [Item("SubScopesSubScopesLookupParameter<T>", "A generic parameter representing instances of type T which are collected from or written to the sub-scopes of the sub-scopes of the current scope.")]
    3232  [StorableClass]
    33   public class SubScopesLookupParameter<T> : LookupParameter<ItemArray<T>> where T : class, IItem {
    34     public SubScopesLookupParameter() : base() { }
    35     public SubScopesLookupParameter(string name) : base(name) { }
    36     public SubScopesLookupParameter(string name, string description) : base(name, description) { }
    37     public SubScopesLookupParameter(string name, string description, string actualName) : base(name, description, actualName) { }
     33  public class SubScopesSubScopesLookupParameter<T> : LookupParameter<ItemArray<ItemArray<T>>> where T : class, IItem {
     34    public SubScopesSubScopesLookupParameter() : base() { }
     35    public SubScopesSubScopesLookupParameter(string name) : base(name) { }
     36    public SubScopesSubScopesLookupParameter(string name, string description) : base(name, description) { }
     37    public SubScopesSubScopesLookupParameter(string name, string description, string actualName) : base(name, description, actualName) { }
    3838
    3939    protected override IItem GetActualValue() {
    40       string name = LookupParameter<ItemArray<T>>.TranslateName(Name, ExecutionContext);
     40      string name = LookupParameter<ItemArray<ItemArray<T>>>.TranslateName(Name, ExecutionContext);
    4141      IScope scope = ExecutionContext.Scope;
    42       ItemArray<T> values = new ItemArray<T>(scope.SubScopes.Count);
     42      ItemArray<ItemArray<T>> values = new ItemArray<ItemArray<T>>(scope.SubScopes.Count);
    4343      IVariable var;
    4444      T value;
    4545
    4646      for (int i = 0; i < values.Length; i++) {
    47         scope.SubScopes[i].Variables.TryGetValue(name, out var);
    48         if (var != null) {
    49           value = var.Value as T;
    50           if ((var.Value != null) && (value == null))
    51             throw new InvalidOperationException(
    52               string.Format("Type mismatch. Variable \"{0}\" does not contain a \"{1}\".",
    53                             name,
    54                             typeof(T).GetPrettyName())
    55             );
    56           values[i] = value;
     47        values[i] = new ItemArray<T>(scope.SubScopes[i].SubScopes.Count);
     48        for (int j = 0; j < values[i].Length; j++) {
     49          scope.SubScopes[i].SubScopes[j].Variables.TryGetValue(name, out var);
     50          if (var != null) {
     51            value = var.Value as T;
     52            if ((var.Value != null) && (value == null))
     53              throw new InvalidOperationException(
     54                string.Format("Type mismatch. Variable \"{0}\" does not contain a \"{1}\".",
     55                              name,
     56                              typeof(T).GetPrettyName())
     57              );
     58            values[i][j] = value;
     59          }
    5760        }
    5861      }
     
    6063    }
    6164    protected override void SetActualValue(IItem value) {
    62       ItemArray<T> values = value as ItemArray<T>;
     65      ItemArray<ItemArray<T>> values = value as ItemArray<ItemArray<T>>;
    6366      if (values == null)
    6467        throw new InvalidOperationException(
     
    6770        );
    6871
    69       string name = LookupParameter<ItemArray<T>>.TranslateName(Name, ExecutionContext);
     72      string name = LookupParameter<ItemArray<ItemArray<T>>>.TranslateName(Name, ExecutionContext);
    7073      IScope scope = ExecutionContext.Scope;
    7174      IVariable var;
    7275
    7376      for (int i = 0; i < values.Length; i++) {
    74         scope.SubScopes[i].Variables.TryGetValue(name, out var);
    75         if (var != null) var.Value = values[i];
    76         else scope.SubScopes[i].Variables.Add(new Variable(name, values[i]));
     77        for (int j = 0; j < values[i].Length; j++) {
     78          scope.SubScopes[i].SubScopes[j].Variables.TryGetValue(name, out var);
     79          if (var != null) var.Value = values[i][j];
     80          else scope.SubScopes[i].SubScopes[j].Variables.Add(new Variable(name, values[i][j]));
     81        }
    7782      }
    7883    }
Note: See TracChangeset for help on using the changeset viewer.