Changeset 7638 for trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBInstanceProvider.cs
- Timestamp:
- 03/20/12 11:06:32 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.Instances.QAPLIB/3.3/QAPLIBInstanceProvider.cs
r7558 r7638 26 26 using System.Reflection; 27 27 using System.Text.RegularExpressions; 28 using ICSharpCode.SharpZipLib.Zip; 28 29 29 30 namespace HeuristicLab.Problems.Instances.QAPLIB { … … 159 160 } 160 161 162 private const string FileName = "qap"; 163 161 164 public override IEnumerable<IDataDescriptor> GetDataDescriptors() { 162 var solutions = Assembly.GetExecutingAssembly() 163 .GetManifestResourceNames() 164 .Where(x => x.EndsWith(".sln")) 165 .ToDictionary(x => Path.GetFileNameWithoutExtension(x) + ".dat", x => x); 166 167 return Assembly.GetExecutingAssembly() 168 .GetManifestResourceNames() 169 .Where(x => x.EndsWith(".dat")) 170 .OrderBy(x => x) 171 .Select(x => new QAPLIBDataDescriptor(GetPrettyName(x), GetDescription(), x, solutions.ContainsKey(x) ? solutions[x] : String.Empty)); 165 Dictionary<string, string> solutions = new Dictionary<string, string>(); 166 var solutionsArchiveName = GetResourceName(FileName + @"\.sln\.zip"); 167 if (!String.IsNullOrEmpty(solutionsArchiveName)) { 168 using (var solutionsZipFile = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName))) { 169 foreach (var entry in GetZipContents(solutionsZipFile)) 170 solutions.Add(Path.GetFileNameWithoutExtension(entry) + ".dat", entry); 171 } 172 } 173 var instanceArchiveName = GetResourceName(FileName + @"\.dat\.zip"); 174 if (String.IsNullOrEmpty(instanceArchiveName)) yield break; 175 176 using (var instanceStream = new ZipInputStream(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) { 177 foreach (var entry in GetZipContents(instanceStream).OrderBy(x => x)) { 178 yield return new QAPLIBDataDescriptor(Path.GetFileNameWithoutExtension(entry), GetDescription(), entry, solutions.ContainsKey(entry) ? solutions[entry] : String.Empty); 179 } 180 } 172 181 } 173 182 174 183 public override QAPData LoadData(IDataDescriptor id) { 175 184 var descriptor = (QAPLIBDataDescriptor)id; 176 using (var stream = Assembly.GetExecutingAssembly() 177 .GetManifestResourceStream(descriptor.InstanceIdentifier)) { 178 var parser = new QAPLIBParser(); 179 parser.Parse(stream); 180 var instance = Load(parser); 181 instance.Name = id.Name; 182 instance.Description = id.Description; 183 184 if (!String.IsNullOrEmpty(descriptor.SolutionIdentifier)) { 185 using (Stream solStream = Assembly.GetExecutingAssembly() 186 .GetManifestResourceStream(descriptor.SolutionIdentifier)) { 187 var slnParser = new QAPLIBSolutionParser(); 188 slnParser.Parse(solStream, true); 189 if (slnParser.Error != null) throw slnParser.Error; 190 191 int[] assignment = slnParser.Assignment; 192 if (reversedSolutions.Contains(instance.Name)) { 193 assignment = (int[])slnParser.Assignment.Clone(); 194 for (int i = 0; i < assignment.Length; i++) 195 assignment[slnParser.Assignment[i]] = i; 185 var instanceArchiveName = GetResourceName(FileName + @"\.dat\.zip"); 186 using (var instancesZipFile = new ZipFile(GetType().Assembly.GetManifestResourceStream(instanceArchiveName))) { 187 var entry = instancesZipFile.GetEntry(descriptor.InstanceIdentifier); 188 189 using (var stream = instancesZipFile.GetInputStream(entry)) { 190 var parser = new QAPLIBParser(); 191 parser.Parse(stream); 192 var instance = Load(parser); 193 instance.Name = id.Name; 194 instance.Description = id.Description; 195 196 if (!String.IsNullOrEmpty(descriptor.SolutionIdentifier)) { 197 var solutionsArchiveName = GetResourceName(FileName + @"\.sln\.zip"); 198 using (var solutionsZipFile = new ZipFile(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName))) { 199 entry = solutionsZipFile.GetEntry(descriptor.SolutionIdentifier); 200 using (var solStream = solutionsZipFile.GetInputStream(entry)) { 201 var slnParser = new QAPLIBSolutionParser(); 202 slnParser.Parse(solStream, true); 203 if (slnParser.Error != null) throw slnParser.Error; 204 205 int[] assignment = slnParser.Assignment; 206 if (reversedSolutions.Contains(instance.Name)) { 207 assignment = (int[])slnParser.Assignment.Clone(); 208 for (int i = 0; i < assignment.Length; i++) 209 assignment[slnParser.Assignment[i]] = i; 210 } 211 instance.BestKnownAssignment = assignment; 212 instance.BestKnownQuality = slnParser.Quality; 213 } 196 214 } 197 instance.BestKnownAssignment = assignment;198 instance.BestKnownQuality = slnParser.Quality;199 215 } 216 return instance; 200 217 } 201 return instance;202 218 } 203 219 } … … 224 240 } 225 241 226 private string GetPrettyName(string instanceIdentifier) {227 return Regex.Match(instanceIdentifier, GetType().Namespace + @"\.Data\.(.*)\.dat").Groups[1].Captures[0].Value;228 }229 230 242 private string GetDescription() { 231 243 return "Embedded instance of plugin version " + Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).Cast<AssemblyFileVersionAttribute>().First().Version + "."; 232 244 } 245 246 protected virtual string GetResourceName(string fileName) { 247 return Assembly.GetExecutingAssembly().GetManifestResourceNames() 248 .Where(x => Regex.Match(x, @".*\.Data\." + fileName).Success).SingleOrDefault(); 249 } 250 251 protected IEnumerable<string> GetZipContents(ZipInputStream zipFile) { 252 ZipEntry entry; 253 while ((entry = zipFile.GetNextEntry()) != null) { 254 yield return entry.Name; 255 } 256 } 233 257 } 234 258 }
Note: See TracChangeset
for help on using the changeset viewer.