ring.h
1/*
2 * Copyright 2007-2023 Carnegie Mellon University
3 * See license information in LICENSE.txt.
4 */
5/*
6 * ring.c
7 * General ring array implementation
8 *
9 * ------------------------------------------------------------------------
10 * Authors: Brian Trammell
11 * ------------------------------------------------------------------------
12 * @DISTRIBUTION_STATEMENT_BEGIN@
13 * YAF 2.14.0
14 *
15 * Copyright 2023 Carnegie Mellon University.
16 *
17 * NO WARRANTY. THIS CARNEGIE MELLON UNIVERSITY AND SOFTWARE ENGINEERING
18 * INSTITUTE MATERIAL IS FURNISHED ON AN "AS-IS" BASIS. CARNEGIE MELLON
19 * UNIVERSITY MAKES NO WARRANTIES OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
20 * AS TO ANY MATTER INCLUDING, BUT NOT LIMITED TO, WARRANTY OF FITNESS FOR
21 * PURPOSE OR MERCHANTABILITY, EXCLUSIVITY, OR RESULTS OBTAINED FROM USE OF
22 * THE MATERIAL. CARNEGIE MELLON UNIVERSITY DOES NOT MAKE ANY WARRANTY OF
23 * ANY KIND WITH RESPECT TO FREEDOM FROM PATENT, TRADEMARK, OR COPYRIGHT
24 * INFRINGEMENT.
25 *
26 * Released under a GNU GPL 2.0-style license, please see LICENSE.txt or
27 * contact permission@sei.cmu.edu for full terms.
28 *
29 * [DISTRIBUTION STATEMENT A] This material has been approved for public
30 * release and unlimited distribution. Please see Copyright notice for
31 * non-US Government use and distribution.
32 *
33 * GOVERNMENT PURPOSE RIGHTS - Software and Software Documentation
34 *
35 * Contract No.: FA8702-15-D-0002
36 *
37 * Contractor Name: Carnegie Mellon University
38 *
39 * Contractor Address: 4500 Fifth Avenue, Pittsburgh, PA 15213
40 *
41 * The Government's rights to use, modify, reproduce, release, perform,
42 * display, or disclose this software are restricted by paragraph (b)(2) of
43 * the Rights in Noncommercial Computer Software and Noncommercial Computer
44 * Software Documentation clause contained in the above identified
45 * contract. No restrictions apply after the expiration date shown
46 * above. Any reproduction of the software or portions thereof marked with
47 * this legend must also reproduce the markings.
48 *
49 * Carnegie Mellon(R) and CERT(R) are registered in the U.S. Patent and
50 * Trademark Office by Carnegie Mellon University.
51 *
52 * This Software includes and/or makes use of Third-Party Software each
53 * subject to its own license.
54 *
55 * DM23-0544
56 * @DISTRIBUTION_STATEMENT_END@
57 * ------------------------------------------------------------------------
58 */
59
60#ifndef _YAF_RING_H_
61#define _YAF_RING_H_
62#include <yaf/autoinc.h>
63
64struct rgaRing_st;
65typedef struct rgaRing_st rgaRing_t;
66
67rgaRing_t *
68rgaAlloc(
69 size_t elt_sz,
70 size_t cap);
71
72void
73rgaFree(
74 rgaRing_t *ring);
75
76uint8_t *
77rgaNextHead(
78 rgaRing_t *ring);
79
80void
81rgaRewindHead(
82 rgaRing_t *ring);
83
84uint8_t *
85rgaNextTail(
86 rgaRing_t *ring);
87
88size_t
89rgaCount(
90 rgaRing_t *ring);
91
92size_t
93rgaPeak(
94 rgaRing_t *ring);
95
96#if YAF_RING_THREAD
97
98rgaRing_t *
99rgaAllocThreaded(
100 size_t elt_sz,
101 size_t cap);
102
103uint8_t *
104rgaWaitHead(
105 rgaRing_t *ring);
106
107void
108rgaReleaseHead(
109 rgaRing_t *ring,
110 size_t rsv);
111
112uint8_t *
113rgaWaitTail(
114 rgaRing_t *ring);
115
116void
117rgaReleaseTail(
118 rgaRing_t *ring,
119 size_t rsv);
120
121void
122rgaSetInterrupt(
123 rgaRing_t *ring);
124
125void
126rgaClearInterrupt(
127 rgaRing_t *ring);
128
129#endif /* if YAF_RING_THREAD */
130#endif /* ifndef _YAF_RING_H_ */