Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/01/08 16:50:58 (16 years ago)
Author:
gkronber
Message:

worked on #211 (Full operator-graphs are stored multiple times in the database even though most of it is static anyway)

  • added class OperatorLink that allows to create CombinedOperators in the DatabaseOperatorLibrary which use other operators from the library (not via a copy but via a link)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.CEDMA.Core/DatabaseOperatorLibrary.cs

    r417 r418  
    55using HeuristicLab.Core;
    66using HeuristicLab.CEDMA.DB.Interfaces;
     7using HeuristicLab.Operators;
    78
    89namespace HeuristicLab.CEDMA.Core {
     
    2930
    3031    public void Save() {
    31       Dictionary<IOperator, long> newKnownOperators = new Dictionary<IOperator,long>();
     32      Dictionary<IOperator, long> newKnownOperators = new Dictionary<IOperator, long>();
    3233      foreach(IOperator op in group.Operators) {
    3334        if(knownOperators.ContainsKey(op)) {
    3435          // update
    35           long id =knownOperators[op];
     36          long id = knownOperators[op];
    3637          Database.UpdateOperator(id, op.Name, PersistenceManager.SaveToGZip(op));
    3738          knownOperators.Remove(op);
     
    4748        Database.DeleteOperator(id);
    4849      }
    49      
     50
    5051      knownOperators = newKnownOperators;
    5152    }
     
    6263        group.AddOperator(op);
    6364      }
     65
     66      // patch all OperatorLinks
     67      foreach(IOperator op in group.Operators) {
     68        PatchLinks(op);
     69      }
     70    }
     71
     72    private void PatchLinks(IOperator op) {
     73      if(op is OperatorLink) {
     74        OperatorLink link = op as OperatorLink;
     75        link.Operator = FindOperator(link.Id);
     76      }
     77      else if(op is CombinedOperator) {
     78        CombinedOperator combinedOp = op as CombinedOperator;
     79        foreach(IOperator internalOp in combinedOp.OperatorGraph.Operators) {
     80          PatchLinks(internalOp);
     81        }
     82      }
     83    }
     84
     85    private IOperator FindOperator(long id) {
     86      foreach(KeyValuePair<IOperator, long> p in knownOperators) if(p.Value == id) return p.Key;
     87      return null;
    6488    }
    6589
     
    80104      return new DatabaseOperatorLibraryView(this);
    81105    }
     106
     107    internal long GetId(IOperator op) {
     108      return knownOperators[op];
     109    }
    82110  }
    83111}
Note: See TracChangeset for help on using the changeset viewer.