00001 /******************************************************************** 00002 Description: 00003 part of the 3Dsia project 00004 created: StonedBones, 31.1.2000 00005 00006 History: 00007 date, name, changes, in funtion 00008 200400 StonedBones changed dynamic list to STL queue 00009 110400 xandi changed all mallocs to new and all NULL to 0 00010 310100 StonedBones created source from scratch 00011 00012 ********************************************************************/ 00013 00014 #include "buffer.h" 00015 00016 #include <unistd.h> 00017 #include <pthread.h> 00018 00019 #include <stdio.h> 00020 00021 /*................................................................... 00022 Description: Constructor 00023 Args: <none> 00024 Returns: <none> 00025 Created: StonedBones, 31.1.2000 00026 [ToDo:] 00027 [Comments:] 00028 Changes: 00029 -------------------------------------------------------------------*/ 00030 00031 Buffer::Buffer ( int cS) { 00032 checkSleep = cS; 00033 }; 00034 00035 /*................................................................... 00036 Description: Destructor 00037 Args: <none> 00038 Returns: <none> 00039 Created: StonedBones, 31.1.2000 00040 [ToDo:] 00041 [Comments:] 00042 Changes: 00043 -------------------------------------------------------------------*/ 00044 00045 Buffer::~Buffer () { 00046 while (!intBuffer.empty ()) intBuffer.pop (); 00047 }; 00048 00049 /*................................................................... 00050 Description: Insert packet in packet-buffer 00051 Args: packet* pac: packet to insert 00052 Returns: <none> 00053 Created: StonedBones, 31.1.2000 00054 [ToDo:] 00055 [Comments:] 00056 Changes: 00057 Made the thing threadsafe, xandi, 270300 00058 -------------------------------------------------------------------*/ 00059 00060 void Buffer::write (packet* pak) 00061 { 00062 pthread_mutex_lock ( &buf_lock ); 00063 00064 intBuffer.push (pak); 00065 00066 pthread_mutex_unlock ( &buf_lock ); 00067 }; 00068 00069 /*................................................................... 00070 Description: Reads last packet and deletes it from stack 00071 Args: <none> 00072 Returns: packet* 00073 Created: StonedBones, 31.1.2000 00074 [ToDo:] 00075 - free memory ? 00076 [Comments:] 00077 Changes: 00078 -------------------------------------------------------------------*/ 00079 00080 packet* Buffer::read () { 00081 packet* tmp; 00082 00083 pthread_mutex_lock ( &buf_lock ); 00084 00085 if ( intBuffer.empty () ) 00086 { 00087 tmp = 0; 00088 } 00089 else 00090 { 00091 tmp = intBuffer.front (); 00092 intBuffer.pop (); 00093 } 00094 00095 pthread_mutex_unlock ( &buf_lock ); 00096 00097 return tmp; 00098 }; 00099 00100 00101 /*................................................................... 00102 Description: checks if buffer is empty 00103 Args: <none> 00104 Returns: bool 00105 Created: StonedBones, 31.1.2000 00106 [ToDo:] 00107 [Comments:] 00108 Changes: 00109 -------------------------------------------------------------------*/ 00110 00111 bool Buffer::isEmpty () 00112 { 00113 if (intBuffer.empty ()) 00114 { 00115 usleep ( checkSleep ); 00116 return true; 00117 } 00118 else 00119 { 00120 return false; 00121 }; 00122 };