Free cookie consent management tool by TermsFeed Policy Generator

source: branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Core/Index.cs @ 16123

Last change on this file since 16123 was 14549, checked in by jkarder, 8 years ago

#2520: worked on persistence

File size: 2.0 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System.Collections.Generic;
23using HeuristicLab.PluginInfrastructure;
24
25namespace HeuristicLab.Persistence {
26  [NonDiscoverableType]
27  internal sealed class Index<T> where T : class {
28    private Dictionary<T, uint> indexes;
29    private Dictionary<uint, T> values;
30    private uint nextIndex;
31
32    public Index() {
33      this.indexes = new Dictionary<T, uint>();
34      this.values = new Dictionary<uint, T>();
35      nextIndex = 1;
36    }
37    public Index(IEnumerable<T> values)
38      : this() {
39      foreach (var value in values) {
40        this.indexes.Add(value, nextIndex);
41        this.values.Add(nextIndex, value);
42        nextIndex++;
43      }
44    }
45
46    public uint GetIndex(T value) {
47      uint index = 0;
48      if (value != null && !indexes.TryGetValue(value, out index)) {
49        index = nextIndex;
50        nextIndex++;
51        indexes.Add(value, index);
52        values.Add(index, value);
53      }
54      return index;
55    }
56    public T GetValue(uint index) {
57      return index == 0 ? null : values[index];
58    }
59    public IEnumerable<T> GetValues() {
60      return values.Values;
61    }
62  }
63}
Note: See TracBrowser for help on using the repository browser.