Free cookie consent management tool by TermsFeed Policy Generator

source: branches/New Persistence Exploration/Persistence/Persistence/Default/Decomposers/DictionaryDecomposer.cs @ 1447

Last change on this file since 1447 was 1447, checked in by epitzer, 15 years ago

refactoring and code clean up. (#9999)

File size: 1.8 KB
Line 
1using System;
2using System.Collections;
3using HeuristicLab.Persistence.Core;
4using HeuristicLab.Persistence.Interfaces;
5using System.Collections.Generic;
6
7namespace HeuristicLab.Persistence.Default.Decomposers {
8
9  class DictionaryAdder {
10
11    bool keyIsSet, valueIsSet;
12    object key;
13    object value;
14    readonly IDictionary dict;
15
16    public DictionaryAdder(IDictionary dict) {
17      this.dict = dict;
18      keyIsSet = false;
19      valueIsSet = false;
20    }
21
22    public void SetKey(object v) {
23      key = v;
24      keyIsSet = true;
25      check();
26    }
27
28    public void SetValue(object v) {
29      value = v;
30      valueIsSet = true;
31      check();
32    }
33
34    private void check() {
35      if ( keyIsSet && valueIsSet )
36        dict.Add(key, value);
37    }
38
39  }
40 
41  public class DictionaryDecomposer : IDecomposer {
42
43    public bool CanDecompose(Type type) {
44      return type.GetInterface(typeof(IDictionary).FullName) != null;       
45    }
46
47    public IEnumerable<Tag> DeCompose(object o) {
48      IDictionary dict = (IDictionary)o;     
49      foreach ( DictionaryEntry entry in dict) {
50        yield return new Tag("key", entry.Key);
51        yield return new Tag("value", entry.Value);
52      }
53    }
54
55    public object CreateInstance(Type t) {
56      return Activator.CreateInstance(t, true);
57    }
58
59    public object Populate(object instance, IEnumerable<Tag> o, Type t) {
60      IDictionary dict = (IDictionary)instance;
61      IEnumerator<Tag> iter = o.GetEnumerator();
62      while (iter.MoveNext()) {
63        Tag key = iter.Current;
64        iter.MoveNext();
65        Tag value = iter.Current;
66        DictionaryAdder da = new DictionaryAdder(dict);
67        key.SafeSet(da.SetKey);
68        value.SafeSet(da.SetValue);       
69      }
70      return dict;
71    }
72  }
73
74}
Note: See TracBrowser for help on using the repository browser.