Skip to content

Commit

Permalink
Refactored ContextProperty
Browse files Browse the repository at this point in the history
  • Loading branch information
Pretasoc committed Mar 12, 2018
1 parent e4363ca commit f94297c
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ public partial class ContextProperty<TValue>
{
private partial class ContextProviderTree
{
internal class ContextProviderTreeNode : ITreeNode<IContextProvider<ContextProperty<TValue>, TValue>>,
IEnumerable<IContextProvider<ContextProperty<TValue>, TValue>>
internal class ContextProviderTreeNode : ITreeNode<IContextProvider<IContextProperty<TValue>, TValue>>,
IEnumerable<IContextProvider<IContextProperty<TValue>, TValue>>
{
private readonly List<ContextProviderTreeNode> _children;
private readonly ContextProviderTree _tree;

public ContextProviderTreeNode(ContextProviderTree tree, IContextProvider<ContextProperty<TValue>, TValue> value)
public ContextProviderTreeNode(ContextProviderTree tree, IContextProvider<IContextProperty<TValue>, TValue> value)
{
_tree = tree;
_children = new List<ContextProviderTreeNode>();
Expand All @@ -23,9 +23,9 @@ public ContextProviderTreeNode(ContextProviderTree tree, IContextProvider<Contex

public ContextProviderTreeNode Parent { get; private set; }

public IEnumerator<IContextProvider<ContextProperty<TValue>, TValue>> GetEnumerator()
public IEnumerator<IContextProvider<IContextProperty<TValue>, TValue>> GetEnumerator()
{
IEnumerable<IContextProvider<ContextProperty<TValue>, TValue>> EnumeratorChildren()
IEnumerable<IContextProvider<IContextProperty<TValue>, TValue>> EnumeratorChildren()
{
var currentNode = this;
while (currentNode != null)
Expand All @@ -43,7 +43,7 @@ IEnumerator IEnumerable.GetEnumerator()
return GetEnumerator();
}

public ITreeNode<IContextProvider<ContextProperty<TValue>, TValue>> AddChild(IContextProvider<ContextProperty<TValue>, TValue> node)
public ITreeNode<IContextProvider<IContextProperty<TValue>, TValue>> AddChild(IContextProvider<IContextProperty<TValue>, TValue> node)
{
var child = new ContextProviderTreeNode(_tree, node)
{
Expand All @@ -55,22 +55,22 @@ public ITreeNode<IContextProvider<ContextProperty<TValue>, TValue>> AddChild(ICo
return child;
}

public void Detach(ITreeNode<IContextProvider<ContextProperty<TValue>, TValue>> child)
public void Detach(ITreeNode<IContextProvider<IContextProperty<TValue>, TValue>> child)
{
var node = (ContextProviderTreeNode) child;
node.Parent = null;
_children.Remove(node);
}

public void Attach(ITreeNode<IContextProvider<ContextProperty<TValue>, TValue>> child)
public void Attach(ITreeNode<IContextProvider<IContextProperty<TValue>, TValue>> child)
{
var node = (ContextProviderTreeNode) child;
node.Parent = this;
_children.Add((ContextProviderTreeNode) child);
}

public IContextProvider<ContextProperty<TValue>, TValue> Value { get; set; }
public IEnumerable<ITreeNode<IContextProvider<ContextProperty<TValue>, TValue>>> Children => _children.AsReadOnly();
public IContextProvider<IContextProperty<TValue>, TValue> Value { get; set; }
public IEnumerable<ITreeNode<IContextProvider<IContextProperty<TValue>, TValue>>> Children => _children.AsReadOnly();
}
}
}
Expand Down
44 changes: 22 additions & 22 deletions phirSOFT.ContextProperties/ContextProperty.ContextProviderTree.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,18 @@ namespace phirSOFT.ContextProperties
{
public partial class ContextProperty<TValue>
{
private partial class ContextProviderTree : ITree<IContextProvider<ContextProperty<TValue>, TValue>>,
IContextPool<ContextProperty<TValue>, TValue>
private partial class ContextProviderTree : ITree<IContextProvider<IContextProperty<TValue>, TValue>>,
IContextPool<IContextProperty<TValue>, TValue>
{
private readonly Dictionary<IContextProvider<ContextProperty<TValue>, TValue>, ContextProviderTreeNode> _nodes =
new Dictionary<IContextProvider<ContextProperty<TValue>, TValue>, ContextProviderTreeNode>();
private readonly Dictionary<IContextProvider<IContextProperty<TValue>, TValue>, ContextProviderTreeNode> _nodes =
new Dictionary<IContextProvider<IContextProperty<TValue>, TValue>, ContextProviderTreeNode>();

public ContextProviderTree(IContextProvider<ContextProperty<TValue>, TValue> defaultContext)
public ContextProviderTree(IContextProvider<IContextProperty<TValue>, TValue> defaultContext)
{
Root = new ContextProviderTreeNode(this, defaultContext);
}

public void Add(IContextProvider<ContextProperty<TValue>, TValue> item)
public void Add(IContextProvider<IContextProperty<TValue>, TValue> item)
{
this.Insert(item);
}
Expand All @@ -32,17 +32,17 @@ public void Clear()
}
}

public bool Contains(IContextProvider<ContextProperty<TValue>, TValue> item)
public bool Contains(IContextProvider<IContextProperty<TValue>, TValue> item)
{
return _nodes.ContainsKey(item);
}

public void CopyTo(IContextProvider<ContextProperty<TValue>, TValue>[] array, int arrayIndex)
public void CopyTo(IContextProvider<IContextProperty<TValue>, TValue>[] array, int arrayIndex)
{
_nodes.Keys.CopyTo(array, arrayIndex);
}

public bool Remove(IContextProvider<ContextProperty<TValue>, TValue> item)
public bool Remove(IContextProvider<IContextProperty<TValue>, TValue> item)
{
var node = _nodes[item];
RemoveNode(node);
Expand All @@ -52,43 +52,43 @@ public bool Remove(IContextProvider<ContextProperty<TValue>, TValue> item)
public int Count => _nodes.Count;
public bool IsReadOnly => false;

IEnumerator<KeyValuePair<IContextProvider<ContextProperty<TValue>, TValue>, IEnumerable<IContextProvider<ContextProperty<TValue>, TValue>>>>
IEnumerable<KeyValuePair<IContextProvider<ContextProperty<TValue>, TValue>, IEnumerable<IContextProvider<ContextProperty<TValue>, TValue>>
IEnumerator<KeyValuePair<IContextProvider<IContextProperty<TValue>, TValue>, IEnumerable<IContextProvider<IContextProperty<TValue>, TValue>>>>
IEnumerable<KeyValuePair<IContextProvider<IContextProperty<TValue>, TValue>, IEnumerable<IContextProvider<IContextProperty<TValue>, TValue>>
>>.GetEnumerator()
{
return _nodes.Select(kv =>
new KeyValuePair<IContextProvider<ContextProperty<TValue>, TValue>, IEnumerable<IContextProvider<ContextProperty<TValue>, TValue>>>(
new KeyValuePair<IContextProvider<IContextProperty<TValue>, TValue>, IEnumerable<IContextProvider<IContextProperty<TValue>, TValue>>>(
kv.Key, kv.Value)).GetEnumerator();
}

public IEnumerator<IContextProvider<ContextProperty<TValue>, TValue>> GetEnumerator()
public IEnumerator<IContextProvider<IContextProperty<TValue>, TValue>> GetEnumerator()
{
return _nodes.Keys.GetEnumerator();
}

public bool ContainsKey(IContextProvider<ContextProperty<TValue>, TValue> key)
public bool ContainsKey(IContextProvider<IContextProperty<TValue>, TValue> key)
{
return _nodes.ContainsKey(key);
}

public bool TryGetValue(IContextProvider<ContextProperty<TValue>, TValue> key,
out IEnumerable<IContextProvider<ContextProperty<TValue>, TValue>> value)
public bool TryGetValue(IContextProvider<IContextProperty<TValue>, TValue> key,
out IEnumerable<IContextProvider<IContextProperty<TValue>, TValue>> value)
{
var result = _nodes.TryGetValue(key, out var node);
value = node;
return result;
}


public IEnumerable<IContextProvider<ContextProperty<TValue>, TValue>> this[IContextProvider<ContextProperty<TValue>, TValue> key]
public IEnumerable<IContextProvider<IContextProperty<TValue>, TValue>> this[IContextProvider<IContextProperty<TValue>, TValue> key]
{
get
{
if (_nodes.ContainsKey(key))
return _nodes[key];

IContextProvider<ContextProperty<TValue>, TValue> lastFound = null;
var comparer = TopologicalComparer<IContextProvider<ContextProperty<TValue>, TValue>>.Default;
IContextProvider<IContextProperty<TValue>, TValue> lastFound = null;
var comparer = TopologicalComparer<IContextProvider<IContextProperty<TValue>, TValue>>.Default;

foreach (var nodesKey in _nodes.Keys)
{
Expand All @@ -101,15 +101,15 @@ public IEnumerable<IContextProvider<ContextProperty<TValue>, TValue>> this[ICont
}
}

public IEnumerable<IContextProvider<ContextProperty<TValue>, TValue>> Keys => _nodes.Keys;
public IEnumerable<IEnumerable<IContextProvider<ContextProperty<TValue>, TValue>>> Values => _nodes.Values;
public IEnumerable<IContextProvider<IContextProperty<TValue>, TValue>> Keys => _nodes.Keys;
public IEnumerable<IEnumerable<IContextProvider<IContextProperty<TValue>, TValue>>> Values => _nodes.Values;

IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}

public ITreeNode<IContextProvider<ContextProperty<TValue>, TValue>> Root { get; }
public ITreeNode<IContextProvider<IContextProperty<TValue>, TValue>> Root { get; }

private void RemoveNode(ContextProviderTreeNode node)
{
Expand Down
8 changes: 4 additions & 4 deletions phirSOFT.ContextProperties/ContextProperty.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,22 @@ namespace phirSOFT.ContextProperties
{
public partial class ContextProperty<TValue> : IContextProperty<TValue>
{
public ContextProperty(IContextProvider<ContextProperty<TValue>, TValue> defaultContext)
public ContextProperty(IContextProvider<IContextProperty<TValue>, TValue> defaultContext)
{
DefaultContext = defaultContext;
ContextPool = new ContextProviderTree(defaultContext);
}

public ContextProperty(IContextPool<ContextProperty<TValue>, TValue> contextPool)
public ContextProperty(IContextPool<IContextProperty<TValue>, TValue> contextPool)
{
ContextPool = contextPool;
}

public IContextPool<ContextProperty<TValue>, TValue> ContextPool { get; }
public IContextPool<IContextProperty<TValue>, TValue> ContextPool { get; }

public IContextProvider<ContextProperty<TValue>, TValue> DefaultContext { get; set; }

public TValue this[object target, IContextProvider<ContextProperty<TValue>, TValue> context] => ContextPool[context]
public TValue this[object target, IContextProvider<IContextProperty<TValue>, TValue> context] => ContextPool[context]
.First(c => c.OverridesValue(target, this)).GetValue(target, this);
}
}

0 comments on commit f94297c

Please sign in to comment.