#include <memory.h>
#include "udanax.h"
Include dependency graph for recombine.cxx:

Go to the source code of this file.
Functions | |
| void | takeovernephewsseq (typecorecrum *me) |
| ??? | |
| void | eatbrossubtreeseq (typecuc *me) |
| ??? | |
| void | fixdspsofbroschildren (typecuc *me, typecuc *bro) |
| ??? | |
| void | eatbrossubtreend (typecuc *me, typecuc *bro) |
| ??? | |
| void | takenephewnd (typecuc *me, typecuc *nephew) |
| ??? | |
| void | shellsort (typecorecrum *v[], int n) |
| ??? | |
| void | getorderedsons (typecuc *father, typecorecrum *sons[]) |
| ??? | |
| bool | takeovernephewsnd (typecuc **meptr, typecuc **broptr) |
| ??? | |
| void | recombineseq (typecuc *father) |
| ??? | |
| void | recombinend (typecuc *father) |
| ??? | |
| void | recombine (typecuc *father) |
| ??? | |
| bool | randomness (float probability) |
| ??? | |
| bool | ishouldbother (typecuc *dest, typecuc *src) |
| ??? | |
| int | comparecrumsdiagonally (typecorecrum *a, typecorecrum *b) |
| ??? | |
| void | fixincoresubtreewids (typecuc *ptr) |
| ??? | |
Variables | |
| long | noishouldbother = 0 |
| long | notakenephewnd = 0 |
| long | noeatbrosnd = 0 |
(to be defined)
Definition in file recombine.cxx.
|
||||||||||||
|
??? (to be defined) Definition at line 503 of file recombine.cxx. References typecorecrumhedr::cdsp, typewid::dsas, tumbleradd, tumblercmp(), and typecorecrum. Referenced by splitcrumsp().
00506 {
00507 Tumbler amagnitude, bmagnitude;
00508
00509 tumbleradd(&a->cdsp.dsas[0], &a->cdsp.dsas[1], &amagnitude);
00510 tumbleradd(&b->cdsp.dsas[0], &b->cdsp.dsas[1], &bmagnitude);
00511 return (tumblercmp(&amagnitude, &bmagnitude));
00512 }
|
|
||||||||||||
|
|
??? (to be defined) Definition at line 125 of file recombine.cxx. References disown(), freecrum(), getleftson(), getrightbro, getrightmostbro(), typecorecrumhedr::leftbroorfather, typecuc::leftson, typecuc::numberofsons, typecorecrumhedr::rightbro, setwispupwards(), and typecorecrum. Referenced by recombineseq().
00127 {
00128 typecuc *bro;
00129
00130 bro = (typecuc *) getrightbro((typecorecrum *) me);
00131 getleftson(bro)->leftbroorfather = getrightmostbro(getleftson(me));
00132 getrightmostbro(getleftson(me))->rightbro = bro->leftson;
00133 bro->leftson->isleftmost = false;
00134
00135 me->numberofsons += bro->numberofsons;
00136 disown((typecorecrum *) bro);
00137 freecrum((typecorecrum *) bro);
00138 setwispupwards(me, 1);
00139 }
|
|
||||||||||||
|
??? (to be defined) Definition at line 149 of file recombine.cxx. References typecorecrumhedr::cdsp, typecuc::cdsp, typecuc::cenftype, dspadd(), dspsub(), getleftson(), getrightbro, ivemodified(), and typecorecrum. Referenced by eatbrossubtreend().
00152 {
00153 typecorecrum *nephew;
00154
00155 for (nephew = getleftson(bro); nephew; nephew = (typecorecrum *) getrightbro(nephew)) {
00156 dspadd(&bro->cdsp, &nephew->cdsp, &nephew->cdsp, me->cenftype);
00157 dspsub(&nephew->cdsp, &me->cdsp, &nephew->cdsp, me->cenftype);
00158 ivemodified(nephew);
00159 }
00160 }
|
|
|
??? (to be defined) Definition at line 522 of file recombine.cxx. References getleftson(), getrightbro, typecuc::height, L, setwisp(), and typecorecrum. Referenced by rearrangend().
00524 {
00525 typecorecrum *son;
00526
00527 if (ptr->height == 0)
00528 return;
00529
00530 for (son = (typecorecrum *) getleftson(ptr); son; son = (typecorecrum *) getrightbro(son))
00531 fixincoresubtreewids((typecuc *) son);
00532
00533 if (setwisp((typecorecrum *) ptr)) {
00534 #ifndef DISTRIBUTION
00535 L("fixing %x \n", (int) ptr);
00536 #endif
00537 }
00538 }
|
|
||||||||||||
|
??? (to be defined) Definition at line 283 of file recombine.cxx. References getleftson(), getrightbro, NULL, shellsort(), and typecorecrum. Referenced by recombinend(), and takeovernephewsnd().
00286 {
00287 typecorecrum *ptr;
00288 int i;
00289
00290 sons[0] = NULL;
00291 for (ptr = getleftson(father), i = 0; ptr; ptr = (typecorecrum *) getrightbro(ptr))
00292 sons[i++] = ptr;
00293 sons[i] = NULL;
00294 shellsort(sons, i);
00295 }
|
|
||||||||||||
|
??? (to be defined) Definition at line 476 of file recombine.cxx. References typecuc::age, check(), typediskloafptr::diskblocknumber, DISKPTRNULL, typecuc::height, MAX2DBCINLOAF, MAXUCINLOAF, noishouldbother, typecuc::numberofsons, randomness(), RESERVED, and typecuc::sonorigin. Referenced by recombinend().
00479 {
00480 ++noishouldbother;
00481
00482 if (src->numberofsons == 0) {
00483 if (src->sonorigin.diskblocknumber == DISKPTRNULL)
00484 check(src);
00485 else
00486 return false;
00487 }
00488
00489 if (dest->age == RESERVED || src->age == RESERVED)
00490 return false;
00491
00492 return dest->numberofsons + src->numberofsons <= (dest->height > 1 ? MAXUCINLOAF : MAX2DBCINLOAF) && randomness(.3);
00493 }
|
|
|
??? (to be defined) Definition at line 457 of file recombine.cxx. Referenced by ishouldbother().
00459 {
00460 //UNUSED static float i = 0;
00461
00462 return true;
00463 /*
00464 * i += probability; if(i>=1.){ while (i>1){ i -= 1.; } return(true); }else{
00465 * return false; } */
00466 }
|
|
|
??? (to be defined) Definition at line 439 of file recombine.cxx. References typecuc::cenftype, GRAN, POOM, recombinend(), recombineseq(), and SPAN. Referenced by deletend(), insertnd(), insertseq(), and rearrangend().
00441 {
00442 switch (father->cenftype) {
00443 case GRAN: recombineseq(father); break;
00444 case SPAN: recombinend(father); break;
00445 case POOM: recombinend(father); break;
00446 }
00447 }
|
|
|
??? (to be defined) Definition at line 402 of file recombine.cxx. References getleftson(), getorderedsons(), getrightbro, typecuc::height, ishouldbother(), levelpull(), MAXUCINLOAF, typecuc::numberofsons, takeovernephewsnd(), and typecorecrum. Referenced by recombine().
00404 {
00405
00406 typecorecrum *ptr;
00407 typecorecrum *sons[MAXUCINLOAF];
00408 int i, j, n;
00409
00410 if (father->height < 2 || !father->modified)
00411 return;
00412
00413 for (ptr = getleftson(father); ptr; ptr = (typecorecrum *) getrightbro(ptr))
00414 recombinend((typecuc *) ptr);
00415
00416 getorderedsons(father, sons);
00417 n = father->numberofsons;
00418 for (i = 0; i < n - 1; i++) {
00419 for (j = i + 1; sons[i] && j < n; j++) {
00420 if (i != j && sons[j] && ishouldbother((typecuc *) sons[i], (typecuc *) sons[j])) {
00421 takeovernephewsnd((typecuc **) &sons[i], (typecuc **) &sons[j]);
00422 /* break; */
00423 /* break;//zzz6/16/84 reg// */
00424 }
00425 }
00426 }
00427 if (father->isapex)
00428 levelpull(father);
00429 }
|
|
|
??? (to be defined) zzz reg 1999 this recombines too much Definition at line 356 of file recombine.cxx. References typecuc::age, eatbrossubtreeseq(), getleftson(), typecuc::height, typecuc::leftson, levelpull(), macrogetrightbro, MAXUCINLOAF, typecuc::numberofsons, RESERVED, typecuc::rightbro, roomformoresons(), takeovernephewsseq(), and typecorecrum. Referenced by recombine().
00358 {
00360 typecuc *ptr;
00361
00362 if (father->height < 3 || !father->modified)
00363 return;
00364
00365 if (!roomformoresons(father))
00366 return;
00367
00368 for (ptr = (typecuc *) getleftson(father); ptr; ptr = (typecuc *) macrogetrightbro((typecorecrum *) ptr))
00369 recombineseq(ptr);
00370
00371 for (ptr = (typecuc *) getleftson(father); ptr && ptr->rightbro; ptr = (typecuc *) macrogetrightbro((typecorecrum *) ptr)) {
00372 if (ptr->age == RESERVED)
00373 continue;
00374
00375 if (ptr->leftson && roomformoresons(ptr)) {
00376 /* if (ptr->leftson && toofewsons (ptr)) {* */
00377 if (((typecuc *) ptr->rightbro)->leftson) {
00378 if (ptr->numberofsons + ((typecuc *) ptr->rightbro)->numberofsons <= MAXUCINLOAF) {
00379 eatbrossubtreeseq(ptr);
00380 break;
00381 } else {
00382 takeovernephewsseq((typecorecrum *) ptr);
00383 break;
00384 }
00385 }
00386 }
00387 }
00388 if (father->isapex)
00389 levelpull(father);
00390 }
|
|
||||||||||||
|
??? (to be defined) Definition at line 246 of file recombine.cxx. References assert, typecorecrumhedr::cdsp, typewid::dsas, GREATER, tumbleradd, tumblercmp(), and typecorecrum. Referenced by getorderedsons().
00249 {
00250 typecorecrum *temp;
00251 int gap, i, j;
00252
00253 Tumbler tarray[100], *tarrayp[100], *temptp;
00254
00255 if (n > 100)
00256 assert(0); // fatal error in shellsort in be under recombine - n > 100
00257
00258 for (i = 0; i < n; i++) { /* build up a list of sumps of disp[0] and dsp[1] */
00259 /* for compare crums diagonally hack */
00260 tumbleradd(&v[i]->cdsp.dsas[0], &v[i]->cdsp.dsas[1], &tarray[i]);
00261 tarrayp[i] = &tarray[i];
00262 }
00263 for (gap = n / 2; gap > 0; gap /= 2)
00264 for (i = gap; i < n; i++)
00265 for (j = i - gap; j >= 0 && tumblercmp(tarrayp[j], tarrayp[j + gap]) == GREATER; j -= gap) {
00266 temp = v[j];
00267 temptp = tarrayp[j];
00268 v[j] = v[j + gap];
00269 tarrayp[j] = tarrayp[j + gap];
00270 v[j + gap] = temp;
00271 tarrayp[j + gap] = temptp;
00272 }
00273 }
|
|
||||||||||||
|
??? (to be defined) Definition at line 210 of file recombine.cxx. References adopt(), typecorecrumhedr::cdsp, typecuc::cdsp, typecuc::cenftype, disown(), dspadd(), dspsub(), freecrum(), getfather(), ivemodified(), makeroomonleftnd(), notakenephewnd, NULL, typecuc::numberofsons, prologuend(), RIGHTMOSTSON, setwispupwards(), typecorecrum, and typedsp. Referenced by takeovernephewsnd().
00213 {
00214 typedsp nephewsgrasp, grasp, offset;
00215
00216 ++notakenephewnd;
00217
00218 typecuc *bro = (typecuc *) getfather((typecorecrum *) nephew);
00219 disown((typecorecrum *) nephew);
00220 dspadd(&bro->cdsp, &nephew->cdsp, &nephew->cdsp, bro->cenftype);
00221 adopt((typecorecrum *) nephew, RIGHTMOSTSON, (typecorecrum *) me);
00222 prologuend((typecorecrum *) nephew, &bro->cdsp, &nephewsgrasp, (typedsp *) NULL);
00223 /* L("in takenephewnd calling makeroomnd \n"); */
00224 makeroomonleftnd(me, &offset, &nephew->cdsp, &grasp);
00225 dspsub(&nephew->cdsp, &me->cdsp, &nephew->cdsp, me->cenftype);
00226
00227 if (!bro->numberofsons) {
00228 disown((typecorecrum *) bro);
00229 freecrum((typecorecrum *) bro);
00230 } else {
00231 setwispupwards(bro, 0);
00232 }
00233
00234 ivemodified((typecorecrum *) nephew);
00235 setwispupwards(me, 1);
00236 }
|
|
||||||||||||
|
??? (to be defined) Definition at line 305 of file recombine.cxx. References disown(), eatbrossubtreend(), findleftson(), freecrum(), getorderedsons(), typecuc::leftson, MAXUCINLOAF, NULL, typecuc::numberofsons, roomformoresons(), setwispupwards(), takenephewnd(), and typecorecrum. Referenced by recombinend().
00308 {
00309 typecorecrum *sons[MAXUCINLOAF], *ptr;
00310 int i, n;
00311
00312 typecuc *me = *meptr;
00313 typecuc *bro = *broptr;
00314
00315 if (!me->leftson || !bro->leftson)
00316 return false;
00317
00318 bool ret = false;
00319 if (me->numberofsons + bro->numberofsons <= MAXUCINLOAF) {
00320 eatbrossubtreend(me, bro);
00321 *broptr = NULL;
00322 return true;
00323
00324 } else {
00325 getorderedsons(bro, sons);
00326 findleftson(bro); /* to make sure its in core zzzz */
00327 n = bro->numberofsons;
00328 for (i = 0; i < n && roomformoresons(me); i++) {
00329 ptr = sons[i];
00330 takenephewnd(me, (typecuc *) ptr);
00331 /* fixincoresubtreewids(me); */
00332 ret = true;
00333 }
00334 }
00335
00336 if (bro->numberofsons)
00337 setwispupwards(bro, 0);
00338 else {
00339 disown((typecorecrum *) bro);
00340 freecrum((typecorecrum *) bro);
00341 *broptr = NULL;
00342 }
00343
00344 setwispupwards(me, 1);
00345 return ret;
00346 }
|
|
|
??? (to be defined) Definition at line 99 of file recombine.cxx. References adopt(), typecuc::age, disown(), getleftson(), getrightbro, ivemodified(), RESERVED, RIGHTMOSTSON, roomformoresons(), routinegetrightbro(), setwispupwards(), and typecorecrum. Referenced by recombineseq().
00101 {
00102 typecuc *ptr;
00103 typecorecrum *next;
00104
00105 for (ptr = (typecuc *) getleftson((typecuc *) routinegetrightbro(me)); ptr && roomformoresons((typecuc *) me); ptr = (typecuc *) next) {
00106 next = (typecorecrum *) routinegetrightbro((typecorecrum *) ptr);
00107 if (ptr->age == RESERVED)
00108 continue;
00109 disown((typecorecrum *) ptr);
00110 adopt((typecorecrum *) ptr, RIGHTMOSTSON, me);
00111 ivemodified((typecorecrum *) ptr);
00112 }
00113 setwispupwards((typecuc *) getrightbro(me), 0);
00114 setwispupwards((typecuc *) me, 1);
00115 }
|
|
|
Definition at line 87 of file recombine.cxx. Referenced by eatbrossubtreend(). |
|
|
Definition at line 85 of file recombine.cxx. Referenced by ishouldbother(). |
|
|
Definition at line 86 of file recombine.cxx. Referenced by takenephewnd(). |
1.3.4