Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Component.cs @ 17271

Last change on this file since 17271 was 17271, checked in by dpiringe, 5 years ago

#3026

  • renamed ParameterData to Component
  • renamed File Template.cs to Component.cs
File size: 3.1 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Threading.Tasks;
6using HeuristicLab.Core;
7using Newtonsoft.Json;
8
9namespace HeuristicLab.Manufacture {   
10  /*
11  public class ParameterData { //Blueprint, Component,  ?
12    public string Name { get; set; }
13    public string Type { get; set; }
14    public IList<ParameterData> FreeParameters { get; set; }
15    public IList<ParameterData> StaticParameters { get; set; }
16
17  }*/
18
19  public class Component {
20    public string Name { get; set; }
21    public string Type { get; set; }
22    public object Default { get; set; }
23    public string Path { get; set; }
24    public IList<object> Range { get; set; }
25
26    public IList<Component> Parameters { get; set; }
27    public IList<Component> Operators { get; set; }
28
29    [JsonIgnore]
30    public Component this[string index] {
31      get {
32        if (Parameters == null) return null;
33        foreach (var p in Parameters)
34          if (p.Name == index) return p;
35        return null;
36      }
37      set {
38        if (Parameters == null)
39          Parameters = new List<Component>();
40        Component data = this[index];
41        if (data != null && CheckConstraints(value))
42          Merge(data, value);
43        else
44          Parameters.Add(value);
45      }
46    }
47
48    public override bool Equals(object obj) {
49      if (!(obj is Component))
50        return false;
51      else
52        return obj.Cast<Component>().Name == this.Name;
53    }
54
55    public override int GetHashCode() {
56      return Name.GetHashCode();
57    }
58
59    [JsonIgnore]
60    public IList<Component> ParameterizedItems { get; set; }
61
62    [JsonIgnore]
63    public Component Reference { get; set; }
64
65    #region Helper
66    public static void Merge(Component target, Component from) {
67      target.Name = from.Name ?? target.Name;
68      target.Type = from.Type ?? target.Type;
69      target.Range = from.Range ?? target.Range;
70      target.Path = from.Path ?? target.Path;
71      target.Default = from.Default ?? target.Default;
72      target.Reference = from.Reference ?? target.Reference;
73      target.Parameters = from.Parameters ?? target.Parameters;
74      target.ParameterizedItems = from.ParameterizedItems ?? target.ParameterizedItems;
75    }
76
77    private bool CheckConstraints(Component data) =>
78      data.Range != null && data.Default != null && (
79      IsInRangeList(data.Range, data.Default) ||
80      IsInNumericRange<long>(data.Default, data.Range[0], data.Range[1]) ||
81      IsInNumericRange<double>(data.Default, data.Range[0], data.Range[1]));
82
83    private bool IsInRangeList(IEnumerable<object> list, object value) {
84      foreach (var x in list)
85        if (x.Equals(value)) return true;
86      return false;
87    }
88
89    private bool IsInNumericRange<T>(object value, object min, object max) where T : IComparable =>
90      (value != null && min != null && max != null && value is T && min is T && max is T &&
91        (((T)min).CompareTo(value) == -1 || ((T)min).CompareTo(value) == 0) &&
92        (((T)max).CompareTo(value) == 1 || ((T)max).CompareTo(value) == 0));
93    #endregion
94  }
95}
Note: See TracBrowser for help on using the repository browser.