/**
 * @file tqueue.h
 * @brief Heder file of implementation of cyclic sorted/unsorted queue
 * 
 * This file is based on Kalisto, Development Kernel copyrighted (c) to 
 * Distributed Systems Research Group MFF UK, Czech republic.
 */

#ifndef _TQUEUE_H_
#define _TQUEUE_H_

#include "thread.h"
#include "errnums.h"

/** 
 * thread_t can be a header of queue, threre is no diference betwen thread_t and thres_queue_t. This is
 * only for better readability of code 
 */
typedef thread_t thread_queue_t;


int thread_queue_empty(thread_queue_t *queue);
void thread_queue_init(thread_queue_t *queue);
int thread_queue_fetch(thread_queue_t *queue, thread_t *item, enum queue_types qt);
void thread_queue_add(thread_queue_t *queue, thread_t *item, enum queue_types qt);
int thread_queue_remove_item(thread_queue_t *queue, thread_t *item, enum queue_types qt);
int thread_queue_remove_item_by_id(thread_queue_t *queue, int thread_id, enum queue_types qt);

void thread_queue_rotate(thread_queue_t *queue, enum queue_types qt);
void thread_queue_enqueue(thread_queue_t *queue, thread_t *item, enum queue_types qt);	
void thread_queue_debug_print(thread_queue_t *queue, enum queue_types qt);

int thread_queue_exists(thread_queue_t *queue, thread_t item, enum queue_types qt);


#endif /*_TQUEUE_H_*/
