version 1.1, 2017/07/30 21:59:02
|
version 1.2, 2017/07/31 08:59:37
|
Line 1
|
Line 1
|
#include "src/rplexternals.h" |
#include "src/rplexternals.h" |
#include "sets.h" |
#include "sets.h" |
|
|
|
static int |
|
orderFunction(const void *a, const void *b) |
|
{ |
|
if ((*((integer8 *) a)) < (*((integer8 *) b))) |
|
{ |
|
return(-1); |
|
} |
|
if ((*((integer8 *) a)) > (*((integer8 *) b))) |
|
{ |
|
return(1); |
|
} |
|
|
|
return(0); |
|
} |
|
|
|
|
declareExternalFunction(ltos) |
declareExternalFunction(ltos) |
declareDaisyChain(current); |
declareDaisyChain(current); |
declareObject(object); |
declareObject(object); |
declareObject(subObject); |
declareObject(subObject); |
declareObject(result); |
declareObject(result); |
|
|
|
integer8 currentValue; |
integer8 i; |
integer8 i; |
|
integer8 j; |
integer8 target(vector); |
integer8 target(vector); |
integer8 sizeOfList; |
integer8 sizeOfList; |
|
|
Line 29 declareExternalFunction(ltos)
|
Line 47 declareExternalFunction(ltos)
|
getInteger(subObject, vector[i]); |
getInteger(subObject, vector[i]); |
returnOnError(freeObject(object); deallocate(vector)); |
returnOnError(freeObject(object); deallocate(vector)); |
postIncr(i); |
postIncr(i); |
nextElementOfDaisyChain(current); |
current = nextElementOfDaisyChain(current); |
endWhile |
endWhile |
|
|
freeObject(object); |
freeObject(object); |
|
|
|
if (sizeOfList gt 0) then |
|
qsort(vector, sizeOfList, sizeof(integer8), orderFunction); |
|
|
|
currentValue = vector[0]; |
|
j = 1; |
|
|
|
loop(i = 1, i lt sizeOfList, postIncr(i)) |
|
if (vector[i] ne currentValue) then |
|
vector[postIncr(j)] = vector[i]; |
|
currentValue = vector[i]; |
|
endIf |
|
endLoop |
|
|
|
sizeOfList = j; |
|
vector = reallocate(vector, sizeOfList * size(integer8)); |
|
endIf |
|
|
createExternalObject(result, ISET); |
createExternalObject(result, ISET); |
|
objectOf(result) = allocate(size(set_t)); |
objectContainer(set_t, result)->values = vector; |
objectContainer(set_t, result)->values = vector; |
objectContainer(set_t, result)->size = sizeOfList; |
objectContainer(set_t, result)->size = sizeOfList; |
|
|