version 1.3, 2017/07/03 11:47:05
|
version 1.5, 2017/07/31 08:59:37
|
Line 67 declareExternalFunction(union)
|
Line 67 declareExternalFunction(union)
|
vector = reallocate(vector, k * size(integer8)); |
vector = reallocate(vector, k * size(integer8)); |
|
|
createExternalObject(result, ISET); |
createExternalObject(result, ISET); |
(*result).objet = allocate(size(set_t)); |
objectOf(result) = allocate(size(set_t)); |
|
|
(*((set_t *) (*result).objet)).size = k; |
objectContainer(set_t, result)->size = k; |
(*((set_t *) (*result).objet)).values = vector; |
objectContainer(set_t, result)->values = vector; |
|
|
freeObject(object1); |
|
freeObject(object2); |
|
|
|
pushOnStack(result); |
|
END |
|
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(object1); |
freeObject(object2); |
freeObject(object2); |