diff options
author | deva <deva> | 2006-06-09 18:20:51 +0000 |
---|---|---|
committer | deva <deva> | 2006-06-09 18:20:51 +0000 |
commit | 8f9101869f6b460f61033ce434bba0a793d25137 (patch) | |
tree | fd07cb44be0b01da339f79164c323793d72ab4a9 /src/queue.h | |
parent | 6c31ad03de714676516d69ae9114e8bdd67c0d96 (diff) |
Moved files to other folder:
lib - Shared files between server and client
client - Client files
server - Server files
Diffstat (limited to 'src/queue.h')
-rw-r--r-- | src/queue.h | 248 |
1 files changed, 0 insertions, 248 deletions
diff --git a/src/queue.h b/src/queue.h deleted file mode 100644 index 3cb6fbc..0000000 --- a/src/queue.h +++ /dev/null @@ -1,248 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/*************************************************************************** - * queue.h - * - * Tue Nov 9 10:57:20 CET 2004 - * Copyright 2004 Bent Bisballe - * deva@aasimon.org - ****************************************************************************/ - -/* - * Originally from: - * RTVideoRec Realtime video recoder and encoder for Linux - * - * Copyright (C) 2004 B. Stultiens - */ - -/* - * This file is part of MIaV. - * - * MIaV is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * MIaV is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with MIaV; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -#include "config.h" -#ifndef __RTVIDEOREC_QUEUE_H -#define __RTVIDEOREC_QUEUE_H - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <assert.h> -//#include <avformat.h> -//#include <avcodec.h> - -#include "thread.h" -#include "util.h" - -typedef struct __buf_t { - struct __buf_t *next; - struct __buf_t *prev; - void *data; -} buf_t; - - -template<typename T> -class Queue { -public: - Queue(int glimit = 0); - ~Queue(); - - void push(T *t); - T *pop(); - T *peek(); - - void lock(); - void unlock(); - - int length(); - -private: - volatile bool locked; - int limit; - buf_t *head; - buf_t *tail; - int count; - pthread_mutex_t mutex; - T *_pop(); -}; - -/** - * Initialize queue - */ -template<typename T> -Queue<T>::Queue(int glimit) -{ - locked = false; - pthread_mutex_init (&mutex, NULL); - limit = glimit; - count = 0; - head = NULL; - tail = NULL; -} - -/** - * Clean up queue. - */ -template<typename T> -Queue<T>::~Queue() -{ - if(count != 0) { - fprintf(stderr, "Queue not empty (%d)\n", count); - while(T *t = _pop()) delete t; - } - pthread_mutex_destroy(&mutex); -} - -/** - * Push element on queue. - */ -template<typename T> -void Queue<T>::push(T *t) -{ - if(locked) { - delete t; - return; - } - - pthread_mutex_lock(&mutex); - - buf_t *b = (buf_t*)xmalloc(sizeof(*b)); - b->data = (void*)t; - - assert(b != NULL); - - if(limit && count > 0) { - T* tmp = (T*)_pop(); - delete tmp; - } - - if(!head) { - head = tail = b; - b->next = b->prev = NULL; - count = 1; - pthread_mutex_unlock(&mutex); - return; - } - - b->next = tail; - b->prev = NULL; - if(tail) - tail->prev = b; - tail = b; - count++; - - pthread_mutex_unlock(&mutex); -} - -/** - * Pop element from queue. - * If queue is empty, NULL is returned. - */ -template<typename T> -T *Queue<T>::pop() -{ - pthread_mutex_lock(&mutex); - T *d = _pop(); - pthread_mutex_unlock(&mutex); - return d; -} - -/** - * Pop helper method - * If queue is empty, NULL is returned. - */ -template<typename T> -T *Queue<T>::_pop() -{ - T *d; - buf_t *b; - - assert(count >= 0); - - if(count == 0) { - return NULL; - } - - b = head; - if(b->prev) - b->prev->next = NULL; - head = b->prev; - if(b == tail) - tail = NULL; - count--; - - d = (T*)b->data; - free(b); - - return d; -} - -/** - * Peek foremost element in queue - * If queue is empty, NULL is returned. - */ -template<typename T> -T *Queue<T>::peek() -{ - // pthread_mutex_lock(&mutex); - T *d; - - // assert(count >= 0); - - if(count == 0) { - return NULL; - } - - d = (T*)head->data; - // pthread_mutex_unlock(&mutex); - return d; -} - -/** - * Print current length of queue - */ -template<typename T> -int Queue<T>::length() -{ - int length; - pthread_mutex_lock(&mutex); - length = count; - pthread_mutex_unlock(&mutex); - return length; -} - -/** - * Lock the queue (all elements pushed from this point will be deleted.) - */ -template<typename T> -void Queue<T>::lock() -{ - fprintf(stderr, "Lock this motherfucker..."); fflush(stderr); - locked = true; - fprintf(stderr, "done\n"); fflush(stderr); -} - -/** - * Unlock the queue. - */ -template<typename T> -void Queue<T>::unlock() -{ - fprintf(stderr, "Unlock this motherfucker..."); fflush(stderr); - locked = false; - fprintf(stderr, "done\n"); fflush(stderr); -} - -#endif - |