Changeset 11975 for branches/ALPS/HeuristicLab.Core
- Timestamp:
- 02/10/15 09:57:29 (10 years ago)
- Location:
- branches/ALPS
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ALPS
- Property svn:mergeinfo changed
-
branches/ALPS/HeuristicLab.Core/3.3/Collections/DirectedGraph/Arc.cs
r11256 r11975 56 56 } 57 57 58 [Storable]59 protected object data;60 public object Data {61 get { return data; }62 set {63 if (data == value) return;64 data = value;65 OnChanged(this, EventArgs.Empty);66 }67 }68 58 69 59 [StorableConstructor] 70 p ublicArc(bool deserializing) : base(deserializing) { }60 protected Arc(bool deserializing) : base(deserializing) { } 71 61 72 62 public Arc(IVertex source, IVertex target) { … … 81 71 label = original.Label; 82 72 weight = original.Weight; 83 if (data is IDeepCloneable)84 data = cloner.Clone((IDeepCloneable)data);85 else data = original.Data;86 73 } 87 74 public override IDeepCloneable Clone(Cloner cloner) { return new Arc(this, cloner); } … … 96 83 97 84 [StorableClass] 98 public class Arc<T> : Arc, IArc<T> where T : class,IItem { 85 public class Arc<T> : Arc, IArc<T> where T : class,IDeepCloneable { 86 [Storable] 87 protected T data; 88 public T Data { 89 get { return data; } 90 set { 91 if (data == value) return; 92 data = value; 93 OnChanged(this, EventArgs.Empty); 94 } 95 } 96 97 public override IDeepCloneable Clone(Cloner cloner) { 98 return new Arc<T>(this, cloner); 99 } 100 101 protected Arc(Arc<T> original, Cloner cloner) 102 : base(original, cloner) { 103 if (original.Data != null) 104 Data = cloner.Clone(original.Data); 105 } 106 99 107 public Arc(bool deserializing) 100 108 : base(deserializing) { … … 108 116 : base(original, cloner) { 109 117 } 110 111 new public IVertex<T> Source {112 get { return (IVertex<T>)base.Source; }113 }114 new public IVertex<T> Target {115 get { return (IVertex<T>)base.Target; }116 }117 118 } 118 119 } -
branches/ALPS/HeuristicLab.Core/3.3/Collections/DirectedGraph/DirectedGraph.cs
r11444 r11975 102 102 vertex.ArcAdded += Vertex_ArcAdded; 103 103 vertex.ArcRemoved += Vertex_ArcRemoved; 104 OnVerte dAdded(this, new EventArgs<IVertex>(vertex));104 OnVertexAdded(this, new EventArgs<IVertex>(vertex)); 105 105 } 106 106 } 107 107 108 108 public virtual void AddVertices(IEnumerable<IVertex> vertexList) { 109 var hash = new HashSet<IVertex>(vertexList); 110 var arcList = vertexList.SelectMany(v => v.InArcs.Concat(v.OutArcs)); 111 if (arcList.Any(x => !hash.Contains(x.Source) || !hash.Contains(x.Target))) 112 throw new ArgumentException("Vertex arcs are connected to vertices not in the graph."); 113 // if everything is in order, add the vertices to the directed graph 114 foreach (var v in vertexList) 115 vertices.Add(v); 116 foreach (var a in arcList) 117 arcs.Add(a); 109 foreach (var v in vertexList) { AddVertex(v); } 118 110 } 119 111 120 112 public virtual void RemoveVertices(IEnumerable<IVertex> vertexList) { 121 foreach (var v in vertexList) 122 RemoveVertex(v); 113 foreach (var v in vertexList) { RemoveVertex(v); } 123 114 } 124 115 … … 156 147 } 157 148 149 public virtual void AddArcs(IEnumerable<IArc> arcList) { 150 foreach (var a in arcList) { AddArc(a); } 151 } 152 158 153 public virtual void RemoveArc(IArc arc) { 159 154 arcs.Remove(arc); … … 164 159 } 165 160 161 public virtual void RemoveArcs(IEnumerable<IArc> arcList) { 162 foreach (var a in arcList) { RemoveArc(a); } 163 } 164 166 165 protected virtual void Vertex_ArcAdded(object sender, EventArgs<IArc> args) { 167 166 // the ArcAdded event is fired by a vertex when an arc from/to another vertex is added to its list of connections … … 178 177 // events 179 178 public event EventHandler<EventArgs<IVertex>> VertexAdded; 180 protected virtual void OnVerte dAdded(object sender, EventArgs<IVertex> args) {179 protected virtual void OnVertexAdded(object sender, EventArgs<IVertex> args) { 181 180 var added = VertexAdded; 182 181 if (added != null) -
branches/ALPS/HeuristicLab.Core/3.3/Collections/DirectedGraph/Vertex.cs
r11263 r11975 52 52 } 53 53 54 [Storable]55 private IDeepCloneable data;56 public IDeepCloneable Data {57 get { return data; }58 set {59 if (data == value) return;60 data = value;61 OnChanged(this, EventArgs.Empty);62 }63 }64 65 54 private readonly List<IArc> inArcs = new List<IArc>(); 66 55 public IEnumerable<IArc> InArcs { … … 83 72 private void AfterDeserialization() { } 84 73 85 public Vertex(IDeepCloneable data) { 86 this.data = data; 87 } 74 public Vertex() { } 88 75 89 76 protected Vertex(Vertex original, Cloner cloner) 90 77 : base(original, cloner) { 91 data = cloner.Clone(original.Data);92 78 label = original.Label; 93 79 weight = original.Weight; 94 95 80 // we do not clone the arcs here (would cause too much recursion and ultimately a stack overflow) 96 81 } … … 157 142 158 143 [StorableClass] 159 public class Vertex<T> : Vertex, IVertex<T> where T : class,IItem { 160 public new T Data { 161 get { return (T)base.Data; } 162 set { base.Data = value; } 144 public class Vertex<T> : Vertex, IVertex<T> where T : class,IDeepCloneable { 145 [Storable] 146 private T data; 147 public T Data { 148 get { return data; } 149 set { 150 if (data == value) return; 151 data = value; 152 OnChanged(this, EventArgs.Empty); 153 } 163 154 } 164 155 … … 168 159 protected Vertex(Vertex<T> original, Cloner cloner) 169 160 : base(original, cloner) { 161 if (original.Data != null) 162 Data = cloner.Clone(original.Data); 170 163 } 171 164 172 public Vertex(IDeepCloneable data) 173 : base(data) { 174 } 165 public Vertex() : base() { } 175 166 176 167 public override IDeepCloneable Clone(Cloner cloner) { -
branches/ALPS/HeuristicLab.Core/3.3/Collections/ItemSet.cs
r11171 r11975 52 52 protected ItemSet(ItemSet<T> original, Cloner cloner) { 53 53 cloner.RegisterClonedObject(original, this); 54 set = new HashSet<T>(original.Select( x => cloner.Clone(x)));54 set = new HashSet<T>(original.Select(cloner.Clone), original.set.Comparer); 55 55 } 56 56 public ItemSet() : base() { } -
branches/ALPS/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IArc.cs
r11256 r11975 21 21 22 22 using System; 23 using HeuristicLab.Common; 23 24 24 25 namespace HeuristicLab.Core { … … 28 29 string Label { get; set; } 29 30 double Weight { get; set; } 30 object Data { get; set; }31 31 32 32 event EventHandler Changed; // generic event for when the label, weight or data were changed 33 33 } 34 34 35 public interface IArc<T> : IArc where T : class,IItem { 36 new IVertex<T> Source { get; } 37 new IVertex<T> Target { get; } 35 public interface IArc<T> : IArc where T : class,IDeepCloneable { 36 T Data { get; set; } 38 37 } 39 38 } -
branches/ALPS/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IDirectedGraph.cs
r11391 r11975 26 26 namespace HeuristicLab.Core { 27 27 public interface IDirectedGraph : IItem { 28 IEnumerable<IVertex> Vertices { get; } 29 IEnumerable<IArc> Arcs { get; } 30 28 31 void Clear(); 29 32 void AddVertex(IVertex vertex); 33 void RemoveVertex(IVertex vertex); 34 30 35 void AddVertices(IEnumerable<IVertex> vertexList); 36 void RemoveVertices(IEnumerable<IVertex> vertexList); 37 31 38 IArc AddArc(IVertex source, IVertex target); 32 39 void AddArc(IArc arc); 33 void RemoveVertices(IEnumerable<IVertex> vertexList);34 void RemoveVertex(IVertex vertex);35 40 void RemoveArc(IArc arc); 36 IEnumerable<IVertex> Vertices { get; } 37 IEnumerable<IArc> Arcs { get; } 41 42 void AddArcs(IEnumerable<IArc> arcs); 43 void RemoveArcs(IEnumerable<IArc> removeArcs); 38 44 39 45 event EventHandler<EventArgs<IVertex>> VertexAdded; -
branches/ALPS/HeuristicLab.Core/3.3/Interfaces/DirectedGraph/IVertex.cs
r11241 r11975 36 36 double Weight { get; set; } 37 37 38 IDeepCloneable Data { get; set; }39 40 38 void AddArc(IArc arc); 41 39 void RemoveArc(IArc arc); … … 46 44 } 47 45 48 public interface IVertex<T> : IVertex 49 where T : class { 50 new T Data { get; set; } 46 public interface IVertex<T> : IVertex where T : class, IDeepCloneable { 47 T Data { get; set; } 51 48 } 52 49 }
Note: See TracChangeset
for help on using the changeset viewer.