Changeset 87beab7 in git


Ignore:
Timestamp:
Feb 11, 2009, 10:24:08 PM (15 years ago)
Author:
Christian Eder
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
34fcf813ea36a30ddd0d8107abf9a73b247be289
Parents:
c5d8ddb1112344ad68257ea0c296d5b17aee0433
Message:
lots of stuff debugged, lots of wrong loop terminations improved, still problems with reduction subalgorithms reduction(), topReduction() & findReductor()


git-svn-id: file:///usr/local/Singular/svn/trunk@11370 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
kernel
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • kernel/f5data.cc

    rc5d8dd r87beab7  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: f5data.cc,v 1.4 2009-02-08 19:17:54 ederc Exp $ */
     4/* $Id: f5data.cc,v 1.5 2009-02-11 21:24:07 ederc Exp $ */
    55/*
    66* ABSTRACT: lpolynomial definition
     
    3030================================================================
    3131*/
    32 LPoly::LPoly(poly t,int i,poly p) {
    33     set(t,i,p);
     32LPoly::LPoly(poly t,int i,poly p, Rule* r) {
     33    set(t,i,p,r);
    3434}
    3535
     
    4646}
    4747
     48void LPoly::setRule(Rule* r) {
     49    _rule   =   r;
     50}
     51
    4852poly LPoly::getPoly() {
    4953    return polynomial;
     
    5862}
    5963
    60 void LPoly::set(poly t, int i, poly p) {
     64Rule* LPoly::getRule() {
     65    return _rule;
     66}
     67void LPoly::set(poly t, int i, poly p, Rule* r) {
    6168    this->setTerm(t);
    6269    this->setIndex(i);
    6370    this->setPoly(p);
     71    this->setRule(r);
    6472}
    6573
     
    143151===================================
    144152*/
    145 Rule::Rule(int i, poly t, LPoly* l) {
     153Rule::Rule(int i, poly t) {
    146154    index   =   i;
    147155    term    =   t;
    148     origin  =   l;
    149156}
    150157
     
    156163    return term;
    157164}
    158 
    159 LPoly* Rule::getOrigin() {
    160     return origin;
    161 }
    162 
    163 void Rule::setOrigin(LPoly* l) {
    164     origin  =   l;
    165 }
    166165#endif
  • kernel/f5data.h

    rc5d8dd r87beab7  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: f5data.h,v 1.4 2009-02-08 19:17:54 ederc Exp $ */
     4/* $Id: f5data.h,v 1.5 2009-02-11 21:24:07 ederc Exp $ */
    55/*
    66* ABSTRACT: labeled polynomial interface
     
    3131        int     index;          //index of signature
    3232        poly    polynomial;     //standard polynomial data
     33        Rule*   _rule;
    3334    public:
    34                 LPoly(poly t, int i, poly p);
     35                LPoly(poly t, int i, poly p, Rule* r=NULL);
    3536        void    setPoly(poly p);
    3637        poly    getPoly();
     
    3940        void    setIndex(int i);
    4041        int     getIndex();
    41         void    set(poly t, int i, poly p);
     42        void    setRule(Rule* r);
     43        Rule*   getRule();
     44        void    set(poly t, int i, poly p, Rule* r);
    4245        LPoly*  get();
    4346};
     
    8487        int     index;      // index of the labeled polynomial the rule comes from
    8588        poly    term;       // term of the labeled polynomial the rule comes from
    86         LPoly*  origin;     // pointer of the LPoly which generated this rule (needed in criterion2())
    8789    public:
    88                 Rule(int i, poly term, LPoly* l);
     90                Rule(int i, poly term);
    8991        int     getIndex();
    9092        poly    getTerm();
    91         LPoly*  getOrigin();
    92         void    setOrigin(LPoly* l);
    9393};
    9494#endif
  • kernel/f5gb.cc

    rc5d8dd r87beab7  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: f5gb.cc,v 1.25 2009-02-09 14:24:08 ederc Exp $ */
     4/* $Id: f5gb.cc,v 1.26 2009-02-11 21:24:07 ederc Exp $ */
    55/*
    66* ABSTRACT: f5gb interface
     
    6969==================================================
    7070*/
    71 LList* F5inc(int i, poly f_i, LList* gPrev, ideal gbPrev, poly ONE) {
     71LList* F5inc(int i, poly f_i, LList* gPrev, ideal gbPrev, poly ONE, LTagList* lTag, RList* rules, RTagList* rTag) {
    7272    int j;
    73     // tag the first element of index i-1 for criterion 1
    74     LTagList* lTag  =   new LTagList(gPrev->getFirst());
    75     // first element in rTag is NULL, this must be done due to possible later improvements
    76     RTagList* rTag  =   new RTagList();
     73    Print("%p\n",gPrev->getFirst());
     74    pWrite(gPrev->getFirst()->getPoly());
    7775    gPrev->insert(ONE,i,f_i);
    7876    Print("1st gPrev: ");
    7977    pWrite(gPrev->getFirst()->getPoly());
    8078    Print("2nd gPrev: ");
    81     pWrite(gPrev->getFirst()->getNext()->getPoly());   
     79    Print("%p",gPrev->getFirst()->getNext());
     80    //pWrite(gPrev->getFirst()->getNext()->getPoly());   
    8281    CList* critPairs        =   new CList();
    83     RList* rules            =   new RList();
    8482    CNode* critPairsMinDeg  =   new CNode();   
    8583    LNode* sPolys           =   new LNode();
    8684    // computation of critical pairs with checking of criterion 1 and criterion 2
    87     critPairs               =   criticalPair(gPrev, critPairs, lTag, rTag);
    88     LList* sPolyList        =   new LList();
     85    critPairs               =   criticalPair(gPrev, critPairs, lTag, rTag, rules);
     86    static LList* sPolyList        =   new LList();
    8987    // labeled polynomials which have passed reduction() and have to be added to list gPrev
    90     LList* completed        =   new LList();
     88    static LList* completed        =   new LList();
     89    Print("_____________________________________________________________________________%p\n",completed->getFirst()->getLPoly());
    9190    // the reduced labeled polynomials which are returned from subalgorithm reduction()
    92     LNode* reducedLPolys     =   new LNode();
     91    static LList* reducedLPolys     =   new LList();
    9392    // while there are critical pairs to be further checked and deleted/computed
    9493    while(NULL != critPairs->getFirst()->getData()) {
     
    101100        // added
    102101        computeSPols(critPairsMinDeg,rTag,rules,sPolyList);
    103          
    104         reducedLPolys   =   reduction(sPolyList, completed, gPrev, lTag, rTag, gbPrev);
    105     }
     102       
     103        // DEBUG STUFF FOR SPOLYLIST
     104        LNode* temp     =   sPolyList->getFirst();
     105        while(NULL != temp->getLPoly()) {
     106            Print("Spolylist element: ");
     107            pWrite(temp->getPoly());
     108            temp    =   temp->getNext();
     109        }
     110        reducedLPolys   =   reduction(sPolyList, completed, gPrev, rules, lTag, rTag, gbPrev);
     111    }
     112    Print("HIER123\n");
     113    Print("%p\n",rules->getFirst());
     114    Print("%p\n",rTag->getFirst());
     115    if(rules->getFirst() != rTag->getFirst()) {
     116        Print("+++++++++++++++++++++++++++++++++++++NEW RULES+++++++++++++++++++++++++++++++++++++\n");
     117        rTag->insert(rules->getFirst());
     118    }
     119    else {
     120        Print("+++++++++++++++++++++++++++++++++++NO NEW RULES++++++++++++++++++++++++++++++++++++\n");
     121    }
     122    lTag->insert(gPrev->getFirst());
    106123    return gPrev;
    107124}
     
    116133================================================================
    117134*/
    118 CList* criticalPair(LList* gPrev, CList* critPairs, LTagList* lTag, RTagList* rTag) {
     135CList* criticalPair(LList* gPrev, CList* critPairs, LTagList* lTag, RTagList* rTag, RList* rules) {
    119136    // initialization for usage in pLcm()
    120137    number nOne         =   nInit(1);
     
    143160        // testing both new labels by the F5 Criterion
    144161        if(!criterion1(u1, first, lTag) && !criterion1(u2, l, lTag) &&
    145            !criterion2(u1, first, rTag) && !criterion2(u2, l, rTag)) {
     162           !criterion2(u1, first, rules, rTag) && !criterion2(u2, l, rules, rTag)) {
    146163            // if they pass the test, add them to CList critPairs, having the LPoly with greater
    147164            // label as first element in the CPair
     
    182199        // save the monom t1*label_term(l) as it is tested various times in the following
    183200    poly u1 = ppMult_qq(*t,l->getTerm());
    184     while(NULL != testNode) {
     201    while(NULL != testNode && NULL != testNode->getLPoly()) {
    185202        if(pLmDivisibleByNoComp(testNode->getPoly(),u1)) {
    186203            Print("Criterion 1 NOT passed!\n");
     
    189206        //pWrite(testNode->getNext()->getPoly());
    190207                testNode    =   testNode->getNext();
     208        Print("ADDRESS OF TEST NODE: %p\n",testNode);
     209    Print("Hier\n");
    191210    }
    192211    Print("HIER DRIN CRITERION 1\n");
     
    202221=====================================
    203222*/
    204 bool criterion2(poly* t, LNode* l, RTagList* rTag) {
     223bool criterion2(poly* t, LNode* l, RList* rules, RTagList* rTag) {
    205224        Print("HIER DRIN CRITERION 2:=========================\n");
    206225    // start at the previously added element to gPrev, as all other elements will have the same index for sure
    207         RNode* testNode =   rTag->get(l->getIndex());
    208     Print("ADDRESS TEST NODE: %p\n", testNode);
     226        Print("%d\n",l->getIndex());
     227    RNode* testNode =   new RNode();
     228    if(NULL == rTag->getFirst()->getRule()) {
     229        testNode    =   rules->getFirst();
     230    }
     231    else {
     232        Print("%d\n",l->getIndex());
     233        Print("%d\n",rTag->getFirst()->getRuleIndex());
     234pWrite(rTag->getFirst()->getRuleTerm());
     235        if(l->getIndex() > rTag->getFirst()->getRuleIndex()) {
     236            testNode    =   rules->getFirst();
     237            Print("TEST NODE: %p\n",testNode);
     238        }
     239        else {
     240            testNode    =   rTag->get(l->getIndex());
     241        }
     242    }
    209243        // save the monom t1*label_term(l) as it is tested various times in the following
    210244    poly u1 = ppMult_qq(*t,l->getTerm());
    211         Print("Poly u1: ");
    212245        pWrite(u1);
    213246    // first element added to rTag was NULL, check for this
    214     while(NULL != testNode && NULL != testNode->getRule() && testNode->getRule()->getOrigin() != l->getLPoly()) {
    215         Print("----------------------------------------------------------------------------------------------------------------------------------------------------\n");
     247    pWrite(l->getPoly());
     248    //Print("%p\n",testNode->getRule());
     249    Print("HIER !!!!\n");
     250    // NOTE: testNode is possibly NULL as rTag->get() returns NULL for elements of index <=1!
     251    while(NULL != testNode && NULL != testNode->getRule() && testNode->getRule() != l->getRule()
     252          && l->getIndex() == testNode->getRuleIndex()) {
    216253                pWrite(ppMult_qq(*t,l->getTerm()));
    217254                pWrite(testNode->getRuleTerm());
     
    220257            return true;
    221258        }
    222     Print("HIER AUCH DRIN?\n");
    223                 Print("TEST NODE ADDRESS: %p\n",testNode->getNext());
    224                 Print("TEST NODE LPOLY ADDRESS: %p\n",testNode->getNext()->getRule());
    225259                testNode    =   testNode->getNext();
    226260    }
     
    235269=================================================================================================================
    236270*/
    237 bool criterion2(poly* t, LPoly* l, RTagList* rTag, Rule* lastRuleTested) {
     271bool criterion2(poly* t, LPoly* l, RList* rules, Rule* lastRuleTested) {
    238272    // start at the previously added element to gPrev, as all other elements will have the same index for sure
    239         RNode* testNode =   rTag->getFirst();
     273        RNode* testNode =   rules->getFirst();
    240274    // save the monom t1*label_term(l) as it is tested various times in the following
    241275    poly u1 = ppMult_qq(*t,l->getTerm());
    242276        // first element added to rTag was NULL, check for this
    243         while(NULL != testNode && NULL != testNode->getRule() && testNode->getRule() != lastRuleTested) {
     277        while(NULL != testNode->getRule() && l->getRule() != lastRuleTested) {
    244278        if(pLmDivisibleBy(testNode->getRuleTerm(),ppMult_qq(*t,l->getTerm()))) {
    245279            Print("Criterion 2 NOT passed!\n");
     
    259293*/
    260294void computeSPols(CNode* first, RTagList* rTag, RList* rules, LList* sPolyList) {
    261     CNode* temp =   first;
    262     poly zero   =   pInit();
     295    CNode* temp         =   first;
     296    static poly sp      =   pInit();
     297    Print("###############################IN SPOLS##############################\n");
    263298    while(NULL != temp->getData()) {
    264299        // only if a new rule was added since the last test in subalgorithm criticalPair()
    265         if(rules->getFirst() != rTag->getFirst()) {
     300        //if(rules->getFirst() != rTag->getFirst()) {
    266301            Print("IN SPOLS => NEW RULES AVAILABLE\n");
    267             if(!criterion2(temp->getAdT1(),temp->getAdLp1(),rTag,temp->getLastRuleTested())) {
     302            if(!criterion2(temp->getAdT1(),temp->getAdLp1(),rules,temp->getLastRuleTested())) {
    268303                // the second component is tested only when it has the actual index, otherwise there is
    269304                // no new rule to test since the last test in subalgorithm criticalPair()
    270305                if(temp->getLp2Index() == temp->getLp1Index()) {
    271                     if(!criterion2(temp->getAdT2(),temp->getAdLp2(),rTag,temp->getLastRuleTested())) {
     306                    if(!criterion2(temp->getAdT2(),temp->getAdLp2(),rules,temp->getLastRuleTested())) {
    272307                        // computation of S-polynomial
    273                         poly sp =   pInit();
    274308                        sp      =   pSub(ppMult_qq(temp->getT1(),temp->getLp1Poly()),
    275309                                         ppMult_qq(temp->getT2(),temp->getLp2Poly()));
    276                         Print("BEGIN SPOLY\n====================\n");
     310                        Print("BEGIN SPOLY1\n====================\n");
    277311                        pWrite(sp);
    278                         Print("END SPOLY\n====================\n");
    279                         if(!pCmp(sp,zero)) {
     312                        Print("END SPOLY1\n====================\n");
     313                        if(NULL == sp) {
    280314                            // as rules consist only of pointers we need to save the labeled
    281315                            // S-polynomial also of a zero S-polynomial
     
    286320                            Print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ZERO REDUCTION~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    287321                                                        reductionsToZero++;
    288                             rules->insert(temp->getLp1Index(),temp->getT1(),NULL);
    289                             rTag->setFirst(rules->getFirst());
     322                            rules->insert(temp->getLp1Index(),temp->getT1());
     323                            // as sp = NULL, delete it
     324                            delete(&sp);
    290325                        }
    291326                        else {
    292                             sPolyList->insert(temp->getT1(),temp->getLp1Index(),sp);
    293                             rules->insert(temp->getLp1Index(),temp->getT1(),sPolyList->getFirst()->getLPoly());
    294                             rTag->setFirst(rules->getFirst());
     327                            rules->insert(temp->getLp1Index(),temp->getT1());
     328                            sPolyList->insert(temp->getT1(),temp->getLp1Index(),sp,rules->getFirst()->getRule());
    295329                        }
    296330                        // data is saved in sPolyList or zero => delete sp
    297                         pDelete(&sp);
    298331                    }
    299332                }
    300333                else { // temp->getLp2Index() < temp->getLp1Index()
    301334                    // computation of S-polynomial
    302                     poly sp =   pInit();
    303335                    sp      =   pSub(ppMult_qq(temp->getT1(),temp->getLp1Poly()),
    304336                                     ppMult_qq(temp->getT2(),temp->getLp2Poly()));
    305                     Print("BEGIN SPOLY\n====================\n");
     337                    Print("BEGIN SPOLY2\n====================\n");
    306338                    pWrite(sp);
    307                     Print("END SPOLY\n====================\n");
    308                     if(!pCmp(sp,zero)) {
     339                    Print("END SPOLY2\n====================\n");
     340                    if(NULL == sp) {
    309341                        // zeroList->insert(temp->getAdT1(),temp->getLp1Index(),&sp);
    310342                        // origin of rule can be set NULL as the labeled polynomial
     
    313345                            Print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ZERO REDUCTION~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    314346                        reductionsToZero++;
    315                         rules->insert(temp->getLp1Index(),temp->getT1(),NULL);
    316                         rTag->setFirst(rules->getFirst());
    317 
     347                        rules->insert(temp->getLp1Index(),temp->getT1());
     348                        // as sp = NULL, delete it
     349                        delete(&sp);
    318350                    }
    319351                    else {
    320                         sPolyList->insert(temp->getT1(),temp->getLp1Index(),sp);
    321                         rules->insert(temp->getLp1Index(),temp->getT1(),sPolyList->getFirst()->getLPoly());
    322                         rTag->setFirst(rules->getFirst());
     352                        rules->insert(temp->getLp1Index(),temp->getT1());
     353                        sPolyList->insert(temp->getT1(),temp->getLp1Index(),sp,rules->getFirst()->getRule());
    323354                    }
    324355                    // data is saved in sPolyList or zero => delete sp
    325                     pDelete(&sp);
    326356                }
    327357            }
    328         }
     358        //}
    329359        temp    =   temp->getNext();
    330360    }
    331361    // these critical pairs can be deleted now as they are either useless for further computations or
    332362    // already saved as an S-polynomial to be reduced in the following
     363    //pDelete(&sp);
    333364    delete first;   
    334365}
     
    341372========================================================================
    342373*/
    343 LNode* reduction(LList* sPolyList, LList* completed, LList* gPrev, LTagList* lTag, RTagList* rTag,
     374LList* reduction(LList* &sPolyList, LList* &completed, LList* &gPrev, RList* &rules, LTagList* &lTag, RTagList* &rTag,
    344375                 ideal gbPrev) {
     376    Print("##########################################In REDUCTION!########################################\n");
    345377    // temporary normal form and zero polynomial for testing
    346378    poly tempNF =   pInit();
    347     poly zero   =   pInit(); 
     379    TopRed* ret =   new TopRed();
    348380    // compute only if there are any S-polynomials to be reduced
     381    Print("LENGTH OF SPOLYLIST: %d\n",sPolyList->getLength());
    349382    if(NULL != sPolyList->getFirst()->getLPoly()) {
    350383        LNode* temp =   sPolyList->getFirst();
     384        Print("HIER REDUCTION\n");
    351385        while(NULL != temp->getLPoly()) {
    352             poly test   =   temp->getPoly();
    353             Print("ADDRESS BEFORE:  %p\n",&test);
    354386            tempNF = kNF(gbPrev,currQuotient,temp->getPoly()); 
     387            pWrite(tempNF);
     388            pWrite(temp->getPoly());
    355389            temp->setPoly(tempNF);
    356             Print("ADDRESS AFTER:  %p\n",&test);
    357             Print("Nach NORMAL FORM: ");
    358390            pWrite(temp->getPoly());
    359391            // test if normal form is zero
    360             if(0 == pLmCmp(temp->getPoly(),zero)) {
    361             Print("HIER\n");
    362                             Print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ZERO REDUCTION~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
     392            if(NULL == tempNF) {
    363393                reductionsToZero++;
    364394                // TODO: sPolyList -> delete first element of list as it is zero and done
    365                
    366                 temp = temp->getNext();
    367395                // TODO: problem is that when deleting the first element, the origin of the
    368396                // corresponding rule is deleted!
     397                temp    =   temp->getNext();
    369398                //sPolyList->setFirst(temp);
     399                Print("///////////////////////////////////////////////////////////////////////\n");
     400                Print("%p\n",temp);
     401                Print("%p\n",temp->getLPoly());
     402                Print("///////////////////////////////////////////////////////////////////////\n");
    370403            }
    371404            else {
    372             //Print("HIER\n");
    373                 topReduction(temp, completed, gPrev, lTag, rTag);
     405                ret =   topReduction(temp, completed, gPrev, rules, lTag, rTag);
    374406                // in topReduction() the investigated first element of sPolyList will be deleted after its
    375407                // reduction has finished => the next to be investigated element is the newly first element
    376408                // in sPolyList => the while loop is finite
    377409                // first possible after implementation of topReduction(): temp = sPolyList->getFirst();
    378                 temp    =   temp->getNext();
    379             }
    380         }
    381     }
    382     return NULL;
     410                completed   =   ret->getCompleted();
     411            Print("~~~HIER~~~\n");
     412                if(NULL != ret->getToDo()) {
     413                    sPolyList->insertByLabel(ret->getToDo()->getFirst());
     414                }
     415            }
     416        }
     417    }
     418    return ret->getCompleted();
    383419}   
    384420
     
    391427=====================================================================================
    392428*/
    393 void topReduction(LNode* l, LList* completed, LList* gPrev, LTagList* lTag, RTagList* rTag) {
    394     Print("In topREDUCTION!\n");
    395     LRed* red   =   new LRed();
     429TopRed* topReduction(LNode* l, LList* &completed, LList* &gPrev, RList* &rules, LTagList* &lTag, RTagList* &rTag) {
     430    Print("##########################################In topREDUCTION!########################################\n");
     431    LNode* red   =   new LNode();
    396432    do {
    397         red  =   findReductor(l, completed, gPrev, lTag, rTag,
     433        red  =   findReductor(l, completed, gPrev, rules, lTag, rTag,
    398434                              red->getGPrevRedCheck(), red->getCompletedRedCheck());
     435            Print("HIER TOP RED\n");
    399436        // no reductor found
    400437        if(NULL == red) {
     438            pWrite(l->getPoly());
    401439            pNorm(l->getPoly());
     440            pWrite(l->getPoly());
     441            Print("________________________INSERT IN COMPLETED!____________________________\n");
    402442            completed->insert(l->getLPoly());
    403            
     443            Print("%p\n",completed->getFirst()->getLPoly());
     444            pWrite(completed->getFirst()->getPoly());
     445            TopRed* ret =   new TopRed(completed,NULL);
     446            return ret;
    404447        }
    405448        // reductor found
     
    421464=====================================================================
    422465*/
    423 LRed* findReductor(LNode* l,LList* completed,LList* gPrev,LTagList* lTag,RTagList* rTag,
     466LNode* findReductor(LNode* l,LList* &completed,LList* &gPrev, RList* &rules, LTagList* &lTag,RTagList* &rTag,
    424467                    LNode* gPrevRedCheck, LNode* completedRedCheck) {
    425468    number nOne     =   nInit(1);
     
    429472    LNode* temp     =   new LNode();
    430473    // setting starting point for search of reductors in gPrev
     474    Print("----------------------------------------------------------------------------%p\n",completed->getFirst()->getLPoly());
    431475    if(NULL != gPrevRedCheck) {
    432476        temp =   gPrevRedCheck;
     
    436480    }
    437481    // search only for reductors with the same index, as reductions with elements of lower
    438     // index where already done in reduction() beforehand
     482    // index were already done in reduction() beforehand
    439483    while(NULL != temp->getLPoly() && temp->getIndex() == l->getIndex()) {
    440484        // divides head term t?
     485        Print("HIER FIND\n");
    441486        if(pLmDivisibleByNoComp(temp->getPoly(),t)) {
    442487            u       =   pDivide(t,pHead(temp->getPoly()));
     
    452497            if(pLmCmp(u,l->getTerm()) != 0) {
    453498                // passing criterion 2?
     499                if(!criterion2(&u,temp, rules, rTag)) {
     500                    // passing criterion 1?
    454501                Print("HIER DRIN\n");
    455                 if(!criterion2(&u,temp,rTag)) {
    456                     // passing criterion 1?
    457502                    if(!criterion1(&u,temp,lTag)) {
    458503                        // set tag findRedCheck such that you can start at this point when the
    459504                        // next time a reductor is searched for in findReductor()
    460                         LRed* red      =   new LRed(u,temp->getIndex(),redPoly,temp->getNext(),completedRedCheck);
     505                        LNode* red      =   new LNode(u,temp->getIndex(),redPoly,NULL,temp->getNext(),completedRedCheck);
    461506                        return red;
    462507                    }
     
    473518    else {
    474519        temp    =   completed->getFirst();
     520        Print("HIER FIND\n");
     521        Print("%p\n",temp->getLPoly());
    475522    }
    476523    // search only for reductors with the same index, as reductions with elements of lower
     
    488535            if(pLmCmp(u,l->getTerm()) != 0) {
    489536                // passing criterion 2?
    490                 if(!criterion2(&u,temp,rTag)) {
     537                if(!criterion2(&u,temp, rules, rTag)) {
    491538                    // passing criterion 1?
    492539                    if(!criterion1(&u,temp,lTag)) {
    493540                        // set tag findRedCheck such that you can start at this point when the
    494541                        // next time a reductor is searched for in findReductor()
    495                         LRed* red      =   new LRed(u,temp->getIndex(),redPoly,gPrevRedCheck,temp->getNext());
     542                        LNode* red      =   new LNode(u,temp->getIndex(),redPoly,NULL,gPrevRedCheck,temp->getNext());
    496543                        return red;
    497544                    }
     
    503550
    504551    // no reductor found
     552    Print("HIER DU NULL!\n");
    505553    return NULL;
    506554}
     
    515563ideal F5main(ideal id, ring r) {
    516564    int i,j;
    517     //static int* reductionsToZero   =   new int;
    518     //*reductionsToZero       =   0;
     565    int gbLength;
    519566    // 1 polynomial for defining initial labels & further tests
    520567    poly ONE = pOne();
     568    // tag the first element of index i-1 for criterion 1
     569    LTagList* lTag  =   new LTagList();
     570    Print("LTAG BEGINNING: %p\n",lTag->getFirst());
     571   
     572    // first element in rTag is first element of rules which is NULL RNode,
     573    // this must be done due to possible later improvements
     574    RList* rules    =   new RList();
     575    RTagList* rTag  =   new RTagList(rules->getFirst());
    521576    i = 1;
    522         poly* lcm = new poly;
    523     // initialization for usage in pLcm()
    524     *lcm = pOne();
    525     pWrite(*lcm);
    526     // definition of one-polynomial as global constant ONE
    527     //poly one = pInit();
    528     //pSetCoeff(one, nInit(1));
    529     //static poly ONE = one;
    530    
    531577    for(j=0; j<IDELEMS(id); j++) {
    532578        if(NULL != id->m[j]) {
     
    539585        }
    540586    }
    541     pLcm( id->m[0], id->m[1], *lcm);
    542     Print("LCM NEU\n");
    543     //*lcm = pHead(*lcm);
    544     //pWrite(*lcm);
    545     Print("\n\n");
    546     id = kInterRed(id,0); 
    547     qsortDegree(&id->m[0],&id->m[IDELEMS(id)-1]);
    548     idShow(id);
    549587    LList* gPrev    =   new LList(ONE, i, id->m[0]);
    550     int gbLength    =   gPrev->getLength();
    551     pWrite(id->m[0]);
    552     poly p = pHead(id->m[0]);
    553     pWrite(p);
    554     poly q = pHead(id->m[2]);
    555     pWrite(q);
    556    
     588    lTag->insert(gPrev->getFirst());
    557589    // computing the groebner basis of the elements of index < actual index
     590    gbLength    =   gPrev->getLength();
    558591    Print("Laenge der bisherigen Groebner Basis: %d\n",gPrev->getLength());
    559592    ideal gbPrev    =   idInit(gbLength,1);
     
    564597
    565598    for(i=2; i<=IDELEMS(id); i++) {
    566         gPrev   =   F5inc(i, id->m[i-1], gPrev, gbPrev, ONE);
     599        gPrev   =   F5inc(i, id->m[i-1], gPrev, gbPrev, ONE, lTag, rules, rTag);
    567600        // comuting new groebner basis gbPrev
    568601        ideal gbAdd =   idInit(gPrev->getLength()-gbLength,1);
  • kernel/f5gb.h

    rc5d8dd r87beab7  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: f5gb.h,v 1.23 2009-02-08 19:17:54 ederc Exp $ */
     4/* $Id: f5gb.h,v 1.24 2009-02-11 21:24:07 ederc Exp $ */
    55/*
    66* ABSTRACT: f5gb interface
     
    3535==================================================
    3636*/
    37 LList* F5inc(int i, poly f_i, LList* gPrev, ideal gbPrev, poly ONE);
     37LList* F5inc(int i, poly f_i, LList* gPrev, ideal gbPrev, poly ONE, LTagList* lTag, RList* rules, RTagList* rTag);
    3838
    3939/*
     
    4444================================================================
    4545*/
    46 CList* criticalPair(LList* gPrev, CList* critPairs, LTagList* lTag, RTagList* rTag);
     46CList* criticalPair(LList* gPrev, CList* critPairs, LTagList* lTag, RTagList* rTag, RList* rules);
    4747
    4848/*
     
    5858=====================================
    5959*/
    60 bool criterion2(poly* t, LNode* l, RTagList* rTag);
     60bool criterion2(poly* t, LNode* l, RList* rules, RTagList* rTag);
    6161
    6262/*
     
    6565==========================================================================================================
    6666*/
    67 bool criterion2(poly* t, LPoly* l, RTagList* rTag, Rule* lastRuleTested);
     67bool criterion2(poly* t, LPoly* l, RList* rules, Rule* lastRuleTested);
    6868
    6969/*
     
    7979========================================================================
    8080*/
    81 LNode* reduction(LList* sPolyList, LList* completed, LList* gPrev, LTagList* lTag, RTagList* rTag,
     81LList* reduction(LList* &sPolyList, LList* &completed, LList* &gPrev, RList* &rules, LTagList* &lTag, RTagList* &rTag,
    8282                 ideal gbPrev);
    8383
     
    8888=====================================================================================
    8989*/
    90 void topReduction(LNode* l, LList* completed, LList* gPrev, LTagList* lTag, RTagList* rTag);
     90TopRed* topReduction(LNode* l, LList* &completed, LList* &gPrev, RList* &rules, LTagList* &lTag, RTagList* &rTag);
    9191
    9292/*
     
    9595=====================================================================
    9696*/
    97 LRed* findReductor(LNode* l,LList* completed,LList* gPrev,LTagList* lTag,RTagList* rTag,
     97LNode* findReductor(LNode* l,LList* &completed,LList* &gPrev, RList* &rules, LTagList* &lTag,RTagList* &rTag,
    9898                    LNode* gPrevRedCheck, LNode* completedRedCheck);
    9999
    100100/*
    101101======================================
    102 main function of our f5 implementation
     102main function of our F5 implementation
    103103======================================
    104104*/
  • kernel/f5lists.cc

    rc5d8dd r87beab7  
    2727// generating new list elements (labeled / classical polynomial / LNode view)
    2828LNode::LNode() {
    29     data = NULL;
    30     next = NULL;
     29    data                =   NULL;
     30    next                =   NULL;
     31    gPrevRedCheck       =   NULL;
     32    completedRedCheck   =   NULL;
    3133}
    3234 LNode::LNode(LPoly* lp) {
    33     data = lp;
    34     next = NULL;
     35    data                =   lp;
     36    next                =   NULL;
     37    gPrevRedCheck       =   NULL;
     38    completedRedCheck   =   NULL;
    3539}
    3640       
    3741LNode::LNode(LPoly* lp, LNode* l) {
    38     data = lp;
    39     next = l;
    40 }
    41 LNode::LNode(poly t, int i, poly p) {
    42     LPoly* lp = new LPoly(t,i,p);
    43     data = lp;
    44     next = NULL;
     42Print("HIER LNODE\n");
     43    data                =   lp;
     44    next                =   l;
     45    gPrevRedCheck       =   NULL;
     46    completedRedCheck   =   NULL;
     47}
     48
     49LNode::LNode(poly t, int i, poly p, Rule* r, LNode* gPCheck, LNode* CompCheck) {
     50LPoly* lp = new LPoly(t,i,p,r);
     51data                =   lp;
     52next                =   NULL;
     53gPrevRedCheck       =   gPCheck;
     54completedRedCheck   =   CompCheck;
    4555}
    4656       
    47 LNode::LNode(poly t, int i, poly p, LNode* l) {
    48     LPoly* lp = new LPoly(t,i,p);
    49     data = lp;
    50     next = l;
     57LNode::LNode(poly t, int i, poly p, Rule* r, LNode* gPCheck, LNode* CompCheck, LNode* l) {
     58    LPoly* lp           =   new LPoly(t,i,p,r);
     59    data                =   lp;
     60    next                =   l;
     61    gPrevRedCheck       =   gPCheck;
     62    completedRedCheck   =   CompCheck;
    5163}
    5264
    5365 LNode::LNode(LNode* ln) {
    54     data = ln->getLPoly();
    55     next = ln->getNext();
     66    data                =   ln->getLPoly();
     67    next                =   ln->getNext();
     68    gPrevRedCheck       =   NULL;
     69    completedRedCheck   =   NULL;
    5670}
    5771       
    5872LNode::~LNode() {
    5973    delete next;
     74    delete gPrevRedCheck;
     75    delete completedRedCheck;
    6076    delete data;   
    6177}
     
    6379// insert new elements to the list always in front (labeled / classical polynomial view)
    6480LNode* LNode::insert(LPoly* lp) {
     81    Print("HIER\n");
    6582    LNode* newElement = new LNode(lp, this);
    6683    return newElement;
    6784}
    6885       
    69 LNode* LNode::insert(poly t, int i, poly p) {
    70     LNode* newElement = new LNode(t, i, p, this);
     86LNode* LNode::insert(poly t, int i, poly p, Rule* r) {
     87    LNode* newElement = new LNode(t, i, p, r, NULL, NULL, this);
    7188    return newElement;
    7289}
     
    7491// insert new elemets to the list w.r.t. increasing labels
    7592// only used for the S-polys to be reduced (TopReduction building new S-polys with higher label)
    76 LNode* LNode::insertByLabel(poly t, int i, poly p) {
     93LNode* LNode::insertByLabel(poly t, int i, poly p, Rule* r) {
    7794    if(0 == pLmCmp(t,this->getTerm()) || -1 == pLmCmp(t,this->getTerm())) {
    78         LNode* newElement   =   new LNode(t, i, p, this);
     95        LNode* newElement   =   new LNode(t, i, p, r, this);
    7996        return newElement;
    8097    }
     
    83100        while( NULL != temp->next->data ) {
    84101            if( 0 == pLmCmp(t,temp->next->getTerm()) || -1 == pLmCmp(t,temp->next->getTerm())) {
    85                 LNode* newElement   =   new LNode(t, i, p, temp->next);
     102                LNode* newElement   =   new LNode(t, i, p, r, temp->next);
    86103                temp->next          =   newElement;
    87104                return this;
     
    91108            }
    92109        }
    93         LNode* newElement   =   new LNode(t, i, p, NULL);
     110        LNode* newElement   =   new LNode(t, i, p, r, NULL);
    94111        temp->next          =   newElement;
    95112        return this;
     
    126143}
    127144
     145Rule* LNode::getRule() {
     146    return data->getRule();
     147}
     148
     149LNode* LNode::getGPrevRedCheck() {
     150    return gPrevRedCheck;
     151}
     152
     153LNode* LNode::getCompletedRedCheck() {
     154    return completedRedCheck;
     155}
     156
    128157// set the data from the LPoly saved in LNode
    129158void LNode::setPoly(poly p) {
     
    137166void LNode::setIndex(int i) {
    138167    data->setIndex(i);
     168}
     169
     170void LNode::setGPrevRedCheck(LNode* l) {
     171    gPrevRedCheck   =   l;
     172}
     173
     174void LNode::setCompletedRedCheck(LNode* l) {
     175    completedRedCheck   =   l;
    139176}
    140177
     
    171208}
    172209
    173 LList::LList(poly t,int i,poly p) {
    174     first   =   new LNode(t,i,p);
     210LList::LList(poly t,int i,poly p,Rule* r) {
     211    first   =   new LNode(t,i,p,r);
    175212    length  =   1;
    176213}
     
    186223}
    187224
    188 void LList::insert(poly t,int i, poly p) {
    189     first = first->insert(t,i,p);
     225void LList::insert(poly t,int i, poly p, Rule* r) {
     226    first = first->insert(t,i,p,r);
    190227    length++;
    191228}
    192229
    193 void LList::insertByLabel(poly t, int i, poly p) {
    194     first = first->insertByLabel(t,i,p);
     230void LList::insertByLabel(poly t, int i, poly p, Rule* r) {
     231    first = first->insertByLabel(t,i,p,r);
     232    length++;
     233}
     234
     235void LList::insertByLabel(LNode* l) {
     236    first = first->insertByLabel(l->getTerm(),l->getIndex(),l->getPoly(),l->getRule());
    195237    length++;
    196238}
     
    222264}
    223265
    224 /*
    225 ===================================
    226 functions working on the class LRed
    227 ===================================
    228 */
    229 LRed::LRed() {
    230     data                =   NULL;
    231     gPrevRedCheck       =   NULL;
    232     completedRedCheck   =   NULL;
    233 }
    234 
    235 LRed::LRed(poly t,int i,poly p,LNode* g, LNode* c) {
    236     LPoly* lp           =   new LPoly(t,i,p);
    237     data                =   lp;
    238     gPrevRedCheck       =   g;
    239     completedRedCheck   =   c;
    240 }
    241 
    242 LPoly* LRed::getLPoly() {
    243     return data;
    244 }
    245 
    246 LNode* LRed::getGPrevRedCheck() {
    247     return gPrevRedCheck;
    248 }
    249 
    250 LNode* LRed::getCompletedRedCheck() {
    251     return completedRedCheck;
    252 }
    253 
    254 // get the data from the LPoly saved in LNode
    255 poly LRed::getPoly() {
    256     return data->getPoly();
    257 }
    258 
    259 poly LRed::getTerm() {
    260     return data->getTerm();
    261 }
    262 
    263 int LRed::getIndex() {
    264     return data->getIndex();
    265 }
    266 
    267 // set the data from the LPoly saved in LNode
    268 void LRed::setPoly(poly p) {
    269     data->setPoly(p);
    270 }
    271 
    272 void LRed::setTerm(poly t) {
    273     data->setTerm(t);
    274 }
    275 
    276 void LRed::setIndex(int i) {
    277     data->setIndex(i);
    278 }
    279266
    280267
     
    284271=======================================
    285272*/
     273LTagNode::LTagNode() {
     274    data    =   NULL;
     275    next    =   NULL;
     276}
    286277
    287278LTagNode::LTagNode(LNode* l) {
     
    333324=======================================
    334325*/
     326LTagList::LTagList() {
     327    LTagNode* first =   new LTagNode();
     328    length          =   0;
     329}
    335330
    336331LTagList::LTagList(LNode* l) {
     
    347342LNode* LTagList::get(int idx) {
    348343    return first->get(idx, length);
     344}
     345
     346LNode* LTagList::getFirst() {
     347    return first->getLNode();
     348}
     349
     350
     351/*
     352=====================================
     353functions working on the class TopRed
     354=====================================
     355*/
     356
     357TopRed::TopRed() {
     358    _completed  =   NULL;
     359    _toDo       =   NULL;
     360}
     361
     362TopRed::TopRed(LList* c, LList* t) {
     363    _completed  =   c;
     364    _toDo       =   t;
     365}
     366
     367LList* TopRed::getCompleted() {
     368    return _completed;
     369}
     370
     371LList* TopRed::getToDo() {
     372    return _toDo;
    349373}
    350374
     
    635659}
    636660
    637 RNode* RNode::insert(int i, poly t, LPoly* l) {
    638     Rule*   r           =   new Rule(i,t,l);
     661RNode* RNode::insert(int i, poly t) {
     662    Rule*   r           =   new Rule(i,t);
    639663    RNode* newElement   =   new RNode(r);
    640664    newElement->next    =   this;
     
    658682}
    659683
    660 LPoly* RNode::getRuleOrigin() {
    661     return data->getOrigin();
    662 }
    663 
    664684/*
    665685====================================
     
    675695}
    676696
    677 void RList::insert(int i, poly t, LPoly* l) {
    678     first = first->insert(i,t,l);
     697void RList::insert(int i, poly t) {
     698    first = first->insert(i,t);
    679699}
    680700
     
    734754RNode* RTagNode::get(int idx, int length) {
    735755    if(idx==1 || idx==0) {
     756        // NOTE: We set this NULL as putting it the last element in the list, i.e. the element having
     757        //       RNode* = NULL would cost lots of iterations at each step of F5inc, with increasing
     758        //       length of the list this should be prevented
    736759        return NULL;
    737760    }
     
    739762        int j;
    740763        RTagNode* temp = this;
    741         for(j=1; j<=length-idx+1; j++) {
     764    Print("\n\nHIER IN GET IDX\n");
     765    Print("FOR LOOP: %d\n",length-idx+1);   
     766    for(j=1; j<=length-idx+1; j++) {
    742767            temp = temp->next;
    743768        }
     
    750775}
    751776
     777void RTagNode::print() {
     778    RTagNode* temp  =   this;
     779    Print("1. element: %d",getRNode()->getRule()->getIndex());
     780    pWrite(getRNode()->getRule()->getTerm());
     781    temp    =   temp->next;
     782    int i   =   2;
     783    while(NULL != temp->getRNode()) {
     784        Print("%d. element: %d",i,getRNode()->getRule()->getIndex());
     785        pWrite(getRNode()->getRule()->getTerm());
     786        temp    =   temp->next;
     787        i++;
     788    }
     789}
    752790/*
    753791=======================================
     
    769807void RTagList::insert(RNode* r) {
    770808    first = first->insert(r);
    771     length++;
     809    Print("LENGTH:%d\n",length);
     810    length = length +1;
     811    Print("LENGTH:%d\n",length);
    772812}
    773813
     
    783823    first->set(r);
    784824}
     825
     826void RTagList::print() {
     827    first->print();
     828}
     829
     830int RTagList::getLength() {
     831    return length;
     832}
    785833#endif
  • kernel/f5lists.h

    rc5d8dd r87beab7  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: f5lists.h,v 1.7 2009-02-08 19:17:54 ederc Exp $ */
     4/* $Id: f5lists.h,v 1.8 2009-02-11 21:24:08 ederc Exp $ */
    55/*
    66* ABSTRACT: list interface
     
    2020class LNode;
    2121class LList;
    22 class LRed;
    2322class LTagNode;
    2423class LTagList;
     
    3837class LNode {
    3938    private:
    40         LPoly* data;
    41         LNode* next;
     39        LPoly*  data;
     40        LNode*  next;
     41        LNode*  gPrevRedCheck;
     42        LNode*  completedRedCheck;
    4243    public:
    4344        // generating new list elements from the labeled / classical polynomial view
     
    4546                LNode(LPoly* lp);
    4647                LNode(LPoly* lp, LNode* l);
    47                 LNode(poly t, int i, poly p);
    48                 LNode(poly t, int i, poly p, LNode* l);
     48                LNode(poly t, int i, poly p, Rule* r=NULL, LNode* gPCheck=NULL, LNode* CompCheck=NULL);
     49                LNode(poly t, int i, poly p, Rule* r, LNode* gPCheck, LNode* CompCheck, LNode* l);
    4950                LNode(LNode* ln);
    5051                ~LNode();
    5152        // insert new elements to the list in first place from the labeled / classical polynomial view
    5253        LNode*  insert(LPoly* lp);
    53         LNode*  insert(poly t, int i, poly p);
     54        LNode*  insert(poly t, int i, poly p, Rule* r);
    5455        // insert new elements to the list with resp. to increasing labels
    5556        // only used for the S-polys to be reduced (TopReduction building new S-polys with higher label)
    56         LNode*  insertByLabel(poly t, int i, poly p);
     57        LNode*  insertByLabel(poly t, int i, poly p, Rule* r);
    5758        // deletes the first elements of the list with the same degree
    5859        // get next from current LNode
     
    6667        poly    getTerm();
    6768        int     getIndex();
     69        Rule*   getRule();
     70        LNode*  getGPrevRedCheck();
     71        LNode*  getCompletedRedCheck();
    6872        // set the data from the LPoly saved in LNode
    6973        void    setPoly(poly p);
    7074        void    setTerm(poly t);
    7175        void    setIndex(int i);
     76        void    setGPrevRedCheck(LNode* l);
     77        void    setCompletedRedCheck(LNode* l);
    7278        // test if for any list element the polynomial part of the data is equal to *p
    7379        bool    polyTest(poly* p);
     
    8894                LList();
    8995                LList(LPoly* lp);
    90                 LList(poly t,int i,poly p);
     96                LList(poly t,int i,poly p, Rule* r = NULL);
    9197                ~LList();
    9298        void    insert(LPoly* lp);
    9399        // insertion in front of the list
    94         void    insert(poly t,int i, poly p);
    95         void    insertByLabel(poly t, int i, poly p);
     100        void    insert(poly t,int i, poly p, Rule* r = NULL);
     101        void    insertByLabel(poly t, int i, poly p, Rule* r = NULL);
     102        void    insertByLabel(LNode* l);
    96103        void    deleteByDeg();
    97104        bool    polyTest(poly* p);
     
    103110
    104111
    105 /*
    106 =========================================
    107 class LRed (nodes for lists of Reductors)
    108 =========================================
    109 */
    110 class LRed {
    111     private:
    112         LPoly* data;
    113         LNode* gPrevRedCheck;
    114         LNode* completedRedCheck;
    115     public:
    116         // generating new list elements from the labeled / classical polynomial view
    117                 LRed();
    118                 LRed(poly t, int i, poly p, LNode* g, LNode* c);
    119                 ~LRed();
    120         // get the LPoly* out of LNode*
    121         LPoly*  getLPoly();
    122         // get the last reductor tested in subalgorithm findReductor() in f5gb.cc
    123         LNode*  getGPrevRedCheck();
    124         LNode*  getCompletedRedCheck();
    125         // get data from the labeled polynomial
    126         poly    getPoly();
    127         poly    getTerm();
    128         int     getIndex();
    129         // set the data from the LPoly saved in LNode
    130         void    setPoly(poly p);
    131         void    setTerm(poly t);
    132         void    setIndex(int i);
    133 };
    134 
    135112
    136113/*
     
    144121        LTagNode*   next;
    145122    public:
     123        LTagNode();
    146124        LTagNode(LNode* l);
    147125        LTagNode(LNode* l, LTagNode* n);
     
    164142        int         length;
    165143    public:
     144                LTagList();
    166145                LTagList(LNode* l);
    167146                ~LTagList();
     
    169148        void    insert(LNode* l);
    170149        LNode*  get(int idx);
     150        LNode*  getFirst();
     151};
     152
     153LNode*  getGPrevRedCheck();
     154LNode*  getcompletedRedCheck();
     155
     156
     157/*
     158======================================================================================
     159class TopRed(return values of subalgorithm TopRed in f5gb.cc), i.e. the first elements
     160             of the lists LList* completed & LList* sPolyList
     161======================================================================================
     162*/
     163class TopRed {
     164    private:
     165        LList*  _completed;
     166        LList*  _toDo;
     167    public:
     168                TopRed();
     169                TopRed(LList* c, LList* t);
     170        LList*  getCompleted();
     171        LList*  getToDo();
    171172};
    172173
     
    243244                ~RNode();
    244245        RNode*  insert(Rule* r);
    245         RNode*  insert(int i, poly t, LPoly* l);
     246        RNode*  insert(int i, poly t);
    246247        RNode*  getNext();
    247248        Rule*   getRule();
    248249        int     getRuleIndex();
    249250        poly    getRuleTerm();
    250         LPoly*  getRuleOrigin();
    251251};
    252252
     
    266266                ~RList();
    267267        void    insert(Rule* r);
    268         void    insert(int i, poly t, LPoly* l);
     268        void    insert(int i, poly t);
    269269        RNode*  getFirst();
    270270        Rule*   getRule();
     
    292292        RNode*      get(int idx, int length);
    293293        void        set(RNode*);
     294        void        print();
    294295};
    295296
     
    310311        // declaration with first as parameter in LTagNode due to sorting of LTagList
    311312        void    insert(RNode* r);
    312         void    insert(int i, poly* t, LPoly* l);
    313313        RNode*  getFirst();
    314314        RNode*  get(int idx);
    315315        void    setFirst(RNode* r);
     316        void    print();
     317        int     getLength();
    316318};
    317319#endif
Note: See TracChangeset for help on using the changeset viewer.