libsrc/correspond.cxx File Reference

Routines for comparing versions --- lower level. More...

#include "udanax.h"

Include dependency graph for correspond.cxx:

Include dependency graph

Go to the source code of this file.

Functions

void restrictvspecsetovercommonispans (Session *sess, typeispanset ispanset, typespecset specset, typespecset *newspecsetptr)
 ???

void removespansnotinoriginal (Session *sess, typespecset original, typespecset *newptr)
 ???

void restrictspecsetsaccordingtoispans (Session *sess, typeispanset ispanset, typespecset *specset1, typespecset *specset2)
 ???

bool spanintersection (typespan *aptr, typespan *bptr, typespan *cptr)
 ???

bool comparespans (Session *sess, typespan *span1, typespan *span2, typespan **span3, typeitemid spantype)
 ???

bool intersectspansets (Session *sess, typespanset set1, typespanset set2, typespanset *set3, typeitemid spantype)
 ???

typespanpairmakespanpair (Session *sess, Tumbler *doc1, Tumbler *start1, Tumbler *doc2, Tumbler *start2, Tumbler *width)
 ???

void makespanpairsforispan (Session *sess, Tumbler *iwidth, typespecset *specset1ptr, typespecset *specset2ptr, typespanpairset *pairsetptr)
 ???

void makespanpairset (Session *sess, typeispanset ispanset, typespecset specset1, typespecset specset2, typespanpairset *pairsetptr)
 ???


Detailed Description

Routines for comparing versions --- lower level.

(to be defined)

Definition in file correspond.cxx.


Function Documentation

bool comparespans Session sess,
typespan span1,
typespan span2,
typespan **  span3,
typeitemid  spantype
[static]
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 307 of file correspond.cxx.

References Session::freeexplicit(), iszerotumbler, typespan::itemid, NULL, spanintersection(), and typespan::width.

Referenced by intersectspansets().

00308                                          : User's session context
00309     typespan    *span1,
00310     typespan    *span2,
00311     typespan   **span3,
00312     typeitemid   spantype)
00313 {
00314     if (iszerotumbler(&span1->width) || iszerotumbler(&span2->width))
00315         return false;
00316 
00317     *span3 = new(sess) typespan;
00318 //    *span3 = (typespan *) sess->alloc(sizeof(typespan));
00319     (*span3)->itemid = spantype;
00320     (*span3)->next   = NULL;
00321 
00322     if (spanintersection(span1, span2, *span3))
00323         return true;
00324     else {
00325         sess->freeexplicit((char *) *span3);
00326         *span3 = NULL;
00327         return false;
00328     }
00329 }

bool intersectspansets Session sess,
typespanset  set1,
typespanset  set2,
typespanset set3,
typeitemid  spantype
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 339 of file correspond.cxx.

References assert, comparespans(), foo(), foospanset(), typespan::next, NULL, and typespanset.

Referenced by doshowrelationof2versions(), and removespansnotinoriginal().

00340                                          : User's session context
00341     typespanset  set1,
00342     typespanset  set2,
00343     typespanset *set3,
00344     typeitemid   spantype)
00345 {
00346     /*BUG: there is some inconsistency in this function as to whether set3 is a typespanset or a ptr to a typespanset */
00347     typespan *p;
00348 
00349 #ifndef DISTRIBUTION
00350     foo("entering intersectspansets");
00351 #endif
00352 
00353     if (!set1 || !set2 || !set3)
00354         assert(0); // Bad intersectspansets call
00355 
00356 #ifndef DISTRIBUTION
00357     foo("dumping set1\n");
00358     foospanset("", set1);
00359     foo("dumping set2\n");
00360     foospanset("", set2);
00361 #endif
00362     *set3 = NULL;
00363     for (; set1; set1 = set1->next) {
00364         for (p = set2; p; p = p->next) {
00365             if (comparespans(sess, set1, p, set3, spantype))
00366                 set3 = &(*set3)->next;
00367         }
00368     }
00369 #ifndef DISTRIBUTION
00370     foo("leaving intersectspansets");
00371     foo("dumping set3\n");
00372     foospanset("", *set3);
00373 #endif
00374     return true;
00375 }

typespanpair* makespanpair Session sess,
Tumbler doc1,
Tumbler start1,
Tumbler doc2,
Tumbler start2,
Tumbler width
[static]
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 385 of file correspond.cxx.

References docidandvstream2tumbler(), movetumbler, typespanpair::stream1, typespanpair::stream2, and typespanpair::widthofspan.

Referenced by makespanpairsforispan().

00386                                      : User's session context
00387     Tumbler *doc1,
00388     Tumbler *start1,
00389     Tumbler *doc2,
00390     Tumbler *start2,
00391     Tumbler *width)
00392 {
00393     typespanpair *spanpair = new(sess) typespanpair;
00394     //    spanpair = (typespanpair *) sess->alloc(sizeof(typespanpair));
00395 
00396     docidandvstream2tumbler(doc1, start1, &spanpair->stream1);
00397     docidandvstream2tumbler(doc2, start2, &spanpair->stream2);
00398     movetumbler(width, &spanpair->widthofspan);
00399 
00400     return spanpair;
00401 }

void makespanpairset Session sess,
typeispanset  ispanset,
typespecset  specset1,
typespecset  specset2,
typespanpairset pairsetptr
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 489 of file correspond.cxx.

References foo(), fooitemset(), makespanpairsforispan(), movetumbler, typespan::next, typespanpair::nextspanpair, NULL, typeispanset, typespanpairset, typespecset, and typespan::width.

Referenced by ispansetandspecsets2spanpairset().

00490                                              : User's session context
00491     typeispanset     ispanset,
00492     typespecset      specset1,
00493     typespecset      specset2,
00494     typespanpairset *pairsetptr)
00495 {
00496     Tumbler iwidth;
00497     typespanpairset pairset;
00498 
00499 #ifndef DISTRIBUTION
00500     foo("entering makespanpairset");
00501     fooitemset("ispanset = \n", (typeitem *) ispanset);
00502     fooitemset("specset1 = \n", (typeitem *) specset1);
00503     fooitemset("specset2 = \n", (typeitem *) specset2);
00504 #endif
00505     *pairsetptr = NULL;
00506     for (; ispanset; ispanset = ispanset->next) {
00507         movetumbler(&ispanset->width, &iwidth);
00508         makespanpairsforispan(sess, &iwidth, &specset1, &specset2, &pairset);
00509         *pairsetptr = pairset;
00510         pairsetptr = &pairset->nextspanpair;
00511     }
00512     *pairsetptr = NULL;
00513 #ifndef DISTRIBUTION
00514     foo("leaving makespanpairset");
00515 #endif
00516 }

void makespanpairsforispan Session sess,
Tumbler iwidth,
typespecset specset1ptr,
typespecset specset2ptr,
typespanpairset pairsetptr
[static]
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 411 of file correspond.cxx.

References typevspec::docisa, EQUAL, foo(), fooitemset(), GREATER, LESS, makespanpair(), typevspec::next, typespan::next, typespanpair::nextspanpair, NULL, spec2, typespan::stream, tumbleradd, tumblerclear, tumblercmp(), tumblersub(), typespanpairset, typespecset, typevspec::vspanset, and typespan::width.

Referenced by makespanpairset().

00412                                              : User's session context
00413     Tumbler         *iwidth,
00414     typespecset     *specset1ptr,
00415     typespecset     *specset2ptr,
00416     typespanpairset *pairsetptr)
00417 {
00418     typevspec *spec1, *spec2;
00419     typespan *span1, *span2;
00420     Tumbler sum;
00421     int cmp;
00422 
00423 #ifndef DISTRIBUTION
00424     foo("entering makespanpairsforispan\n");
00425     fooitemset("\n*specset1ptr = \n", (typeitem *) *specset1ptr);
00426     fooitemset("\n*specset2ptr = \n", (typeitem *) *specset2ptr);
00427 #endif
00428     *pairsetptr = NULL;
00429     tumblerclear(&sum);
00430     spec1 = (typevspec *) * specset1ptr;
00431     span1 = spec1->vspanset;
00432     spec2 = (typevspec *) * specset2ptr;
00433     span2 = spec2->vspanset;
00434     while (span1 && span2 && tumblercmp(iwidth, &sum) == GREATER) {
00435         cmp = tumblercmp(&span1->width, &span2->width);
00436         switch (cmp) {
00437         case LESS:
00438         case EQUAL:
00439             *pairsetptr =
00440                     makespanpair(sess, &spec1->docisa, &span1->stream, &spec2->docisa, &span2->stream,
00441                                  &span1->width);
00442             tumbleradd(&sum, &span1->width, &sum);
00443             if (cmp == EQUAL)
00444                 span2 = span2->next;
00445             else {
00446                 tumbleradd(&span2->stream, &span1->width, &span2->stream);
00447                 tumblersub(&span2->width, &span1->width, &span2->width);
00448             }
00449             span1 = span1->next;
00450             break;
00451         case GREATER:
00452             *pairsetptr =
00453                     makespanpair(sess, &spec1->docisa, &span1->stream, &spec2->docisa, &span2->stream,
00454                                  &span2->width);
00455             tumbleradd(&sum, &span2->width, &sum);
00456             tumbleradd(&span1->stream, &span2->width, &span1->stream);
00457             tumblersub(&span1->width, &span2->width, &span1->width);
00458             span2 = span2->next;
00459         }
00460         spec1->vspanset = span1;
00461         spec2->vspanset = span2;
00462         if (!span1) {
00463             spec1 = spec1->next;
00464             *specset1ptr = (typespecset) spec1;
00465             if (spec1)
00466                 span1 = spec1->vspanset;
00467         }
00468         if (!span2) {
00469             spec2 = spec2->next;
00470             *specset2ptr = (typespecset) spec2;
00471             if (spec2)
00472                 span2 = spec2->vspanset;
00473         }
00474         pairsetptr = &(*pairsetptr)->nextspanpair;
00475     }
00476 #ifndef DISTRIBUTION
00477     foo("leaving makespanpairsforispan\n");
00478 #endif
00479 }

void removespansnotinoriginal Session sess,
typespecset  original,
typespecset newptr
[static]
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 147 of file correspond.cxx.

References assert, typevspec::docisa, Session::freeitemset(), intersectspansets(), typevspec::itemid, movetumbler, typevspec::next, NULL, tumblercmp(), typeitemset, typespecset, typevspanset, VSPANID, typevspec::vspanset, and VSPECID.

Referenced by restrictspecsetsaccordingtoispans().

00148                                          : User's session context
00149     typespecset  original,
00150     typespecset *newptr)
00151 {
00152     typevspanset newspanset;
00153     typevspec *okspec;
00154 
00155     if (!newptr || !*newptr || !original)
00156         assert(0); // Bad removespans call
00157 
00158     typevspec *first = NULL;
00159     typevspec **nextptr = NULL;
00160 
00161     typespecset newss;
00162     for (newss = *newptr; newss; newss = (typespecset) ((typeitemheader *) newss)->next) {
00163         typespecset oldss;
00164 
00165         for (oldss = original; oldss; oldss = (typespecset) ((typeitemheader *) oldss)->next) {
00166 
00167             if (tumblercmp(&((typevspec *) newss)->docisa, &((typevspec *) oldss)->docisa))
00168                 continue;
00169 
00170             if (intersectspansets(sess, ((typevspec *) newss)->vspanset, ((typevspec *) oldss)->vspanset, &newspanset, VSPANID)) {
00171                 okspec = new(sess) typevspec;
00172 //                okspec = (typevspec *) sess->alloc(sizeof(typevspec));
00173                 okspec->itemid = VSPECID;
00174                 movetumbler(&((typevspec *) newss)->docisa, &okspec->docisa);
00175                 okspec->vspanset = newspanset;
00176 
00177                 if (!first)
00178                     first = okspec;
00179                 else
00180                     *nextptr = okspec;
00181 
00182                 nextptr = &okspec->next;
00183             }
00184         }
00185     }
00186 
00187     sess->freeitemset((typeitemset) * newptr);
00188     *nextptr = NULL;
00189     *newptr = (typespecset) first;
00190 }

void restrictspecsetsaccordingtoispans Session sess,
typeispanset  ispanset,
typespecset specset1,
typespecset specset2
 

???

(to be defined)

specset1

specset2

Parameters:
sess  Input: User's session context

Definition at line 200 of file correspond.cxx.

References fooitemset(), Session::freeitemset(), removespansnotinoriginal(), restrictvspecsetovercommonispans(), typeispanset, typeitemset, and typespecset.

Referenced by ispansetandspecsets2spanpairset().

00201                                           : User's session context
00202     typeispanset  ispanset,
00203     typespecset  *specset1,
00204     typespecset  *specset2)
00205 {
00206     typespecset s1;
00207     typespecset s2;
00208 
00209 #ifndef DISTRIBUTION
00210     fooitemset("entering retrievespecsetsaccordingtoispans \n", (typeitem *) *specset1);
00211     fooitemset("\n specset2 = \n", (typeitem *) *specset2);
00212 #endif
00213     restrictvspecsetovercommonispans(sess, ispanset, *specset1, &s1);
00214 /* removespansnotinoriginal (sess, *specset1, &s1); */
00215     removespansnotinoriginal(sess, s1, specset1);
00216 
00217     sess->freeitemset( (typeitemset) s1);
00218 /* *specset1 = s1; */
00219     restrictvspecsetovercommonispans(sess, ispanset, *specset2, &s2);
00220 /* removespansnotinoriginal (sess, *specset2, &s2); */
00221     removespansnotinoriginal(sess, s2, specset2);
00222 
00223     sess->freeitemset( (typeitemset) s2);
00224 /* *specset2 = s2; */
00225 #ifndef DISTRIBUTION
00226     fooitemset("leaving retrievespecsetsaccordingtoispans \n", (typeitem *) *specset1);
00227     fooitemset("\n specset2 = \n", (typeitem *) *specset2);
00228 #endif
00229 }

void restrictvspecsetovercommonispans Session sess,
typeispanset  ispanset,
typespecset  specset,
typespecset newspecsetptr
[static]
 

???

(to be defined)

Parameters:
sess  Input: User's session context

Definition at line 98 of file correspond.cxx.

References assert, typevspec::docisa, findorgl(), fooitemset(), granf, ispan2vspanset(), typevspec::itemid, movetumbler, typevspec::next, typespan::next, NULL, READBERT, typeispanset, typeorgl, typespecset, typevspanset, typevspec::vspanset, and VSPECID.

Referenced by restrictspecsetsaccordingtoispans().

00099                                           : User's session context
00100     typeispanset  ispanset,
00101     typespecset   specset,
00102     typespecset  *newspecsetptr)
00103 {
00104     typeorgl versionorgl;
00105     typevspec *s1;
00106     typevspanset docvspanset;
00107 
00108 #ifndef DISTRIBUTION
00109     fooitemset("entering restrictspecsetovercommonispans \n", (typeitem *) ispanset);
00110     fooitemset("\nspecset = \n", (typeitem *) specset);
00111 #endif
00112 
00113     *newspecsetptr = NULL;
00114     for (; ispanset; ispanset = ispanset->next) {
00115         for (; specset; specset = (typespecset) ((typeitemheader *) specset)->next) {
00116             if (!findorgl(sess, granf, &((typevspec *) specset)->docisa, &versionorgl, READBERT))
00117                 assert(0); // restrictvspecset
00118 
00119             docvspanset = NULL;
00120             if (ispan2vspanset(sess, versionorgl, ispanset, &docvspanset)) {
00121                 s1 = new(sess) typevspec;
00122 //                s1 = (typevspec *) sess->alloc(sizeof(typevspec));
00123                 s1->itemid = VSPECID;
00124                 *newspecsetptr = (typespecset) s1;
00125                 movetumbler(&((typevspec *) specset)->docisa, &s1->docisa);
00126                 s1->vspanset = docvspanset;
00127                 newspecsetptr = (typespecset *) & s1->next;
00128             }
00129         }
00130     }
00131     *newspecsetptr = NULL;
00132 #ifndef DISTRIBUTION
00133     fooitemset("leaving restrictspecsetovercommonispans \n", (typeitem *) ispanset);
00134     fooitemset("\nspecset = \n", (typeitem *) specset);
00135     fooitemset("\n newspecset = \n", (typeitem *) *newspecsetptr);
00136 #endif
00137 }

bool spanintersection typespan aptr,
typespan bptr,
typespan cptr
[static]
 

???

(to be defined)

Definition at line 239 of file correspond.cxx.

References EQUAL, foospan(), GREATER, LESS, movetumbler, typespan::stream, tumbleradd, tumblerclear, tumblercmp(), tumblersub(), and typespan::width.

Referenced by comparespans().

00243 {
00244     Tumbler aend, bend;
00245 
00246     tumblerclear(&cptr->stream);
00247     tumblerclear(&cptr->width);
00248     tumbleradd(&bptr->stream, &bptr->width, &bend);
00249     if (tumblercmp(&aptr->stream, &bend) >= EQUAL)
00250         return (false);
00251     tumbleradd(&aptr->stream, &aptr->width, &aend);
00252     if (tumblercmp(&bptr->stream, &aend) >= EQUAL)
00253         return (false);
00254 /* these following assignments are clearly wrong 12/4/84 */
00255     switch (tumblercmp(&aptr->stream, &bptr->stream)) {
00256     case EQUAL:                       /* this ones probably ok */
00257         movetumbler(&aptr->stream, &cptr->stream);
00258         switch (tumblercmp(&aend, &bend)) {
00259         case EQUAL:
00260         case LESS:
00261             movetumbler(&aptr->width, &cptr->width);
00262             break;
00263         case GREATER:
00264             movetumbler(&bptr->width, &cptr->width);
00265         }
00266         break;
00267     case GREATER:
00268         movetumbler(&aptr->stream, &cptr->stream);
00269         switch (tumblercmp(&aend, &bend)) {
00270         case EQUAL:
00271         case LESS:                    /* ok */
00272             movetumbler(&aptr->width, &cptr->width);
00273             break;
00274         case GREATER:                 /* ???? */
00275             tumblersub(&bend, &aptr->stream, &cptr->width);
00276 /* movetumbler (&bptr->width, &cptr->width); */
00277         }
00278         break;
00279     case LESS:
00280         movetumbler(&bptr->stream, &cptr->stream);
00281         switch (tumblercmp(&aend, &bend)) {
00282         case EQUAL:
00283         case GREATER:                 /* ok */
00284             movetumbler(&bptr->width, &cptr->width);
00285             break;
00286         case LESS:                    /* ??? */
00287             tumblersub(&aend, &bptr->stream, &cptr->width);
00288 /* movetumbler (&aptr->width, &cptr->width); */
00289         }
00290     }
00291 #ifndef DISTRIBUTION
00292     foospan("in spanintersection \n aspan = ", aptr);
00293     foospan("\n bspan = ", bptr);
00294     foospan("\n cspan = ", cptr);
00295 #endif
00296     return (true);
00297 }


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