#include #include #include "MultiSet.h" MultiSet* multiset_union(MultiSet *A, MultiSet *B) { if (!A || !B) return NULL; size_t newsize = A->size + B->size; size_t Abyte = sizeof(int) * A->size; size_t Bbyte = sizeof(int) * B->size; MultiSet *C = (MultiSet*)malloc(sizeof(size_t) + sizeof(int) * newsize); if (!C) return NULL; C->size = newsize; memcpy((char*)C + sizeof(size_t), (char*)A + sizeof(size_t), Abyte); memcpy((char*)C + sizeof(size_t) + Abyte, (char*)B + sizeof(size_t), Bbyte); return C; } MultiSet* multiset_new(size_t size, int *elements) { // NULL == 0 if (!elements) return NULL; MultiSet *ret = (MultiSet*)malloc(sizeof(size_t) + sizeof(int) * size); if (!ret) return NULL; ret->size = size; memcpy((char*)ret + sizeof(size_t), elements, sizeof(int) * size); return ret; } void multiset_destroy(MultiSet* this) { free(this); }