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.15.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 * Licensed 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 * Contract No.: FA8702-15-D-0002
35 * Contractor Name: Carnegie Mellon University
36 * Contractor Address: 4500 Fifth Avenue, Pittsburgh, PA 15213
37 *
38 * The Government's rights to use, modify, reproduce, release, perform,
39 * display, or disclose this software are restricted by paragraph (b)(2) of
40 * the Rights in Noncommercial Computer Software and Noncommercial Computer
41 * Software Documentation clause contained in the above identified
42 * contract. No restrictions apply after the expiration date shown
43 * above. Any reproduction of the software or portions thereof marked with
44 * this legend must also reproduce the markings.
45 *
46 * This Software includes and/or makes use of Third-Party Software each
47 * subject to its own license.
48 *
49 * DM23-2313
50 * @DISTRIBUTION_STATEMENT_END@
51 * ------------------------------------------------------------------------
52 */
53
54#ifndef _YAF_RING_H_
55#define _YAF_RING_H_
56#include <yaf/autoinc.h>
57
58struct rgaRing_st;
59typedef struct rgaRing_st rgaRing_t;
60
61rgaRing_t *
62rgaAlloc(
63 size_t elt_sz,
64 size_t cap);
65
66void
67rgaFree(
68 rgaRing_t *ring);
69
70uint8_t *
71rgaNextHead(
72 rgaRing_t *ring);
73
74void
75rgaRewindHead(
76 rgaRing_t *ring);
77
78uint8_t *
79rgaNextTail(
80 rgaRing_t *ring);
81
82size_t
83rgaCount(
84 rgaRing_t *ring);
85
86size_t
87rgaPeak(
88 rgaRing_t *ring);
89
90#if YAF_RING_THREAD
91
92rgaRing_t *
93rgaAllocThreaded(
94 size_t elt_sz,
95 size_t cap);
96
97uint8_t *
98rgaWaitHead(
99 rgaRing_t *ring);
100
101void
102rgaReleaseHead(
103 rgaRing_t *ring,
104 size_t rsv);
105
106uint8_t *
107rgaWaitTail(
108 rgaRing_t *ring);
109
110void
111rgaReleaseTail(
112 rgaRing_t *ring,
113 size_t rsv);
114
115void
116rgaSetInterrupt(
117 rgaRing_t *ring);
118
119void
120rgaClearInterrupt(
121 rgaRing_t *ring);
122
123#endif /* if YAF_RING_THREAD */
124#endif /* ifndef _YAF_RING_H_ */