source: trunk/CrypPlugins/KeySearcher/P2P/Tree/Node.cs

Last change on this file was 6301, checked in by konze, 7 years ago

Mock CrypNetwork and Implementation out of existing components.
Removed CrypNetwork and Implementation.

File size: 3.9 KB
Line 
1using System;
2using System.Numerics;
3using KeySearcher.Helper;
4using KeySearcher.P2P.Exceptions;
5using KeySearcher.P2P.Storage;
6using KeySearcher.Properties;
7
8namespace KeySearcher.P2P.Tree
9{
10    class Node : NodeBase
11    {
12        internal bool LeftChildFinished;
13        internal bool RightChildFinished;
14        internal bool LeftChildIntegrated = false;
15        internal bool RightChildIntegrated = false;
16
17        internal NodeBase leftChild;
18        internal NodeBase rightChild;
19        internal bool leftChildReserved;
20        internal bool rightChildReserved;
21
22        public Node(KeyQualityHelper keyQualityHelper, Node parentNode, BigInteger @from, BigInteger to, string distributedJobIdentifier)
23            : base(keyQualityHelper, parentNode, @from, to, distributedJobIdentifier)
24        {
25        }
26
27        private void LoadOrUpdateChildNodes()
28        {
29           
30        }
31
32        public override bool IsCalculated()
33        {
34            return LeftChildFinished && RightChildFinished;
35        }
36
37        public override void Reset()
38        {
39            leftChild = null;
40            rightChild = null;
41            LeftChildFinished = false;
42            RightChildFinished = false;
43            LeftChildIntegrated = false;
44            RightChildIntegrated = false;
45            Result.Clear();
46            Activity.Clear();
47            UpdateCache(); 
48        }
49
50        public void ClearChildsLocal()
51        {
52            leftChild = null;
53            rightChild = null;
54        }
55
56        public override void UpdateCache()
57        {
58            LoadOrUpdateChildNodes();
59
60            UpdateChildrenReservationIndicators();
61        }
62
63        private void UpdateChildrenReservationIndicators()
64        {
65            leftChildReserved = LeftChildFinished || leftChild.IsReserved();
66            rightChildReserved = RightChildFinished || (rightChild != null && rightChild.IsReserved());
67        }
68
69        public override Leaf CalculatableLeaf(bool useReservedNodes)
70        {
71            // Left child not finished and not reserved (or reserved leafs are allowed)
72            if (!LeftChildFinished && (!leftChildReserved || useReservedNodes))
73            {
74                return leftChild.CalculatableLeaf(useReservedNodes);
75            }
76
77            if (rightChild == null)
78            {
79                Reset();
80                return leftChild.CalculatableLeaf(useReservedNodes);
81            }
82
83            return rightChild.CalculatableLeaf(useReservedNodes);
84        }
85
86        public void ChildFinished(NodeBase childNode)
87        {
88            if (childNode == leftChild)
89            {
90                LeftChildFinished = true;
91                leftChild = null;
92                UpdateCache();
93                return;
94            }
95
96            if (childNode == rightChild)
97            {
98                RightChildFinished = true;
99                rightChild = null;
100                UpdateCache();
101                return;
102            }
103        }
104
105        public override bool IsReserved()
106        {
107            if (LeftChildFinished && !RightChildFinished)
108            {
109                return rightChildReserved;
110            }
111
112            if (!LeftChildFinished && RightChildFinished)
113            {
114                return leftChildReserved;
115            }
116
117            if (!LeftChildFinished && !RightChildFinished && rightChildReserved)
118            {
119                return leftChildReserved;
120            }
121
122            return rightChildReserved;
123        }
124
125        public override string ToString()
126        {
127            return base.ToString() + Resources.__LeftChildFinished_ + LeftChildFinished + Resources.___RightChildFinished_ +
128                   RightChildFinished;
129        }
130
131        //Updates also the right children (if necessary)
132        public void UpdateAll()
133        {
134             
135        }
136    }
137}
Note: See TracBrowser for help on using the repository browser.