libsrc/wisp.cxx File Reference

integrated wid and dsp arithmetic routines More...

#include <memory.h>
#include "udanax.h"

Include dependency graph for wisp.cxx:

Include dependency graph

Go to the source code of this file.

Defines

#define widopseq(a, b, c)   lockadd((a)->dsas,(b)->dsas,(c)->dsas,widsize(GRAN))

Functions

void dspadd (typedsp *a, typewisp *b, typedsp *c, int enftype)
 ???

void dspsub (typedsp *a, typewisp *b, typedsp *c, int enftype)
 ???

bool setwispupwards (typecuc *ptr, int testflag)
 ???

bool setwidseq (typecuc *father)
 ???

void lockmin (Tumbler *lock1, Tumbler *lock2, Tumbler *lock3, unsigned loxize)
 ???

void lockmax (Tumbler *lock1, Tumbler *lock2, Tumbler *lock3, unsigned loxize)
 ???

void didntchangewisps ()
 ???

bool setwispnd (typecuc *father)
 ???

bool setwisp (typecorecrum *ptr)
 ???

void setwidnd (typecuc *father)
 ???

bool iszerolock (Tumbler *lock, unsigned loxize)
 ???

bool lockeq (Tumbler *lock1, Tumbler *lock2, unsigned loxize)
 ???

void lockadd (Tumbler *lock1, Tumbler *lock2, Tumbler *lock3, unsigned loxize)
 ???

void locksubtract (Tumbler *lock1, Tumbler *lock2, Tumbler *lock3, unsigned loxize)
 ???

bool lockis1story (Tumbler *lock, unsigned loxize)
 ???


Detailed Description

integrated wid and dsp arithmetic routines

(to be defined)

Definition in file wisp.cxx.


Define Documentation

#define widopseq a,
b,
 )     lockadd((a)->dsas,(b)->dsas,(c)->dsas,widsize(GRAN))
 

Definition at line 181 of file wisp.cxx.

Referenced by setwidseq().


Function Documentation

void didntchangewisps  )  [static]
 

???

(to be defined)

Definition at line 267 of file wisp.cxx.

Referenced by setwispnd().

00268 {
00269 }

void dspadd typedsp a,
typewisp b,
typedsp c,
int  enftype
 

???

(to be defined)

Definition at line 89 of file wisp.cxx.

References typewid::dsas, dspsize, lockadd(), typedsp, and typewisp.

Referenced by doshowspanf(), findcbcinarea2d(), findcbcinspanseq(), findcbcseq(), findcbcseqcrum(), fixdspsofbroschildren(), graphcrum(), insertcbcnd(), insertseq(), makecontextfromcbc(), newpeelcrumoffnd(), prologuecontextnd(), prologuend(), setwispnd(), showspanfcrum(), slicecbcpm(), and takenephewnd().

00097 {
00098     lockadd(a->dsas, b->dsas, c->dsas, (unsigned)dspsize(enftype));
00099 }

void dspsub typedsp a,
typewisp b,
typedsp c,
int  enftype
 

???

(to be defined)

Definition at line 109 of file wisp.cxx.

References typewid::dsas, dspsize, locksubtract(), typedsp, and typewisp.

Referenced by fixdspsofbroschildren(), insertcbcnd(), newpeelcrumoffnd(), setwispnd(), and takenephewnd().

00114 {
00115     locksubtract(a->dsas, b->dsas, c->dsas, (unsigned)dspsize(enftype));
00116 }

bool iszerolock Tumbler lock,
unsigned  loxize
 

???

(to be defined)

Definition at line 413 of file wisp.cxx.

References iszerotumbler.

Referenced by findvsatoappend(), insertcbcnd(), isemptyenfilade(), isemptyorgl(), and setwispnd().

00416 {
00417     while (loxize--)
00418         if (!iszerotumbler(lock++))
00419             return false;
00420 
00421     return true;
00422 }

void lockadd Tumbler lock1,
Tumbler lock2,
Tumbler lock3,
unsigned  loxize
 

???

(to be defined)

Definition at line 452 of file wisp.cxx.

References tumbleradd.

Referenced by dspadd(), and setwispnd().

00458 {
00459     while (loxize--)
00460         tumbleradd(lock1++, lock2++, lock3++);
00461 }

bool lockeq Tumbler lock1,
Tumbler lock2,
unsigned  loxize
 

???

(to be defined)

Definition at line 432 of file wisp.cxx.

References tumblereq().

Referenced by isanextensionnd(), setwidnd(), setwidseq(), and setwispnd().

00436 {
00437     while (loxize--)
00438         if (!tumblereq(lock1++, lock2++))
00439             return false;
00440 
00441     return true;
00442 }

bool lockis1story Tumbler lock,
unsigned  loxize
 

???

(to be defined)

Definition at line 490 of file wisp.cxx.

References is1story().

Referenced by slicecbcpm().

00493 {
00494     while (loxize--)
00495         if (!is1story(lock++))
00496             return false;
00497 
00498     return true;
00499 }

void lockmax Tumbler lock1,
Tumbler lock2,
Tumbler lock3,
unsigned  loxize
[static]
 

???

(to be defined)

Definition at line 245 of file wisp.cxx.

References macrotumblermax.

Referenced by setwidnd(), and setwispnd().

00250 {
00251     while (loxize--) {
00252         macrotumblermax(lock1, lock2, lock3);
00253         lock1++;
00254         lock2++;
00255         lock3++;
00256     }
00257 }

void lockmin Tumbler lock1,
Tumbler lock2,
Tumbler lock3,
unsigned  loxize
[static]
 

???

(to be defined)

Definition at line 223 of file wisp.cxx.

References macrotumblermin.

Referenced by setwispnd().

00228 {
00229     while (loxize--) {
00230         macrotumblermin(lock1, lock2, lock3);
00231         lock1++;
00232         lock2++;
00233         lock3++;
00234     }
00235 }

void locksubtract Tumbler lock1,
Tumbler lock2,
Tumbler lock3,
unsigned  loxize
 

???

(to be defined)

Definition at line 471 of file wisp.cxx.

References tumblersub().

Referenced by dspsub(), and slicecbcpm().

00476 {
00477     while (loxize--)
00478         tumblersub(lock1++, lock2++, lock3++);
00479 }

void setwidnd typecuc father  ) 
 

???

(to be defined)

Definition at line 385 of file wisp.cxx.

References typecorecrumhedr::cenftype, typecuc::cenftype, clear, typecorecrumhedr::cwid, typecuc::cwid, findleftson(), getrightbro, ivemodified(), lockeq(), lockmax(), movewisp, typecorecrum, and widsize.

Referenced by makegappm().

00387 {
00388     typecorecrum *ptr;
00389     typewid newwid;
00390 
00391     for (ptr = findleftson(father); ptr; ptr = getrightbro(ptr)) {
00392         clear(&newwid, sizeof(newwid));
00393         lockmax((Tumbler *) &newwid, (Tumbler *) &ptr->cwid, (Tumbler *) &newwid, (unsigned) widsize(ptr->cenftype));
00394     }
00395 
00396     if (!lockeq((Tumbler *) &father->cwid, (Tumbler *) &newwid, (unsigned) widsize(father->cenftype))) {
00397         movewisp(&newwid, &father->cwid);
00398         ivemodified((typecorecrum *) father);   /* zzz */
00399     }
00400 }

bool setwidseq typecuc father  )  [static]
 

???

(to be defined)

Definition at line 192 of file wisp.cxx.

References typecuc::cenftype, clear, typecuc::cwid, typecorecrumhedr::cwid, typewid::dsas, findleftson(), getrightbro, typecuc::height, ivemodified(), lockeq(), movewisp, typecorecrum, widopseq, and widsize.

Referenced by setwisp().

00194 {
00195     typecorecrum *ptr;
00196 
00197     if (father->height == 0)
00198         return false;
00199 
00200     typewid sum;
00201     clear(&sum, sizeof(sum));
00202 
00203     for (ptr = findleftson(father); ptr; ptr = getrightbro(ptr))
00204         widopseq(&sum, &ptr->cwid, &sum);
00205 
00206     if (lockeq(sum.dsas, father->cwid.dsas, (unsigned) widsize(father->cenftype)))
00207         return false;
00208 
00209     movewisp(&sum, &father->cwid);
00210     ivemodified((typecorecrum *) father);       /* zzzz */
00211 
00212     return true;
00213 }

bool setwisp typecorecrum ptr  ) 
 

???

(to be defined)

Definition at line 357 of file wisp.cxx.

References assert, typecorecrumhedr::cenftype, GRAN, typecorecrumhedr::height, POOM, setwidseq(), setwispnd(), SPAN, and typecorecrum.

Referenced by assertsonswispmatchesfather(), eatbrossubtreend(), firstinsertionnd(), fixincoresubtreewids(), makecutsbackuptohere(), and setwispupwards().

00359 {
00360     if (ptr->height == 0)
00361         return false;
00362 
00363     switch (ptr->cenftype) {
00364     case GRAN:
00365         return setwidseq((typecuc *) ptr);
00366     case SPAN:
00367     case POOM:
00368         return setwispnd((typecuc *) ptr);
00369     default:
00370         assert(0); // setwisp: bad enftype
00371     }
00372 
00373     return -1;                       /* Oh, the things one has to do to make computers happy */
00374 }

bool setwispnd typecuc father  )  [static]
 

???

(to be defined)

Definition at line 280 of file wisp.cxx.

References assert, typecorecrumhedr::cdsp, typecuc::cdsp, typecuc::cenftype, typecorecrumhedr::cenftype, clear, typecorecrumhedr::cwid, typecuc::cwid, didntchangewisps(), dspadd(), dspsize, dspsub(), findleftson(), getrightbro, typecuc::height, iszerolock(), ivemodified(), lockadd(), lockeq(), lockmax(), lockmin(), movewisp, NULL, typecorecrum, typedsp, and widsize.

Referenced by setwisp().

00282 {
00283     typecorecrum *ptr;
00284     typedsp newdsp, mindsp;
00285     typewid newwid, tempwid;
00286     bool lockiszerop;
00287     bool somethingchangedp = false;     /* mindsp != 0 or some tempwid !=0 */
00288 
00289     if (father->height == 0)
00290         return false;
00291 
00292 /* remember original so can tell if changed */
00293     if ((ptr = findleftson(father)) == NULL) {
00294 #ifndef DISTRIBUTION
00295         assert(0); // in setwispnd null findleftson
00296         clear(&father->cdsp, sizeof(father->cdsp));
00297         clear(&father->cwid, sizeof(father->cwid));
00298         ivemodified((typecorecrum *) father);
00299         return true;
00300 #else
00301         assert(0);
00302 #endif
00303     }
00304 
00305 /* find new upper-left corner */
00306     movewisp(&ptr->cdsp, &mindsp);
00307     for (ptr = getrightbro(ptr); ptr; ptr = getrightbro(ptr))
00308         lockmin((Tumbler *) & mindsp, (Tumbler *) & ptr->cdsp, (Tumbler *) & mindsp, (unsigned)dspsize(ptr->cenftype));
00309 
00310     lockiszerop = iszerolock((Tumbler *) & mindsp, (unsigned)dspsize(father->cenftype));
00311     if (!lockiszerop) {
00312         somethingchangedp = true;
00313         dspadd(&father->cdsp, &mindsp, &newdsp, (int) father->cenftype);
00314     } else
00315         movewisp(&father->cdsp, &newdsp);
00316 
00317 /* find new lower-right corner at the same time that */
00318 /* we are readjusting the son's dsps to compensate */
00319 /* for change in the father */
00320     clear(&newwid, sizeof(newwid));
00321     for (ptr = findleftson(father); ptr; ptr = getrightbro(ptr)) {
00322         if (!lockiszerop) {
00323             ptr->modified = true;      /* father gets ivemodified soon */
00324             dspsub(&ptr->cdsp, &mindsp, &ptr->cdsp, (int) ptr->cenftype);
00325         }
00326 
00327         lockadd((Tumbler *) & ptr->cdsp, (Tumbler *) & ptr->cwid, (Tumbler *) & tempwid,
00328                 (unsigned)widsize(ptr->cenftype));
00329         lockmax((Tumbler *) & newwid, (Tumbler *) & tempwid, (Tumbler *) & newwid, (unsigned) widsize(ptr->cenftype));
00330     }
00331 
00332     if (!somethingchangedp && !lockeq((Tumbler *) & newwid, (Tumbler *) & father->cwid, (unsigned) widsize(father->cenftype)))
00333         somethingchangedp = true;
00334 
00335 /* report whether anything changed */
00336     if (!somethingchangedp) {
00337         didntchangewisps();
00338         return false;
00339     }
00340 
00341     movewisp(&newdsp, &father->cdsp);
00342     movewisp(&newwid, &father->cwid);
00343     ivemodified((typecorecrum *) father);
00344 
00345     return true;
00346 }

bool setwispupwards typecuc ptr,
int  testflag
 

???

(to be defined)

Definition at line 136 of file wisp.cxx.

References asserttreeisok(), findfather(), ivemodified(), setwisp(), and typecorecrum.

Referenced by cutsons(), deletend(), eatbrossubtreend(), eatbrossubtreeseq(), insertcbcnd(), insertmorend(), insertnd(), insertseq(), levelpush(), makecutsbackuptohere(), makegappm(), makeithcutonson(), newpeelcrumoffnd(), peelcrumoffnd(), rearrangend(), splitcrum(), splitcrumseq(), takenephewnd(), takeovernephewsnd(), and takeovernephewsseq().

00139 {
00140     typecuc *father;
00141 
00142     int ntimeschanged = 0;
00143 /* checkwholesubtree(ptr); */
00144 /* asserttreeisok(ptr); */
00145     if (!ptr)
00146         return 0;
00147 
00148     typecuc *oldptr = ptr;
00149 
00150     bool changed;
00151     for (changed = true; changed && ptr; ptr = father) {
00152         father  = findfather((typecorecrum *) ptr);
00153         changed = setwisp((typecorecrum *) ptr);
00154         if (changed)
00155             ntimeschanged += 1;
00156     }
00157 
00158     if (ntimeschanged)
00159         ivemodified((typecorecrum *) oldptr);
00160 
00161 #ifndef DISTRIBUTION
00162     if (testflag)
00163         asserttreeisok((typecorecrum *) oldptr);
00164 #endif
00165 
00166     return 0 != ntimeschanged;
00167 }


Generated on Sun Aug 21 04:18:41 2005 for Udanax-Green by doxygen1.3.4