Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/16/12 16:28:49 (12 years ago)
Author:
gkronber
Message:

merged r7609:7840 from trunk into time series branch

Location:
branches/HeuristicLab.TimeSeries
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.TimeSeries

  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/ElloumiCTAPInstanceProvider.cs

    r7548 r7842  
    2626using System.Reflection;
    2727using System.Text.RegularExpressions;
     28using ICSharpCode.SharpZipLib.Zip;
    2829
    2930namespace HeuristicLab.Problems.Instances.ElloumiCTAP {
     
    4950    }
    5051
     52    private const string FileName = "ElloumiCTAP";
     53
    5154    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
    52       var solutions = Assembly.GetExecutingAssembly()
    53         .GetManifestResourceNames()
    54         .Where(x => x.EndsWith(".sol"))
    55         .ToDictionary(x => Path.GetFileNameWithoutExtension(x) + ".dat", x => x);
     55      Dictionary<string, string> solutions = new Dictionary<string, string>();
     56      var solutionsArchiveName = GetResourceName(FileName + @"\.sol\.zip");
     57      if (!String.IsNullOrEmpty(solutionsArchiveName)) {
     58        using (var solutionsZipFile = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName))) {
     59          foreach (var entry in GetZipContents(solutionsZipFile))
     60            solutions.Add(Path.GetFileNameWithoutExtension(entry) + ".dat", entry);
     61        }
     62      }
     63      var instanceArchiveName = GetResourceName(FileName + @"\.dat\.zip");
     64      if (String.IsNullOrEmpty(instanceArchiveName)) yield break;
    5665
    57       return Assembly.GetExecutingAssembly()
    58           .GetManifestResourceNames()
    59           .Where(x => x.EndsWith(".dat"))
    60           .OrderBy(x => x)
    61           .Select(x => new ElloumiCTAPDataDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty));
     66      using (var instanceStream = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) {
     67        foreach (var entry in GetZipContents(instanceStream).OrderBy(x => x)) {
     68          yield return new ElloumiCTAPDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, solutions.ContainsKey(entry) ? solutions[entry] : String.Empty);
     69        }
     70      }
    6271    }
    6372
    6473    public override CTAPData LoadData(IDataDescriptor id) {
    6574      var descriptor = (ElloumiCTAPDataDescriptor)id;
    66       using (var stream = Assembly.GetExecutingAssembly()
    67         .GetManifestResourceStream(descriptor.InstanceIdentifier)) {
    68         var parser = new ElloumiCTAPParser();
    69         parser.Parse(stream);
    70         var instance = Load(parser);
     75      var instanceArchiveName = GetResourceName(FileName + @"\.dat\.zip");
     76      using (var instancesZipFile = new ZipFile(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) {
     77        var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier);
     78        using (var stream = instancesZipFile.GetInputStream(entry)) {
     79          var parser = new ElloumiCTAPParser();
     80          parser.Parse(stream);
     81          var instance = Load(parser);
    7182
    72         instance.Name = id.Name;
    73         instance.Description = id.Description;
     83          instance.Name = id.Name;
     84          instance.Description = id.Description;
    7485
    75         if (!String.IsNullOrEmpty(descriptor.SolutionIdentifier)) {
    76           using (Stream solStream = Assembly.GetExecutingAssembly()
    77             .GetManifestResourceStream(descriptor.SolutionIdentifier)) {
    78             ElloumiCTAPSolutionParser slnParser = new ElloumiCTAPSolutionParser();
    79             slnParser.Parse(solStream, instance.MemoryRequirements.Length);
    80             if (slnParser.Error != null) throw slnParser.Error;
     86          if (!String.IsNullOrEmpty(descriptor.SolutionIdentifier)) {
     87            var solutionsArchiveName = GetResourceName(FileName + @"\.sol\.zip");
     88            using (var solutionsZipFile = new ZipFile(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName))) {
     89              entry = solutionsZipFile.GetEntry(descriptor.SolutionIdentifier);
     90              using (var solStream = solutionsZipFile.GetInputStream(entry)) {
     91                ElloumiCTAPSolutionParser slnParser = new ElloumiCTAPSolutionParser();
     92                slnParser.Parse(solStream, instance.MemoryRequirements.Length);
     93                if (slnParser.Error != null) throw slnParser.Error;
    8194
    82             instance.BestKnownAssignment = slnParser.Assignment;
    83             instance.BestKnownQuality = slnParser.Quality;
     95                instance.BestKnownAssignment = slnParser.Assignment;
     96                instance.BestKnownQuality = slnParser.Quality;
     97              }
     98            }
    8499          }
     100          return instance;
    85101        }
    86         return instance;
    87102      }
    88103    }
     
    119134      return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + ".";
    120135    }
     136
     137    protected virtual string GetResourceName(string fileName) {
     138      return Assembly.GetExecutingAssembly().GetManifestResourceNames()
     139              .Where(x => Regex.Match(x, @".*\.Data\." + fileName).Success).SingleOrDefault();
     140    }
     141
     142    protected IEnumerable<string> GetZipContents(ZipInputStream zipFile) {
     143      ZipEntry entry;
     144      while ((entry = zipFile.GetNextEntry()) != null) {
     145        yield return entry.Name;
     146      }
     147    }
    121148  }
    122149}
Note: See TracChangeset for help on using the changeset viewer.