source: trunk/CrypPlugins/Majority/Majority.cs @ 2220

Last change on this file since 2220 was 1042, checked in by Sören Rinne, 12 years ago
  • bugfixing
  • replaced all licenses with the short version
File size: 7.1 KB
Line 
1/*
2   Copyright 2009 Sören Rinne, Ruhr-Universität Bochum, Germany
3
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7
8       http://www.apache.org/licenses/LICENSE-2.0
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15*/
16
17using System;
18using System.Collections.Generic;
19using System.Linq;
20using System.Text;
21using Cryptool.PluginBase;
22using Cryptool.PluginBase.Cryptography;
23
24using System.IO;
25using System.ComponentModel;
26using Cryptool.PluginBase.IO;
27using System.Windows.Controls;
28// for [MethodImpl(MethodImplOptions.Synchronized)]
29using System.Runtime.CompilerServices;
30
31namespace Cryptool.Majority
32{
33    [Author("Soeren Rinne", "soeren.rinne@cryptool.de", "Ruhr-Universitaet Bochum, Chair for System Security", "http://www.trust.rub.de/")]
34    [PluginInfo(true, "Majority", "Computes the majority of three boolean inputs\n1, if sum(1)>=sum(0); 0 else", "Majority/DetailedDescription/Description.xaml", "Majority/Images/icon.png", "Majority/Images/icon.png", "Majority/Images/icon.png")]
35    public class Majority : IThroughput
36    {
37
38        #region Private variables
39
40        private MajoritySettings settings;
41        private bool inputOne;
42        private bool inputTwo;
43        private bool inputThree;
44        private bool output;
45
46        #endregion
47
48        #region Public variables
49        public int inputOneFlag = -1;
50        public int inputTwoFlag = -1;
51        public int inputThreeFlag = -1;
52        #endregion
53
54        #region Public interface
55
56        /// <summary>
57        /// Contructor
58        /// </summary>
59        public Majority()
60        {
61            this.settings = new MajoritySettings();
62            ((MajoritySettings)(this.settings)).LogMessage += Xor_LogMessage;
63        }
64
65        /// <summary>
66        /// Get or set all settings for this algorithm
67        /// </summary>
68        public ISettings Settings
69        {
70            get { return (ISettings)this.settings;
71            }
72            set { this.settings = (MajoritySettings)value;
73            }
74        }
75
76        [PropertyInfo(Direction.InputData, "Majority Input One", " ", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
77        public bool InputOne
78        {
79            [MethodImpl(MethodImplOptions.Synchronized)]
80            get { return this.inputOne; }
81            [MethodImpl(MethodImplOptions.Synchronized)]
82            set
83            {
84                this.inputOne = value;
85                OnPropertyChanged("InputOne");
86                // clean inputOne
87                inputOneFlag = 1;
88            }
89        }
90
91        [PropertyInfo(Direction.InputData, "Majority Input Two", " ", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
92        public bool InputTwo
93        {
94            [MethodImpl(MethodImplOptions.Synchronized)]
95            get { return this.inputTwo; }
96            [MethodImpl(MethodImplOptions.Synchronized)]
97            set
98            {
99                this.inputTwo = value;
100                OnPropertyChanged("InputTwo");
101                // clean inputTwo
102                inputTwoFlag = 1;
103            }
104        }
105
106        [PropertyInfo(Direction.InputData, "Majority Input Three", " ", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
107        public bool InputThree
108        {
109            [MethodImpl(MethodImplOptions.Synchronized)]
110            get { return this.inputThree; }
111            [MethodImpl(MethodImplOptions.Synchronized)]
112            set
113            {
114                this.inputThree = value;
115                OnPropertyChanged("InputThree");
116                // clean inputTwo
117                inputThreeFlag = 1;
118            }
119        }
120
121        [PropertyInfo(Direction.OutputData, "Majority Output", " ", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
122        public bool Output
123        {
124            [MethodImpl(MethodImplOptions.Synchronized)]
125            get
126            {
127                return output;
128            }
129            set
130            {   // is readonly
131            }
132        }
133
134        #endregion
135
136        #region IPlugin members
137
138        public void Initialize()
139        {
140            inputOneFlag = -1;
141            inputTwoFlag = -1;
142            inputThreeFlag = -1;
143        }
144
145        public void Dispose()
146        {
147            inputOneFlag = -1;
148            inputTwoFlag = -1;
149            inputThreeFlag = -1;
150        }
151
152        public UserControl Presentation
153        {
154            get { return null; }
155        }
156
157        public UserControl QuickWatchPresentation
158        {
159            get { return null; }
160        }
161
162        public void Stop()
163        {
164        }
165
166        public void PostExecution()
167        {
168            Dispose();
169        }
170
171        public void PreExecution()
172        {
173            Dispose();
174        }
175
176        #endregion
177
178        #region INotifyPropertyChanged Members
179
180        public event PropertyChangedEventHandler PropertyChanged;
181
182        public void OnPropertyChanged(string name)
183        {
184            if (PropertyChanged != null)
185            {
186                PropertyChanged(this, new PropertyChangedEventArgs(name));
187            }
188        }
189
190        #endregion
191
192        #region Private methods
193
194        private void Xor_LogMessage(string msg, NotificationLevel logLevel)
195        {
196            /*if (OnGuiLogNotificationOccured != null)
197            {
198                OnGuiLogNotificationOccured(this, new GuiLogEventArgs(msg, this, logLevel));
199            }*/
200        }
201
202        #endregion
203
204        #region IPlugin Members
205
206#pragma warning disable 67
207        public event StatusChangedEventHandler OnPluginStatusChanged;
208        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
209        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
210#pragma warning restore
211
212        public void Execute()
213        {
214            if (inputOneFlag == 1 && inputTwoFlag == 1 && inputThreeFlag == 1)
215            {
216                // flag all inputs as dirty
217                inputOneFlag = -1;
218                inputTwoFlag = -1;
219                inputThreeFlag = -1;
220
221                // generate output
222                int cntZeros = 0;
223                int cntOnes = 0;
224                if (inputOne) cntOnes++; else cntZeros++;
225                if (inputTwo) cntOnes++; else cntZeros++;
226                if (inputThree) cntOnes++; else cntZeros++;
227                if (cntOnes >= cntZeros) output = true; else output = false;
228                OnPropertyChanged("Output");
229            }
230        }
231
232        public void Pause()
233        {
234        }
235
236        #endregion
237    }
238}
Note: See TracBrowser for help on using the repository browser.