Free cookie consent management tool by TermsFeed Policy Generator

Changeset 7467


Ignore:
Timestamp:
02/14/12 09:19:39 (12 years ago)
Author:
mkommend
Message:

#1760:

  • added possibility to exclude members from object graph traversal by name
  • excluded runs from object graph traversal in the Algorithm
  • adapted DeepCloneableCloningTest
Location:
trunk/sources
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Common/3.3/ObjectExtensions.cs

    r7259 r7467  
    3131namespace HeuristicLab.Common {
    3232  public static class ObjectExtensions {
    33     public static IEnumerable<object> GetObjectGraphObjects(this object obj, bool excludeStaticMembers = false) {
     33    public static IEnumerable<object> GetObjectGraphObjects(this object obj, HashSet<string> excludedMembers = null, bool excludeStaticMembers = false) {
    3434      if (obj == null) return Enumerable.Empty<object>();
     35      if (excludedMembers == null) excludedMembers = new HashSet<string>();
    3536
    3637      var objects = new HashSet<object>();
     
    4243        objects.Add(current);
    4344
    44         foreach (object o in GetChildObjects(current, excludeStaticMembers)) {
     45        foreach (object o in GetChildObjects(current, excludedMembers, excludeStaticMembers)) {
    4546          if (o != null && !objects.Contains(o) && !ExcludeType(o.GetType()))
    4647            stack.Push(o);
     
    7071             (type.HasElementType && ExcludeType(type.GetElementType()));
    7172    }
    72     private static IEnumerable<object> GetChildObjects(object obj, bool excludeStaticMembers) {
     73    private static IEnumerable<object> GetChildObjects(object obj, HashSet<string> excludedMembers, bool excludeStaticMembers) {
    7374      Type type = obj.GetType();
    7475
     
    9596      } else {
    9697        foreach (FieldInfo f in type.GetAllFields()) {
     98          if (excludedMembers.Contains(f.Name)) continue;
    9799          if (excludeStaticMembers && f.IsStatic) continue;
    98100          object fieldValue;
    99101          try {
    100102            fieldValue = f.GetValue(obj);
    101           } catch (SecurityException) {
     103          }
     104          catch (SecurityException) {
    102105            continue;
    103106          }
  • trunk/sources/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs

    r7259 r7467  
    265265      ExecutionState = ExecutionState.Prepared;
    266266      ExecutionTime = TimeSpan.Zero;
    267       foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects().OfType<IStatefulItem>()) {
     267      foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects(new HashSet<string>() { "runs" }).OfType<IStatefulItem>()) {
    268268        statefulObject.InitializeState();
    269269      }
     
    286286    protected virtual void OnStopped() {
    287287      ExecutionState = ExecutionState.Stopped;
    288       foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects().OfType<IStatefulItem>()) {
     288      foreach (IStatefulItem statefulObject in this.GetObjectGraphObjects(new HashSet<string>() { "runs" }).OfType<IStatefulItem>()) {
    289289        statefulObject.ClearState();
    290290      }
  • trunk/sources/HeuristicLab.Tests/HeuristicLab-3.3/DeepCloneableCloningTest.cs

    r7259 r7467  
    133133
    134134    private IEnumerable<object> CheckTotalInequality(object original, object clone) {
    135       var originalObjects = new HashSet<object>(original.GetObjectGraphObjects(true).Where(x => !x.GetType().IsValueType), new ReferenceEqualityComparer());
    136       var clonedObjects = new HashSet<object>(clone.GetObjectGraphObjects(true).Where(x => !x.GetType().IsValueType), new ReferenceEqualityComparer());
     135      var originalObjects = new HashSet<object>(original.GetObjectGraphObjects(excludeStaticMembers: true).Where(x => !x.GetType().IsValueType), new ReferenceEqualityComparer());
     136      var clonedObjects = new HashSet<object>(clone.GetObjectGraphObjects(excludeStaticMembers: true).Where(x => !x.GetType().IsValueType), new ReferenceEqualityComparer());
    137137
    138138      return originalObjects.Intersect(clonedObjects);
Note: See TracChangeset for help on using the changeset viewer.