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

Last change on this file since 2527 was 2334, checked in by Matthäus Wander, 11 years ago

removed 1006 occurences of DisplayLevel in 218 files (see #122)

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, 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.