int queue_sum(queue_t * self) { int sum = 0; int size = queue_getSize(self); for(int i = 0; i<=size; i++) { sum += self->array[i]; } return sum; }
int queue_dequeue(queue_t * self) { if (self->tail > 0) { int val = self->array[self->head]; int size = queue_getSize(self); for(int i = 1; i<size; i++) { self->array[i-1] = self->array[i]; } self->tail--; return val; } return 0; }
void queueSet_endlessIOLoop(queueSet_t self){ while (1){ if (_kbhit()){ char c = _getch(); if (c == VK_ESCAPE) { queueSet_delete(self); break; } } int queueNum = rand() % 2 + 1; queue_t queue = (queueNum == 1) ? self->queue1 : self->queue2; queue_t anotherQueue = (queueNum == 1) ? self->queue2 : self->queue1; int num = getRandomInt(); if (num > 0){ queue_add(queue, num); for (int i = 0; i < self->numOfSubscribers; i++){ if (self->subscribers[i]->addPrint) self->subscribers[i]->addPrint(self->subscribers[i], queueNum, num); } if (queue_getSize(queue) > 10){ if (queue_getSize(anotherQueue) < 9){ Sleep(30); int prevElem = queue_remove(queue); queue_add(anotherQueue, prevElem); for (int i = 0; i < self->numOfSubscribers; i++){ if (self->subscribers[i]->addPrint_transfer) self->subscribers[i]->addPrint_transfer(self->subscribers[i], queueNum, prevElem); } } else{ //removing last elements int enqueueMain = queue_remove(queue); int enqueueAnother = queue_remove(anotherQueue); for (int i = 0; i < self->numOfSubscribers; i++){ if (self->subscribers[i]->fullOverflow) self->subscribers[i]->fullOverflow(self->subscribers[i], queueNum, enqueueMain, enqueueAnother); } } } } else{ int prevNum = queue_remove(queue); for (int i = 0; i < self->numOfSubscribers; i++){ if (self->subscribers[i]->removePrint) self->subscribers[i]->removePrint(self->subscribers[i], queueNum, prevNum); } if (queue_getSize(anotherQueue) >= 2){ Sleep(300); int transNum = queue_remove(anotherQueue); queue_add(queue, transNum); for (int i = 0; i < self->numOfSubscribers; i++){ if (self->subscribers[i]->removePrint_transfer) self->subscribers[i]->removePrint_transfer(self->subscribers[i], queueNum, transNum); } } else{ int num11 = abs(getRandomInt()); int num12 = abs(getRandomInt()); int num13 = abs(getRandomInt()); int num22 = abs(getRandomInt()); int num23 = abs(getRandomInt()); queue_add(queue, num11); queue_add(queue, num12); queue_add(queue, num13); queue_add(anotherQueue, num22); queue_add(anotherQueue, num23); for (int i = 0; i < self->numOfSubscribers; i++){ if (self->subscribers[i]->fullProcessing) self->subscribers[i]->fullProcessing(self->subscribers[i], queueNum, num11, num12, num13, num22, num23); } } } Sleep(300); } }