Example #1
0
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;
}
Example #2
0
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;
}
Example #3
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);
	}
}