Diff for /rpl/modules/sets/union.rplc between versions 1.3 and 1.4

version 1.3, 2017/07/03 11:47:05 version 1.4, 2017/07/03 12:15:30
Line 79  declareExternalFunction(union) Line 79  declareExternalFunction(union)
     END      END
 endExternalFunction  endExternalFunction
   
 declareExternalFunction(intersection)  
     declareObject(object1);  
     declareObject(object2);  
     declareObject(result);  
   
     integer8    i;  
     integer8    j;  
     integer8    k;  
     integer8    target(vector);  
   
     HEADER  
         declareHelpString("Union");  
         numberOfArguments(2);  
     FUNCTION  
         pullFromStack(object1, external);  
         returnOnError(freeObject(object1));  
         pullFromStack(object2, external);  
         returnOnError(freeObject(object1); freeObject(object2));  
   
         if ((objectSubtype(object1) ne ISET) or  
                 (objectSubtype(object2) ne ISET)) then  
             executionError("Type not allowed");  
             returnOnError(freeObject(object1); freeObject(object2));  
         endIf  
   
         vector = allocate((*((set_t *) (*object1).objet)).size  
                 * size(integer8));  
   
         i = 0;  
         j = 0;  
         k = 0;  
   
         repeatWhile((i lt (*((set_t *) (*object1).objet)).size) and  
                 (j lt (*((set_t *) (*object2).objet)).size))  
             if ((*((set_t *) (*object1).objet)).values[i] lt  
                     (*((set_t *) (*object2).objet)).values[j]) then  
                 postIncr(i);  
             elseIf ((*((set_t *) (*object2).objet)).values[j] lt  
                     (*((set_t *) (*object1).objet)).values[i]) then  
                 postIncr(j);  
             orElse  
                 vector[k] = (*((set_t *) (*object2).objet)).values[j];  
                 postIncr(i);  
                 postIncr(j);  
                 postIncr(k);  
             endIf  
         endWhile  
   
         vector = reallocate(vector, k * size(integer8));  
   
         createExternalObject(result, ISET);  
         (*result).objet = allocate(size(set_t));  
   
         (*((set_t *) (*result).objet)).size = k;  
         (*((set_t *) (*result).objet)).values = vector;  
   
         freeObject(object1);  
         freeObject(object2);  
   
         pushOnStack(result);  
     END  
 endExternalFunction  
   
 // vim: ts=4  // vim: ts=4

Removed from v.1.3  
changed lines
  Added in v.1.4


CVSweb interface <joel.bertrand@systella.fr>