annotate prqueue.h @ 50:93a5782d064b

adding netbeans project directories to repository
author Sean Halle <seanhalle@yahoo.com>
date Fri, 14 Feb 2014 07:54:22 -0800
parents
children
rev   line source
seanhalle@49 1 /*
seanhalle@49 2 * Copyright 2009 OpenSourceResearchInstitute.org
seanhalle@49 3 * Licensed under GNU General Public License version 2
seanhalle@49 4 *
seanhalle@49 5 * Author: seanhalle@yahoo.com
seanhalle@49 6 */
seanhalle@49 7
seanhalle@49 8 #ifndef _PRQUEUE_H
seanhalle@49 9 #define _PRQUEUE_H
seanhalle@49 10
seanhalle@49 11 #include <PR__include/PR__primitive_data_types.h>
seanhalle@49 12 #include <pthread.h>
seanhalle@49 13
seanhalle@49 14 #define TRUE 1
seanhalle@49 15 #define FALSE 0
seanhalle@49 16
seanhalle@49 17 //================== Private Queue stuff ===================
seanhalle@49 18 /* It is the data that is shared so only need one mutex. */
seanhalle@49 19 typedef struct
seanhalle@49 20 { void **insertPos;
seanhalle@49 21 void **extractPos;
seanhalle@49 22 void **startOfData; //data is pointers
seanhalle@49 23 void **endOfData; //set when alloc data
seanhalle@49 24 }
seanhalle@49 25 PrivQueueStruc;
seanhalle@49 26
seanhalle@49 27 typedef void (*DynArrayFnPtr) ( void * ); //fn has to cast void *
seanhalle@49 28
seanhalle@49 29 PrivQueueStruc* makePrivQ ( );
seanhalle@49 30 bool32 isEmptyPrivQ ( PrivQueueStruc *Q ); //ret TRUE if empty
seanhalle@49 31 void* peekPrivQ ( PrivQueueStruc *Q ); //ret NULL if empty
seanhalle@49 32 void* readPrivQ ( PrivQueueStruc *Q ); //ret NULL if empty
seanhalle@49 33 void writePrivQ( void *in, PrivQueueStruc *Q );
seanhalle@49 34 //return false when full
seanhalle@49 35 bool32 writeIfSpacePrivQ( void * in, PrivQueueStruc* Q );
seanhalle@49 36 int32 numInPrivQ( PrivQueueStruc *Q );
seanhalle@49 37 void pushPrivQ( void * in, PrivQueueStruc* Q );
seanhalle@49 38 void freePrivQ( PrivQueueStruc *Q );
seanhalle@49 39
seanhalle@49 40
seanhalle@49 41 //====================== Parallel Queue Stuff ====================
seanhalle@49 42
seanhalle@49 43 //========== pThreads based queue ==========
seanhalle@49 44 /* It is the data that is shared so only need one mutex. */
seanhalle@49 45 typedef
seanhalle@49 46 struct
seanhalle@49 47 { pthread_mutex_t mutex_t;
seanhalle@49 48 pthread_cond_t cond_w_t;
seanhalle@49 49 pthread_cond_t cond_r_t;
seanhalle@49 50 int32 count;
seanhalle@49 51 int32 readPos;
seanhalle@49 52 int32 writePos;
seanhalle@49 53 void* data[1024]; //an array of pointers
seanhalle@49 54 int w_empty;
seanhalle@49 55 int w_full;
seanhalle@49 56 }
seanhalle@49 57 PThdQueueStruc;
seanhalle@49 58
seanhalle@49 59 PThdQueueStruc* makePThdQ();
seanhalle@49 60 void* readPThdQ( PThdQueueStruc *Q );
seanhalle@49 61 void writePThdQ( void *in, PThdQueueStruc *Q );
seanhalle@49 62
seanhalle@49 63
seanhalle@49 64 //========== CAS based queue ==========
seanhalle@49 65 typedef
seanhalle@49 66 struct
seanhalle@49 67 { volatile int32 insertLock;
seanhalle@49 68 volatile int32 extractLock;
seanhalle@49 69 volatile void* *insertPos;
seanhalle@49 70 volatile void* *extractPos;
seanhalle@49 71 void* startOfData[1024]; //data is pointers
seanhalle@49 72 void* *endOfData; //set when make queue
seanhalle@49 73 }
seanhalle@49 74 CASQueueStruc;
seanhalle@49 75
seanhalle@49 76 CASQueueStruc* makeCASQ();
seanhalle@49 77 void* readCASQ( CASQueueStruc *Q );
seanhalle@49 78 void writeCASQ( void *in, CASQueueStruc *Q );
seanhalle@49 79
seanhalle@49 80
seanhalle@49 81 //========= non-atomic instr based queue ===========
seanhalle@49 82 typedef
seanhalle@49 83 struct
seanhalle@49 84 { void* *insertPos;
seanhalle@49 85 void* *extractPos;
seanhalle@49 86 void* startOfData[1024]; //data is pointers
seanhalle@49 87 void* *endOfData; //set when make queue
seanhalle@49 88 }
seanhalle@49 89 SRSWQueueStruc;
seanhalle@49 90
seanhalle@49 91 SRSWQueueStruc* makeSRSWQ();
seanhalle@49 92 void freeSRSWQ( SRSWQueueStruc* Q );
seanhalle@49 93 void* readSRSWQ( SRSWQueueStruc *Q );
seanhalle@49 94 void writeSRSWQ( void *in, SRSWQueueStruc *Q );
seanhalle@49 95
seanhalle@49 96
seanhalle@49 97 //========= non-atomic instr S R M W queue ===========
seanhalle@49 98 typedef
seanhalle@49 99 struct
seanhalle@49 100 { int32 lastQReadFrom;
seanhalle@49 101 int32 numInternalQs;
seanhalle@49 102 int32 internalQsSz;
seanhalle@49 103 SRSWQueueStruc* *internalQs;
seanhalle@49 104 }
seanhalle@49 105 SRMWQueueStruc;
seanhalle@49 106
seanhalle@49 107 SRMWQueueStruc* makeSRMWQ();
seanhalle@49 108 int addWriterToSRMWQ( SRMWQueueStruc *Q );
seanhalle@49 109 void* readSRMWQ( SRMWQueueStruc *Q );
seanhalle@49 110 void writeSRMWQ( void *in, SRMWQueueStruc *Q, int writerID );
seanhalle@49 111
seanhalle@49 112
seanhalle@49 113 #endif /* _PRIVATE_QUEUE_H */
seanhalle@49 114