1 #ifndef LAS_SMALLSIEVE_HPP_
2 #define LAS_SMALLSIEVE_HPP_
3 
4 #include <cstdarg>
5 #include <cstdio>
6 #include <vector>
7 #include "fb-types.h"   // sublat_t
8 #include "fb.hpp"
9 #include "las-forwardtypes.hpp"
10 #include "macros.h"
11 class bucket_primes_t;
12 struct qlattice_basis;
13 struct small_sieve_data_t;
14 struct where_am_I;
15 
16 /* Do not compute start positions for more than this number of bucket
17  * regions in advance. This defines the frequency of a synchronization
18  * point, so it should not be too small. Typically one set of start
19  * positions for one bucket region costs about 25k.
20  *
21  * This is capped to nb_buckets
22  */
23 #define SMALL_SIEVE_START_POSITIONS_MAX_ADVANCE 1024
24 
25 extern void small_sieve_info(const char * what, int side, small_sieve_data_t const & r);
26 extern int small_sieve_dump(FILE *, const char *, va_list);
27 extern void small_sieve_clear(small_sieve_data_t & ssd);
28 
29 extern void small_sieve_init(small_sieve_data_t & ssd,
30                       std::vector<fb_entry_general> const & resieved,
31                       std::vector<fb_entry_general> const & rest,
32                       int logI,
33                       int side,
34                       fb_factorbase::key_type const & fbK,
35                       qlattice_basis const & Q,
36                       double scale);
37 
38 extern void small_sieve_start(
39         std::vector<spos_t> & ssdpos,
40         small_sieve_data_t & ssd,
41         unsigned int first_region_index,
42         int logI, sublat_t const & sl);
43 
44 extern void small_sieve_prepare_many_start_positions(
45         small_sieve_data_t & ssd,
46         unsigned int first_region_index,
47         int nregions,
48         int logI, sublat_t const & sl);
49 
50 extern void small_sieve_activate_many_start_positions(small_sieve_data_t & ssd);
51 
52 extern void sieve_small_bucket_region(unsigned char *S, unsigned int N,
53                                small_sieve_data_t const & ssd,
54                                std::vector<spos_t> const & ssdpos,
55                                int logI, sublat_t const & sl,
56                                where_am_I & w);
57 
58 extern void resieve_small_bucket_region (bucket_primes_t *BP,
59         unsigned char *S,
60         unsigned int N,
61         small_sieve_data_t & ssd,
62         std::vector<spos_t> const & ssdpos,
63         int logI, sublat_t const & sl,
64         where_am_I & w MAYBE_UNUSED);
65 
66 #endif	/* LAS_SMALLSIEVE_HPP_ */
67