Free cookie consent management tool by TermsFeed Policy Generator

source: branches/2435-alglib_3_15/HeuristicLab.Problems.BinPacking/3.3/3D/Instances/ThreeDInstanceParser.cs @ 16683

Last change on this file since 16683 was 16565, checked in by gkronber, 6 years ago

#2520: merged changes from PersistenceOverhaul branch (r16451:16564) into trunk

File size: 2.7 KB
Line 
1#region License Information
2
3/* HeuristicLab
4 * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
5 *
6 * This file is part of HeuristicLab.
7 *
8 * HeuristicLab is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * HeuristicLab is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#endregion
23
24using System;
25using System.Collections.Generic;
26using System.IO;
27using System.Text;
28
29namespace HeuristicLab.Problems.BinPacking3D {
30  public class ThreeDInstanceParser {
31    public PackingShape Bin { get; private set; }
32    public List<PackingItem> Items { get; private set; }
33
34    public void Parse(Stream stream) {
35      var reader = new StreamReader(stream);
36      var length = GetNextInteger(reader);
37      var width = GetNextInteger(reader);
38      var height = GetNextInteger(reader);
39      var maxWeight = GetNextInteger(reader);
40      Bin = new PackingShape(width, height, length);
41      Items = new List<PackingItem>();
42      while (true) {
43        try {
44          var id = GetNextInteger(reader);
45          var pieces = GetNextInteger(reader);
46          length = GetNextInteger(reader);
47          width = GetNextInteger(reader);
48          height = GetNextInteger(reader);
49          var weight = GetNextInteger(reader);
50          var stack = GetNextInteger(reader);
51          var material = GetNextInteger(reader);
52          var rotate = GetNextInteger(reader);
53          var tilt = GetNextInteger(reader);
54          for (var i = 0; i < pieces; i++) {
55            Items.Add(new PackingItem(width, height, length, Bin, weight, material));
56          }
57        } catch (InvalidOperationException) {
58          break;
59        }
60      }
61    }
62
63    private int GetNextInteger(StreamReader reader) {
64      var next = reader.Read();
65      var builder = new StringBuilder();
66      while (next >= 0 && !char.IsDigit((char)next)) next = reader.Read();
67      if (next == -1) throw new InvalidOperationException("No further integer available");
68      while (char.IsDigit((char)next)) {
69        builder.Append((char)next);
70        next = reader.Read();
71        if (next == -1) break;
72      }
73      return int.Parse(builder.ToString());
74    }
75  }
76}
Note: See TracBrowser for help on using the repository browser.