GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
//1// util.cpp2// Bistellar3//4// Created by Alexander Thumm on 07.10.11.5// Copyright 2011 -. All rights reserved.6//78#include "util.h"9#include <stdlib.h>10#include <string.h>1112size_t remove_duplicates(void * base, size_t num, size_t size, int (* comparison)(const void *, const void *))13{14if (num == 0)15return 0;1617size_t new_num = 1;1819const unsigned char * read = static_cast< const unsigned char * >(base);20unsigned char * write = static_cast< unsigned char * >(base);2122for (size_t i = 1; i < num; i++)23{24read += size;25if ((*comparison)(read, write) != 0)26{27write += size;28if (write != read)29memcpy(write, read, size);3031new_num++;32}33}3435return new_num;36}3738size_t remove_from_set(void * base, size_t num, const void * base2, size_t num2, size_t size, int (* comparison)(const void *, const void *))39{40if (num == 0 || num2 == 0)41return 0;4243size_t new_num = 0;4445const unsigned char * read = static_cast< const unsigned char * >(base);46const unsigned char * read2 = static_cast< const unsigned char *>(base2);47unsigned char * write = static_cast< unsigned char * >(base);4849size_t i = 0;50size_t j = 0;5152while (i < num)53{54int difference = (j < num2) ? (*comparison)(read, read2) : -1;5556if (difference < 0)57{58if (write != read)59memcpy(write, read, size);60read += size;61write += size;62new_num++;63i++;64}65else if (difference == 0)66{67read += size;68i++;69}70else71{72read2 += size;73j++;74}75}7677return new_num;78}798081