source: trunk/CrypPlugins/ANDBinary/ANDBinary.cs @ 1785

Last change on this file since 1785 was 1259, checked in by Matthäus Wander, 12 years ago

shortened license text to boilerplate notice in all source files

File size: 7.2 KB
Line 
1/*
2   Copyright 2008 Sebastian Przybylski, University of Siegen
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;
21
22using Cryptool.PluginBase;
23using System.IO;
24using System.ComponentModel;
25using Cryptool.PluginBase.Cryptography;
26using Cryptool.PluginBase.IO;
27using System.Windows.Controls;
28using Cryptool.PluginBase.Miscellaneous;
29using System.Security.Cryptography;
30// for [MethodImpl(MethodImplOptions.Synchronized)]
31using System.Runtime.CompilerServices;
32
33namespace Cryptool.ANDBinary
34{
35    [Author("Soeren Rinne", "soeren.rinne@cryptool.de", "Ruhr-Universitaet Bochum, Chair for System Security", "http://www.trust.rub.de/")]
36    [PluginInfo(false, "ANDBinary", "Simple Binary AND", "ANDBinary/DetailedDescription/Description.xaml", "ANDBinary/Images/icon.png", "ANDBinary/Images/iconInput1Inverted.png", "ANDBinary/Images/iconInput2Inverted.png", "ANDBinary/Images/iconOutputInverted.png")]
37    public class ANDBinary : IThroughput
38    {
39
40        #region Private variables
41
42        private ANDBinarySettings settings;
43        private bool inputOne = false;
44        private bool inputTwo = false;
45        private bool output;
46
47        #endregion
48
49        #region Public variables
50        public int inputOneFlag;
51        public int inputTwoFlag;
52        #endregion
53
54        #region Public interface
55
56        /// <summary>
57        /// Contructor
58        /// </summary>
59        public ANDBinary()
60        {
61            this.settings = new ANDBinarySettings();
62            ((ANDBinarySettings)(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 = (ANDBinarySettings)value;
73            }
74        }
75
76        [PropertyInfo(Direction.InputData, "AND Input One", "Input a boolean value to be processed by AND", "", true, true, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
77        public bool InputOne
78        {
79            [MethodImpl(MethodImplOptions.Synchronized)]
80            get
81            {
82                /*if (settings.InvertInputOne)
83                {
84                    return (!inputOne);
85                }
86                else*/ return this.inputOne;
87            }
88
89            [MethodImpl(MethodImplOptions.Synchronized)]
90            set
91            {
92                this.inputOne = value;
93                OnPropertyChanged("InputOne");
94                // clean inputOne
95                inputOneFlag = 1;
96            }
97        }
98
99        [PropertyInfo(Direction.InputData, "AND Input Two", "Input a boolean value to be processed by AND", "", false, true, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
100        public bool InputTwo
101        {
102            [MethodImpl(MethodImplOptions.Synchronized)]
103            get { return this.inputTwo; }
104            [MethodImpl(MethodImplOptions.Synchronized)]
105            set
106            {
107                this.inputTwo = value;
108                OnPropertyChanged("InputTwo");
109                // clean inputTwo
110                inputTwoFlag = 1;
111            }
112        }
113
114        [PropertyInfo(Direction.OutputData, "AND Output", "Output after ANDing input one and two. Only fires up, if both inputs are fresh.", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
115        public bool Output
116        {
117            [MethodImpl(MethodImplOptions.Synchronized)]
118            get
119            {
120                return output;
121            }
122            set
123            {   // is readonly
124            }
125        }
126
127        #endregion
128
129        #region IPlugin members
130
131        public void Initialize()
132        {           
133        }
134
135        public void Dispose()
136        {
137            // set input flags according to settings
138            if (settings.FlagInputOne) inputOneFlag = 1;
139            else inputOneFlag = -1;
140            if (settings.FlagInputTwo) inputTwoFlag = 1;
141            else inputTwoFlag = -1;
142
143            // set icon according to settings
144            if (settings.InvertInputOne) StatusChanged((int)ANDImage.Input1Inverted);
145            else StatusChanged((int)ANDImage.Default);
146        }
147
148        public UserControl Presentation
149        {
150            get { return null; }
151        }
152
153        public UserControl QuickWatchPresentation
154        {
155            get { return null; }
156        }
157
158        public void Stop()
159        {
160        }
161
162        public void PostExecution()
163        {
164            Dispose();
165        }
166
167        public void PreExecution()
168        {
169            Dispose();
170        }
171
172        #endregion
173
174        #region INotifyPropertyChanged Members
175
176        public event PropertyChangedEventHandler PropertyChanged;
177
178        public event StatusChangedEventHandler OnPluginStatusChanged;
179
180        public void OnPropertyChanged(string name)
181        {
182            if (PropertyChanged != null)
183            {
184                PropertyChanged(this, new PropertyChangedEventArgs(name));
185            }
186        }
187
188        #endregion
189
190        #region Private methods
191
192        private void Xor_LogMessage(string msg, NotificationLevel logLevel)
193        {
194            /*if (OnGuiLogNotificationOccured != null)
195            {
196                OnGuiLogNotificationOccured(this, new GuiLogEventArgs(msg, this, logLevel));
197            }*/
198        }
199
200        #endregion
201
202        #region IPlugin Members
203
204//#pragma warning disable 67
205        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
206        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
207//#pragma warning restore
208
209        public void Execute()
210        {
211            if (inputOneFlag == 1 && inputTwoFlag == 1)
212            {               
213                // flag all inputs as dirty
214                inputOneFlag = -1;
215                inputTwoFlag = -1;
216                if (settings.InvertInputOne)
217                {
218                    output = !inputOne & inputTwo;
219                } else output = inputOne & inputTwo;
220                OnPropertyChanged("Output");
221            }
222        }
223
224        public void Pause()
225        {
226        }
227
228        private void StatusChanged(int imageIndex)
229        {
230            EventsHelper.StatusChanged(OnPluginStatusChanged, this, new StatusEventArgs(StatusChangedMode.ImageUpdate, imageIndex));
231        }
232
233        #endregion
234    }
235
236    #region Image
237
238    enum ANDImage
239    {
240        Default,
241        Input1Inverted,
242        Input2Inverted,
243        OutputInverted
244    }
245
246    #endregion
247}
Note: See TracBrowser for help on using the repository browser.