Changeset 2f436b in git for Singular/kbuckets.cc
- Timestamp:
- Dec 31, 2000, 4:14:47 PM (23 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- e609098c45a74ac91c002ffa7ece5eebe7f8c002
- Parents:
- 33ec1145a109507ad3e3cf4a69a847b703358e93
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/kbuckets.cc
r33ec11 r2f436b 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: kbuckets.cc,v 1.2 2 2000-11-28 11:50:51obachman Exp $ */4 /* $Id: kbuckets.cc,v 1.23 2000-12-31 15:14:32 obachman Exp $ */ 5 5 6 6 #include "mod2.h" … … 137 137 } 138 138 139 140 139 ///////////////////////////////////////////////////////////////////////////// 141 140 // Convertion from/to Bpolys … … 270 269 *length = 0; 271 270 } 271 } 272 273 void kBucketSetLm(kBucket_pt bucket, poly lm) 274 { 275 kBucketMergeLm(bucket); 276 pNext(lm) = NULL; 277 bucket->buckets[0] = lm; 278 bucket->buckets_length[0] = 1; 272 279 } 273 280 … … 358 365 } 359 366 367 368 ////////////////////////////////////////////////////////////////////////// 369 /// 370 /// Add to Bucket a poly ,i.e. Bpoly == n*Bpoly 371 /// 372 void kBucket_Add_q(kBucket_pt bucket, poly q, int *l) 373 { 374 if (q == NULL) return; 375 assume(*l <= 0 || pLength(q) == *l); 376 377 int i, l1; 378 ring r = bucket->bucket_ring; 379 380 if (*l <= 0) 381 { 382 l1 = pLength(q); 383 *l = l1; 384 } 385 else 386 l1 = *l; 387 388 kBucketMergeLm(bucket); 389 kbTest(bucket); 390 i = pLogLength(l1); 391 392 while (bucket->buckets[i] != NULL) 393 { 394 q = p_Add_q(q, bucket->buckets[i], 395 l1, bucket->buckets_length[i], r); 396 bucket->buckets[i] = NULL; 397 bucket->buckets_length[i] = 0; 398 i = pLogLength(l1); 399 } 400 401 bucket->buckets[i] = q; 402 bucket->buckets_length[i]=l1; 403 if (i >= bucket->buckets_used) 404 bucket->buckets_used = i; 405 else 406 kBucketAdjustBucketsUsed(bucket); 407 kbTest(bucket); 408 } 409 410 411 360 412 ////////////////////////////////////////////////////////////////////////// 361 413 /// … … 432 484 #endif 433 485 kbTest(bucket); 486 } 487 488 ////////////////////////////////////////////////////////////////////////// 489 /// 490 /// Bpoly == Bpoly - m*p; where m is a monom 491 /// Does not destroy p and m 492 /// assume (l <= 0 || pLength(p) == l) 493 void kBucket_Plus_mm_Mult_pp(kBucket_pt bucket, poly m, poly p, int l) 494 { 495 assume(l <= 0 || pLength(p) == l); 496 int i, l1; 497 poly p1 = p; 498 poly last; 499 ring r = bucket->bucket_ring; 500 501 if (l <= 0) 502 { 503 l1 = pLength(p1); 504 l = l1; 505 } 506 else 507 l1 = l; 508 509 if (m == NULL || p == NULL) return; 510 511 kBucketMergeLm(bucket); 512 kbTest(bucket); 513 i = pLogLength(l1); 514 515 if (i <= bucket->buckets_used && bucket->buckets[i] != NULL) 516 { 517 p1 = p_Plus_mm_Mult_qq(bucket->buckets[i], m, p1, 518 bucket->buckets_length[i], l1, r); 519 l1 = bucket->buckets_length[i]; 520 bucket->buckets[i] = NULL; 521 bucket->buckets_length[i] = 0; 522 i = pLogLength(l1); 523 } 524 else 525 { 526 p1 = r->p_Procs->pp_Mult_mm(p1, m, r, last); 527 } 528 529 while (bucket->buckets[i] != NULL) 530 { 531 p1 = p_Add_q(p1, bucket->buckets[i], 532 l1, bucket->buckets_length[i], r); 533 bucket->buckets[i] = NULL; 534 bucket->buckets_length[i] = 0; 535 i = pLogLength(l1); 536 } 537 538 bucket->buckets[i] = p1; 539 bucket->buckets_length[i]=l1; 540 if (i >= bucket->buckets_used) 541 bucket->buckets_used = i; 542 else 543 kBucketAdjustBucketsUsed(bucket); 544 545 kbTest(bucket); 546 } 547 548 poly kBucket_ExtractLarger(kBucket_pt bucket, poly q, poly append) 549 { 550 if (q == NULL) return append; 551 poly lm; 552 do 553 { 554 lm = kBucketGetLm(bucket); 555 if (lm == NULL) return append; 556 if (p_LmCmp(lm, q, bucket->bucket_ring) == 1) 557 { 558 lm = kBucketExtractLm(bucket); 559 pNext(append) = lm; 560 pIter(append); 561 } 562 else 563 { 564 return append; 565 } 566 } 567 while (1); 434 568 } 435 569
Note: See TracChangeset
for help on using the changeset viewer.