static bool testListCopy() { ASSERT_TRUE(spListCopy(NULL) == NULL); SPList list = spListCreate(); SPList copy = spListCopy(list); ASSERT_TRUE(copy != NULL); ASSERT_TRUE(0 == spListGetSize(copy)); SPListElement e1 = spListElementCreate(1, 1.0); SPListElement e2 = spListElementCreate(2, 2.0); SPListElement e3 = spListElementCreate(3, 3.0); SPListElement e4 = spListElementCreate(4, 4.0); spListInsertFirst(list, e1); ASSERT_TRUE(0 == spListGetSize(copy)); SPList list2 = quickList(4, e1, e2, e3, e4); SPList copy2 = spListCopy(list2); ASSERT_TRUE(4 == spListGetSize(copy2)); ASSERT_TRUE(spListElementCompare(e1, spListGetFirst(copy2)) == 0); ASSERT_TRUE(spListElementCompare(e2, spListGetNext(copy2)) == 0); ASSERT_TRUE(spListElementCompare(e3, spListGetNext(copy2)) == 0); ASSERT_TRUE(spListElementCompare(e4, spListGetNext(copy2)) == 0); ASSERT_TRUE(spListGetNext(copy2) == NULL); spListDestroy(list); spListDestroy(list2); spListDestroy(copy); spListDestroy(copy2); spListElementDestroy(e1); spListElementDestroy(e2); spListElementDestroy(e3); spListElementDestroy(e4); return true; }
SPBPQueue spBPQueueCopy(SPBPQueue source) { if (source == NULL) { return NULL; } SPList listCopy = spListCopy(source->innerList); if (listCopy == NULL) { return NULL; } return spBPQueueInnerCreate(listCopy, source->maxSize); }
SPBPQueue spBPQueueCopy(SPBPQueue source){ assert(source); SPBPQueue copy = spBPQueueCreate(source->bound); if (copy == NULL){ return NULL; } spListDestroy(copy->list); copy->list = spListCopy(source->list); return copy; }
SPBPQueue spBPQueueCreateWrapper(int maxSize, SPBPQueue source_queue, bool createNewList) { SPBPQueue newQueue; spMinimalVerifyArgumentsRn(maxSize > 0); spCalloc(newQueue, sp_bp_queue_t, 1); newQueue->capacity = maxSize; if (createNewList) { newQueue->queue = spListCreate(); newQueue->maxElement = NULL; } else { newQueue->queue = spListCopy(source_queue->queue); newQueue->maxElement = spListElementCopy(source_queue->maxElement); } //allocation error, or given source queue is NULL and createNewList if false if (newQueue->queue == NULL) return NULL; return newQueue; }