source: trunk/CrypPlugins/QuadraticSieve/msieve/build.vc9/WrapperTester/Program.cs @ 1373

Last change on this file since 1373 was 1373, checked in by Sven Rech, 12 years ago

some msieve modifications

File size: 3.5 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Collections;
6using System.Runtime.InteropServices;
7using System.Threading;
8
9namespace WrapperTester
10{
11    class Program
12    {
13        private static Queue yieldqueue;
14        private static bool running;
15
16        static void prepareSieving(IntPtr conf, int update, IntPtr core_sieve_fcn)
17        {
18            Console.WriteLine("Update: " + update);
19
20            yieldqueue = Queue.Synchronized(new Queue());
21           
22            //Create a thread:
23            IntPtr clone = Msieve.msieve.cloneSieveConf(conf);
24            WaitCallback worker = new WaitCallback(MSieveJob);
25            running = true;
26            ThreadPool.QueueUserWorkItem(worker, new object[] { clone, update, core_sieve_fcn, yieldqueue });
27        }
28
29        public static void MSieveJob(object param)
30        {
31           
32            object[] parameters = (object[])param;
33            IntPtr clone = (IntPtr)parameters[0];
34            int update = (int)parameters[1];
35            IntPtr core_sieve_fcn = (IntPtr)parameters[2];
36            Queue yieldqueue = (Queue)parameters[3];
37
38            while (running)
39            {
40                    Msieve.msieve.collectRelations(clone, update, core_sieve_fcn);
41                    IntPtr yield = Msieve.msieve.getYield(clone);
42                    yield = Msieve.msieve.deserializeYield(Msieve.msieve.serializeYield(yield));
43                    yieldqueue.Enqueue(yield);
44            }
45        }
46
47        static void Main(string[] args)
48        {           
49            Msieve.callback_struct callbacks = new Msieve.callback_struct();
50            callbacks.showProgress = delegate(IntPtr conf, int num_relations, int max_relations)
51            {               
52                System.Console.WriteLine("" + num_relations + " of " + max_relations + " relations!");
53                if (num_relations != -1)
54                    while (yieldqueue != null && yieldqueue.Count != 0)
55                    {
56                        Msieve.msieve.saveYield(conf, (IntPtr)yieldqueue.Dequeue());
57                        Console.WriteLine("Get yield from queue.");
58                    }
59                else
60                    running = false;               
61            };
62            callbacks.prepareSieving = prepareSieving;
63            callbacks.getTrivialFactorlist = delegate(IntPtr list, IntPtr obj)
64            {
65                foreach (Object o in Msieve.msieve.getPrimeFactors(list))
66                    Console.Out.WriteLine((String)o);
67                foreach (Object o in Msieve.msieve.getCompositeFactors(list))
68                    Console.Out.WriteLine((String)o);
69
70                list = Msieve.msieve.factor_mpqs(obj, (String)Msieve.msieve.getCompositeFactors(list)[0]);
71                foreach (Object o in Msieve.msieve.getPrimeFactors(list))
72                    Console.Out.WriteLine("Prim: " + (String)o);
73                foreach (Object o in Msieve.msieve.getCompositeFactors(list))
74                    Console.Out.WriteLine("Composite: " + (String)o);
75            };
76           
77            Msieve.msieve.initMsieve(callbacks);
78
79            //ArrayList factors = Msieve.msieve.factorize("8490874917243147254909119 * 6760598565031862090687387", null);
80            Msieve.msieve.start("(2^300-1)/2", null);
81            //ArrayList factors = Msieve.msieve.factorize("(2^200 - 1) / 2", null);           
82            Console.ReadLine();
83        }
84    }
85}
Note: See TracBrowser for help on using the repository browser.