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

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

quadratic sieve terminology change:
"yield" is called "relation package" now.

File size: 3.0 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 relationpackagequeue;
14        private static bool running;
15
16        static void prepareSieving(IntPtr conf, int update, IntPtr core_sieve_fcn, int max_relations)
17        {
18            Console.WriteLine("Update: " + update);
19
20            relationpackagequeue = 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, relationpackagequeue });
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 relationpackagequeue = (Queue)parameters[3];
37
38            while (running)
39            {
40                    Msieve.msieve.collectRelations(clone, update, core_sieve_fcn);
41                    IntPtr relationPackage = Msieve.msieve.getRelationPackage(clone);
42                    relationPackage = Msieve.msieve.deserializeRelationPackage(Msieve.msieve.serializeRelationPackage(relationPackage));
43                    relationpackagequeue.Enqueue(relationPackage);
44            }
45        }
46
47        static void Main(string[] args)
48        {           
49            Msieve.callback_struct callbacks = new Msieve.callback_struct();
50            callbacks.prepareSieving = prepareSieving;
51            callbacks.putTrivialFactorlist = delegate(IntPtr list, IntPtr obj)
52            {
53                foreach (Object o in Msieve.msieve.getPrimeFactors(list))
54                    Console.Out.WriteLine((String)o);
55                foreach (Object o in Msieve.msieve.getCompositeFactors(list))
56                    Console.Out.WriteLine((String)o);
57
58                list = Msieve.msieve.msieve_run_core(obj, (String)Msieve.msieve.getCompositeFactors(list)[0]);
59                foreach (Object o in Msieve.msieve.getPrimeFactors(list))
60                    Console.Out.WriteLine("Prim: " + (String)o);
61                foreach (Object o in Msieve.msieve.getCompositeFactors(list))
62                    Console.Out.WriteLine("Composite: " + (String)o);
63            };
64           
65            Msieve.msieve.initMsieve(callbacks);
66
67            //ArrayList factors = Msieve.msieve.factorize("8490874917243147254909119 * 6760598565031862090687387", null);
68            Msieve.msieve.start("(2^300-1)/2", null);
69            //ArrayList factors = Msieve.msieve.factorize("(2^200 - 1) / 2", null);           
70            Console.ReadLine();
71        }
72    }
73}
Note: See TracBrowser for help on using the repository browser.