source: trunk/CrypPlugins/PrimesGenerator/PrimesGenerator.cs @ 1941

Last change on this file since 1941 was 1783, checked in by Sven Rech, 11 years ago

Changed input and output of PrimesGenerator and PrimeTest to BigInteger instead of String

File size: 5.4 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Cryptool.PluginBase.Generator;
6using System.Reflection;
7using Cryptool.PluginBase;
8using Cryptool.PluginBase.IO;
9using Cryptool.PluginBase.Tool;
10using Primes.Bignum;
11using System.Numerics;
12
13namespace Cryptool.PrimesGenerator
14{
15
16  [PluginInfo(true, "Primes Generator", "Generator for primes numbers", null, "PrimesGenerator/icon.png")]
17  public class PrimesGenerator : IRandomNumberGenerator
18  {
19      private PrimesBigInteger m_max = new PrimesBigInteger("10000000000");
20    public PrimesGenerator()
21    {
22      m_Settings = new PrimesGeneratorSettings();
23      m_Settings.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(m_Settings_PropertyChanged);
24      m_Mode = 0;
25      m_Input = PrimesBigInteger.ValueOf(100);
26    }
27
28
29    #region IPlugin Members
30
31    public event Cryptool.PluginBase.StatusChangedEventHandler OnPluginStatusChanged;
32
33    private void FireOnPluginStatusChangedEvent()
34    {
35      if (OnPluginStatusChanged != null) OnPluginStatusChanged(this, new StatusEventArgs(0));
36    }
37
38    public event Cryptool.PluginBase.GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
39    private void FireOnGuiLogNotificationOccuredEvent(string message, NotificationLevel lvl)
40    {
41      if (OnGuiLogNotificationOccured != null) OnGuiLogNotificationOccured(this, new GuiLogEventArgs(message, this, lvl));
42    }
43    private void FireOnGuiLogNotificationOccuredEventError(string message)
44    {
45      FireOnGuiLogNotificationOccuredEvent(message, NotificationLevel.Error);
46    }
47
48    public event Cryptool.PluginBase.PluginProgressChangedEventHandler OnPluginProgressChanged;
49    private void FireOnPluginProgressChangedEvent(string message, NotificationLevel lvl)
50    {
51      if (OnPluginProgressChanged != null) OnPluginProgressChanged(this, new PluginProgressEventArgs(0, 0));
52    }
53
54
55    private BigInteger m_OutputString;
56    [PropertyInfo(Direction.OutputData, "BigInteger output", "A primenumber", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
57    public BigInteger OutputString
58    {
59      get { return this.m_OutputString; }
60      set
61      {
62        m_OutputString = value;
63        FirePropertyChangedEvent("OutputString");
64      }
65    }
66    private PrimesGeneratorSettings m_Settings = new PrimesGeneratorSettings();
67    public ISettings Settings
68    {
69      get { return m_Settings; }
70    }
71
72    private PrimesBigInteger m_Input;
73    private int m_Mode;
74    private bool hasErrors;
75    void m_Settings_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
76    {
77      hasErrors = false;
78      try
79      {
80        m_Input = new PrimesBigInteger(m_Settings.Input);
81        switch (e.PropertyName)
82        {
83          case PrimesGeneratorSettings.MODE:
84          case PrimesGeneratorSettings.INPUT:
85            m_Mode = m_Settings.Mode;
86            switch (m_Mode)
87            {
88              case 0:
89                if (m_Input.CompareTo(PrimesBigInteger.One) < 0 || m_Input.CompareTo(PrimesBigInteger.ValueOf(400)) > 0)
90                {
91                  FireOnGuiLogNotificationOccuredEventError("Value for n has to be greater or equal than one an less or equal than 400.");
92                  hasErrors = true;
93                }
94                break;
95              case 1:
96                if (m_Input.CompareTo(PrimesBigInteger.Ten) < 0 || m_Input.CompareTo(m_max) > 0)
97                {
98                  FireOnGuiLogNotificationOccuredEventError("Please enter an Integer value for n.");
99                  hasErrors = true;
100                }
101                break;
102            }
103            break;
104          default:
105            break;
106        }
107      }
108      catch
109      {
110        FireOnGuiLogNotificationOccuredEventError("Please enter an Integer value for n.");
111        hasErrors = true;
112      }
113    }
114
115    public System.Windows.Controls.UserControl Presentation
116    {
117      get { return null; }
118    }
119
120    public System.Windows.Controls.UserControl QuickWatchPresentation
121    {
122      get { return null; }
123    }
124
125    public void PreExecution()
126    {
127     
128    }
129
130
131    public void Execute()
132    {
133      if (!hasErrors)
134      {
135        switch (m_Mode)
136        {
137          case 0:
138            OutputString = BigInteger.Parse(PrimesBigInteger.Random(m_Input).NextProbablePrime().ToString());
139            break;
140          case 1:
141            PrimesBigInteger result = PrimesBigInteger.RandomM(m_Input).NextProbablePrime();
142            while (result.CompareTo(m_Input) > 0)
143            {
144              result = PrimesBigInteger.RandomM(m_Input).NextProbablePrime();
145            }
146            OutputString = BigInteger.Parse(result.ToString());
147            break;
148        }
149      }
150    }
151
152    public void PostExecution()
153    {
154     
155    }
156
157    public void Pause()
158    {
159     
160    }
161
162    public void Stop()
163    {
164     
165    }
166
167    public void Initialize()
168    {
169
170     
171    }
172
173    public void Dispose()
174    {
175     
176    }
177
178    #endregion
179
180    #region INotifyPropertyChanged Members
181
182    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
183
184    private void FirePropertyChangedEvent(string propertyName)
185    {
186      if (PropertyChanged != null) PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
187    }
188    #endregion
189  }
190}
Note: See TracBrowser for help on using the repository browser.