00001 /* 00002 ** ring.c 00003 ** General ring array implementation 00004 ** 00005 ** ------------------------------------------------------------------------ 00006 ** Copyright (C) 2007-2012 Carnegie Mellon University. All Rights Reserved. 00007 ** ------------------------------------------------------------------------ 00008 ** Authors: Brian Trammell 00009 ** ------------------------------------------------------------------------ 00010 ** @OPENSOURCE_HEADER_START@ 00011 ** Use of the YAF system and related source code is subject to the terms 00012 ** of the following licenses: 00013 ** 00014 ** GNU Public License (GPL) Rights pursuant to Version 2, June 1991 00015 ** Government Purpose License Rights (GPLR) pursuant to DFARS 252.227.7013 00016 ** 00017 ** NO WARRANTY 00018 ** 00019 ** ANY INFORMATION, MATERIALS, SERVICES, INTELLECTUAL PROPERTY OR OTHER 00020 ** PROPERTY OR RIGHTS GRANTED OR PROVIDED BY CARNEGIE MELLON UNIVERSITY 00021 ** PURSUANT TO THIS LICENSE (HEREINAFTER THE "DELIVERABLES") ARE ON AN 00022 ** "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY 00023 ** KIND, EITHER EXPRESS OR IMPLIED AS TO ANY MATTER INCLUDING, BUT NOT 00024 ** LIMITED TO, WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, 00025 ** MERCHANTABILITY, INFORMATIONAL CONTENT, NONINFRINGEMENT, OR ERROR-FREE 00026 ** OPERATION. CARNEGIE MELLON UNIVERSITY SHALL NOT BE LIABLE FOR INDIRECT, 00027 ** SPECIAL OR CONSEQUENTIAL DAMAGES, SUCH AS LOSS OF PROFITS OR INABILITY 00028 ** TO USE SAID INTELLECTUAL PROPERTY, UNDER THIS LICENSE, REGARDLESS OF 00029 ** WHETHER SUCH PARTY WAS AWARE OF THE POSSIBILITY OF SUCH DAMAGES. 00030 ** LICENSEE AGREES THAT IT WILL NOT MAKE ANY WARRANTY ON BEHALF OF 00031 ** CARNEGIE MELLON UNIVERSITY, EXPRESS OR IMPLIED, TO ANY PERSON 00032 ** CONCERNING THE APPLICATION OF OR THE RESULTS TO BE OBTAINED WITH THE 00033 ** DELIVERABLES UNDER THIS LICENSE. 00034 ** 00035 ** Licensee hereby agrees to defend, indemnify, and hold harmless Carnegie 00036 ** Mellon University, its trustees, officers, employees, and agents from 00037 ** all claims or demands made against them (and any related losses, 00038 ** expenses, or attorney's fees) arising out of, or relating to Licensee's 00039 ** and/or its sub licensees' negligent use or willful misuse of or 00040 ** negligent conduct or willful misconduct regarding the Software, 00041 ** facilities, or other rights or assistance granted by Carnegie Mellon 00042 ** University under this License, including, but not limited to, any 00043 ** claims of product liability, personal injury, death, damage to 00044 ** property, or violation of any laws or regulations. 00045 ** 00046 ** Carnegie Mellon University Software Engineering Institute authored 00047 ** documents are sponsored by the U.S. Department of Defense under 00048 ** Contract FA8721-05-C-0003. Carnegie Mellon University retains 00049 ** copyrights in all material produced under this contract. The U.S. 00050 ** Government retains a non-exclusive, royalty-free license to publish or 00051 ** reproduce these documents, or allow others to do so, for U.S. 00052 ** Government purposes only pursuant to the copyright license under the 00053 ** contract clause at 252.227.7013. 00054 ** 00055 ** @OPENSOURCE_HEADER_END@ 00056 ** ------------------------------------------------------------------------ 00057 */ 00058 00059 /* idem hack */ 00060 #ifndef _YAF_RING_H_ 00061 #define _YAF_RING_H_ 00062 #include <yaf/autoinc.h> 00063 00064 struct rgaRing_st; 00065 typedef struct rgaRing_st rgaRing_t; 00066 00067 rgaRing_t *rgaAlloc( 00068 size_t elt_sz, 00069 size_t cap); 00070 00071 void rgaFree( 00072 rgaRing_t *ring); 00073 00074 uint8_t *rgaNextHead( 00075 rgaRing_t *ring); 00076 00077 void rgaRewindHead( 00078 rgaRing_t *ring); 00079 00080 uint8_t *rgaNextTail( 00081 rgaRing_t *ring); 00082 00083 size_t rgaCount( 00084 rgaRing_t *ring); 00085 00086 size_t rgaPeak( 00087 rgaRing_t *ring); 00088 00089 #if YAF_RING_THREAD 00090 00091 rgaRing_t *rgaAllocThreaded( 00092 size_t elt_sz, 00093 size_t cap); 00094 00095 uint8_t *rgaWaitHead( 00096 rgaRing_t *ring); 00097 00098 void rgaReleaseHead( 00099 rgaRing_t *ring, 00100 size_t rsv); 00101 00102 uint8_t *rgaWaitTail( 00103 rgaRing_t *ring); 00104 00105 void rgaReleaseTail( 00106 rgaRing_t *ring, 00107 size_t rsv); 00108 00109 void rgaSetInterrupt( 00110 rgaRing_t *ring); 00111 00112 void rgaClearInterrupt( 00113 rgaRing_t *ring); 00114 00115 #endif 00116 00117 /* end idem */ 00118 #endif