source: trunk/CrypPlugins/BigNumber/BigNumberOperation.cs @ 740

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

CrypWin:

  • changed string Beta 01 -> 02
  • TextBoxHidden now loads its value when loading a project file
  • see #98 for an open issue

BigInteger/BigNumber:

  • added sanity checks for == operator and Equals()
  • setting input properties to null in PreExecution (addresses #90)

Tokenizer:

  • added \t as word delimiter (fixes problem with Enigma-Challenge_II)

Enigma:

  • added null reference sanity check

WordPatterns:

  • improved PostBuild events

ExamplePluginCT2:

  • added example plugin which serves as plugin template
  • the template is located in Documentation/Template/
File size: 7.6 KB
Line 
1/*                             
2   Copyright 2009 Team CrypTool (Sven Rech,Dennis Nolte,Raoul Falk,Nils Kopal), Uni Duisburg-Essen
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 Cryptool.PluginBase.IO;
19using Cryptool.PluginBase;
20using Cryptool.PluginBase.Miscellaneous;
21using System.ComponentModel;
22
23namespace Cryptool.Plugins.BigNumber
24{
25    [Author("Sven Rech", "sven.rech@cryptool.org", "Uni Duisburg-Essen", "http://www.uni-due.de")]
26    [PluginInfo(false, "BigNumberOperation", "Big Number Operation", null, "BigNumber/icons/plusIcon.png", "BigNumber/icons/minusIcon.png", "BigNumber/icons/timesIcon.png", "BigNumber/icons/divIcon.png", "BigNumber/icons/powIcon.png")]
27    class BigNumberOperation : IThroughput
28    {
29
30        public BigNumberOperation()
31        {
32            this.settings.OnPluginStatusChanged += settings_OnPluginStatusChanged;
33        }
34
35        #region Properties
36
37        private BigInteger input1 = null;
38        [PropertyInfo(Direction.InputData, "x Input", "Number Input 1", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.None, null)]
39        public BigInteger Input1
40        {
41            get
42            {
43                return input1;
44            }
45            set
46            {
47                input1 = value;
48                OnPropertyChanged("Input1");
49            }
50        }
51
52        private BigInteger input2 = null;
53        [PropertyInfo(Direction.InputData, "y Input", "Number Input 2", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.None, null)]
54        public BigInteger Input2
55        {
56            get
57            {
58                return input2;
59            }
60            set
61            {
62                input2 = value;
63                OnPropertyChanged("Input2");
64            }
65        }
66
67        private BigInteger mod = null;
68        [PropertyInfo(Direction.InputData, "Modulo", "Modulo Input", "", DisplayLevel.Beginner)]
69        public BigInteger Mod
70        {
71            get
72            {
73                return mod;
74            }
75            set
76            {
77                mod = value;
78                OnPropertyChanged("Mod");
79            }
80        }
81
82        private BigInteger output = null;
83        [PropertyInfo(Direction.OutputData, "Output", "Number Output", "", DisplayLevel.Beginner)]
84        public BigInteger Output
85        {
86            get
87            {
88                return output;
89            }
90            set
91            {
92                output = value;
93                OnPropertyChanged("Output");
94             }
95        }
96
97        #endregion
98
99        #region IPlugin Members
100
101        public event Cryptool.PluginBase.StatusChangedEventHandler OnPluginStatusChanged;
102
103        public event Cryptool.PluginBase.GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
104
105        private void GuiLogMessage(string p, NotificationLevel notificationLevel)
106        {
107            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(p, this, notificationLevel));
108        }
109
110        public event Cryptool.PluginBase.PluginProgressChangedEventHandler OnPluginProgressChanged;
111
112        private void ProgressChanged(double value, double max)
113        {
114            EventsHelper.ProgressChanged(OnPluginProgressChanged, this, new PluginProgressEventArgs(value, max));
115        }
116
117        private BigNumberOperationSettings settings = new BigNumberOperationSettings();
118        public ISettings Settings
119        {
120            get { return settings; }
121            set { settings = (BigNumberOperationSettings)value; }
122        }
123
124        public System.Windows.Controls.UserControl Presentation
125        {
126            get { return null; }
127        }
128
129        public System.Windows.Controls.UserControl QuickWatchPresentation
130        {
131            get { return null; }
132        }
133
134        public void PreExecution()
135        {
136            input1 = null;
137            input2 = null;
138            mod = null;
139        }
140
141        public void Execute()
142        {
143            if (input1 != null && input2 != null)
144            {
145                ProgressChanged(0.5, 1.0);
146                try
147                {
148                    switch (settings.Operat)
149                    {
150                        case 0:
151                            if (Mod is object)
152                                Output = (Input1 + Input2) % Mod;
153                            else
154                                Output = Input1 + Input2;
155                            break;
156                        case 1:
157                            if (Mod is object)
158                                Output = (Input1 - Input2) % Mod;
159                            else
160                                Output = Input1 - Input2;
161                            break;
162                        case 2:
163                            if (Mod is object)
164                                Output = (Input1 * Input2) % Mod;
165                            else
166                                Output = Input1 * Input2;
167                            break;
168                        case 3:
169                            if (Mod is object)
170                                Output = (Input1 / Input2) % Mod;
171                            else
172                                Output = Input1 / Input2;
173                            break;
174                        case 4:
175                            if (Mod is object)
176                            {
177                                if (Input2 >= 0)
178                                    Output = Input1.modPow(Input2, Mod);
179                                else
180                                {
181                                    Output = Input1.modInverse(Mod).modPow(-Input2, Mod);
182                                }
183                            }
184                            else
185                            {
186                                Output = Input1.pow(Input2);
187                            }
188                            break;
189                    }
190                }
191                catch (Exception e)
192                {
193                    GuiLogMessage("Big Number fail: " + e.Message, NotificationLevel.Error);
194                    return;
195                }
196                ProgressChanged(1.0, 1.0);
197            }
198        }
199
200        public void PostExecution()
201        {
202        }
203
204        public void Pause()
205        {
206        }
207
208        public void Stop()
209        {
210        }
211
212        public void Initialize()
213        {
214        }
215
216        public void Dispose()
217        {
218        }
219
220        #endregion
221
222        #region INotifyPropertyChanged Members
223
224        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
225
226        private void OnPropertyChanged(string p)
227        {
228            EventsHelper.PropertyChanged(PropertyChanged, this, new PropertyChangedEventArgs(p));
229        }
230
231        #endregion
232
233        private void settings_OnPluginStatusChanged(IPlugin sender, StatusEventArgs args)
234        {
235            if (OnPluginStatusChanged != null) OnPluginStatusChanged(this, args);
236        }
237    }
238}
Note: See TracBrowser for help on using the repository browser.