Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/17/19 14:05:47 (5 years ago)
Author:
abeham
Message:

#2521: Refactored ContextLookupParameter with suggestions from mkommend

  • Add StorableType attribute to some types
Location:
branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ContextLookupParameter.cs

    r17254 r17257  
    11using System;
    2 using System.Threading;
    32using HEAL.Attic;
    43using HeuristicLab.Common;
     
    87  [Item("ContextLookupParameter", "A parameter that looks up contexts by type.")]
    98  [StorableType("4ac189c8-6cf3-48fd-bf79-392d35a872db")]
    10   public class ContextLookupParameter<T> : Parameter, IContextLookupParameter<T>, IStatefulItem
     9  public class ContextLookupParameter<T> : ContextParameter, IContextLookupParameter<T>
    1110      where T : class, IParameterizedItem {
    1211
     
    1514    }
    1615
    17     private Lazy<ThreadLocal<IItem>> cachedActualValues;
    18     protected IItem CachedActualValue {
    19       get { return cachedActualValues.Value.Value; }
    20       set { cachedActualValues.Value.Value = value; }
    21     }
    22 
    23     private Lazy<ThreadLocal<IExecutionContext>> executionContexts;
    24     public IExecutionContext ExecutionContext {
    25       get { return executionContexts.Value.Value; }
    26       set {
    27         if (value != executionContexts.Value.Value) {
    28           executionContexts.Value.Value = value;
    29           cachedActualValues.Value.Value = null;
    30         }
    31       }
    32     }
    33 
    3416    [StorableConstructor]
    35     protected ContextLookupParameter(StorableConstructorFlag _) : base(_) {
    36       cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    37       executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    38     }
    39     protected ContextLookupParameter(ContextLookupParameter<T> original, Cloner cloner)
    40       : base(original, cloner) {
    41       cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    42       executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    43     }
    44     public ContextLookupParameter() : this("Anonymous") { }
    45     public ContextLookupParameter(string name, string description = null)
    46       : base(name, description, typeof(T)) {
    47       cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    48       executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     17    protected ContextLookupParameter(StorableConstructorFlag _) : base(_) { }
     18    protected ContextLookupParameter(ContextLookupParameter<T> original, Cloner cloner) : base(original, cloner) { }
     19    public ContextLookupParameter() : base("ContextLookup." + typeof(T).Name, string.Empty, typeof(T)) {
     20      Hidden = true;
    4921    }
    5022
     
    5325    }
    5426
    55     protected override IItem GetActualValue() {
    56       if (CachedActualValue != null) return CachedActualValue;
    57 
     27    protected override IItem GetActualValueFromContext() {
    5828      IItem item = null;
    5929      var context = ExecutionContext;
     
    6535        context = context.Parent;
    6636      }
    67       CachedActualValue = item;
    6837      return item;
    6938    }
     
    7241      throw new NotSupportedException("The context lookup parameter may not be used to set an item.");
    7342    }
    74 
    75     public virtual void InitializeState() {
    76     }
    77     public virtual void ClearState() {
    78       if (cachedActualValues.IsValueCreated) {
    79         cachedActualValues.Value.Dispose();
    80         cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    81       }
    82       if (executionContexts.IsValueCreated) {
    83         executionContexts.Value.Dispose();
    84         executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    85       }
    86     }
    8743  }
    8844}
  • branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj

    r17254 r17257  
    123123    <Compile Include="ConstrainedValueParameter.cs" />
    124124    <Compile Include="ContextLookupParameter.cs" />
     125    <Compile Include="ContextParameter.cs" />
    125126    <Compile Include="FixedValueParameter.cs" />
    126127    <Compile Include="OptionalConstrainedValueParameter.cs" />
  • branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/LookupParameter.cs

    r17254 r17257  
    2121
    2222using System;
    23 using System.Threading;
    2423using HEAL.Attic;
    2524using HeuristicLab.Common;
     
    3231  [Item("LookupParameter", "A parameter whose value is retrieved from or written to a scope.")]
    3332  [StorableType("84FE5F33-94B8-4E30-B1CB-CD15314FB83B")]
    34   public class LookupParameter<T> : Parameter, IStatefulItem, ILookupParameter<T> where T : class, IItem {
     33  public class LookupParameter<T> : ContextParameter, ILookupParameter<T> where T : class, IItem {
    3534    [Storable]
    3635    private string actualName;
     
    6059    }
    6160
    62     private Lazy<ThreadLocal<IItem>> cachedActualValues;
    63     protected IItem CachedActualValue {
    64       get { return cachedActualValues.Value.Value; }
    65       set { cachedActualValues.Value.Value = value; }
    66     }
    67 
    68     private Lazy<ThreadLocal<IExecutionContext>> executionContexts;
    69     public IExecutionContext ExecutionContext {
    70       get { return executionContexts.Value.Value; }
    71       set {
    72         if (value != executionContexts.Value.Value) {
    73           executionContexts.Value.Value = value;
    74           cachedActualValues.Value.Value = null;
    75         }
    76       }
    77     }
    78 
    7961    [StorableConstructor]
    80     protected LookupParameter(StorableConstructorFlag _) : base(_) {
    81       cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    82       executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    83     }
     62    protected LookupParameter(StorableConstructorFlag _) : base(_) { }
    8463    protected LookupParameter(LookupParameter<T> original, Cloner cloner)
    8564      : base(original, cloner) {
    8665      actualName = original.actualName;
    87       this.Hidden = original.Hidden;
    88       cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    89       executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    9066    }
    9167    public LookupParameter()
    9268      : base("Anonymous", typeof(T)) {
    9369      this.actualName = Name;
    94       this.Hidden = false;
    95       cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    96       executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    9770    }
    9871    public LookupParameter(string name)
    9972      : base(name, typeof(T)) {
    10073      this.actualName = Name;
    101       this.Hidden = false;
    102       cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    103       executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    10474    }
    10575    public LookupParameter(string name, string description)
    10676      : base(name, description, typeof(T)) {
    10777      this.actualName = Name;
    108       this.Hidden = false;
    109       cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    110       executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    11178    }
    11279    public LookupParameter(string name, string description, string actualName)
    11380      : base(name, description, typeof(T)) {
    11481      this.actualName = string.IsNullOrWhiteSpace(actualName) ? Name : actualName;
    115       this.Hidden = false;
    116       cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    117       executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    11882    }
    11983
     
    137101        IParameter param = null;
    138102        while (currentExecutionContext != null && (!currentExecutionContext.Parameters.TryGetValue(translatedName, out param)
    139           || param is IContextLookupParameter))
     103          || param is IContextParameter))
    140104          currentExecutionContext = currentExecutionContext.Parent;
    141105        if (currentExecutionContext == null) break;
     
    167131    }
    168132
    169     protected override IItem GetActualValue() {
    170       if (CachedActualValue != null) return CachedActualValue;
    171 
     133    protected override IItem GetActualValueFromContext() {
    172134      string translatedName = Name;
    173135      var value = GetValue(ExecutionContext, ref translatedName);
     
    178140                        typeof(T).GetPrettyName())
    179141        );
    180       CachedActualValue = value;
    181142      return value;
    182143    }
     
    223184    }
    224185
    225     public virtual void InitializeState() {
    226     }
    227     public virtual void ClearState() {
    228       if (cachedActualValues.IsValueCreated) {
    229         cachedActualValues.Value.Dispose();
    230         cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    231       }
    232       if (executionContexts.IsValueCreated) {
    233         executionContexts.Value.Dispose();
    234         executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
    235       }
    236     }
    237 
    238186    public event EventHandler ActualNameChanged;
    239187    protected virtual void OnActualNameChanged() {
  • branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ScopeParameter.cs

    r17226 r17257  
    2121
    2222using System;
     23using HEAL.Attic;
    2324using HeuristicLab.Common;
    2425using HeuristicLab.Core;
    25 using HEAL.Attic;
    2626
    2727namespace HeuristicLab.Parameters {
     
    6161    }
    6262
    63     protected override IItem GetActualValue() {
     63    protected override IItem GetActualValueFromContext() {
    6464      return ExecutionContext.Scope;
    6565    }
  • branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ScopeTreeLookupParameter.cs

    r17226 r17257  
    2323using System.Collections.Generic;
    2424using System.Linq;
     25using HEAL.Attic;
    2526using HeuristicLab.Common;
    2627using HeuristicLab.Core;
    27 using HEAL.Attic;
    2828
    2929namespace HeuristicLab.Parameters {
     
    8686    }
    8787
    88     protected override IItem GetActualValue() {
     88    protected override IItem GetActualValueFromContext() {
    8989      IEnumerable<IScope> scopes = new IScope[] { ExecutionContext.Scope };
    9090      for (int i = 0; i < depth; i++)
Note: See TracChangeset for help on using the changeset viewer.