247{
248 if (
gb.size() == 0)
return 0;
249
252 gbelem *me =
gb[
gb.size() - 1];
253 int me_component =
static_cast<int>(
M->get_component(me->
f.
monoms));
254
255 std::vector<std::vector<pre_spair *>> bins;
256
257 mtbb::tick_count t0 {mtbb::tick_count::now()};
258
259
260 for (
int i = 0; i <
gb.size() - 1; i++)
261 {
263 if (me_component !=
M->get_component(
gb[i]->f.monoms))
continue;
266 }
267
268 mtbb::tick_count t1 {mtbb::tick_count::now()};
270
272
275
276 PreSPairSorter C;
277 int n_new_pairs = 0;
278 for (int i = 0; i < bins.size(); i++)
279 {
280 if (bins[i].size() == 0) continue;
281
282
283 std::stable_sort(bins[i].
begin(), bins[i].
end(), C);
284
285
286 auto first = bins[i].begin();
287 auto next = first;
288 auto end = bins[i].end();
289 for (; first !=
end; first = next)
290 {
291 next = first + 1;
292 pre_spair *chosen = *first;
294 {
295 pre_spair *
p = *next;
297 next++;
298 }
299
300
301 int32_t junk;
303 if (!inideal)
304 {
305
307
309 {
311 n_new_pairs++;
312 }
313 }
314 }
315 }
316 delete montab;
317 mtbb::tick_count t2 {mtbb::tick_count::now()};
319
320 return n_new_pairs;
321}
static bool is_equal(ConstExponents a, ConstExponents b)
void insert_minimal_vp(long comp, const_varpower_monomial m, Key k)
bool find_one_divisor_vp(long comp, const_varpower_monomial m, Key &result_k) const
void insert_spair(pre_spair *p, int me)
F4MemoryBlock< varpower_word > VP
double mMinimizePairsSeconds
F4MemoryBlock< pre_spair > PS
pre_spair * create_pre_spair(int i)
void insert_pre_spair(std::vector< std::vector< pre_spair * > > &bins, pre_spair *p)
F4MonomialLookupTableT< int32_t > MonomialLookupTable
TermIterator< Nterm > begin(Nterm *ptr)
TermIterator< Nterm > end(Nterm *)
double seconds(DurationType time_diff)