summaryrefslogtreecommitdiff
path: root/deps/uber-graph/g-ring.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/uber-graph/g-ring.h')
-rw-r--r--deps/uber-graph/g-ring.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/deps/uber-graph/g-ring.h b/deps/uber-graph/g-ring.h
new file mode 100644
index 00000000..a4943878
--- /dev/null
+++ b/deps/uber-graph/g-ring.h
@@ -0,0 +1,84 @@
+/* g-ring.h
+ *
+ * Copyright (C) 2010 Christian Hergert <chris@dronelabs.com>
+ *
+ * This file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __G_RING_H__
+#define __G_RING_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/**
+ * g_ring_append_val:
+ * @ring: A #GRing.
+ * @val: A value to append to the #GRing.
+ *
+ * Appends a value to the ring buffer. @val must be a variable as it is
+ * referenced to.
+ *
+ * Returns: None.
+ * Side effects: None.
+ */
+#define g_ring_append_val(ring, val) g_ring_append_vals(ring, &(val), 1)
+
+/**
+ * g_ring_get_index:
+ * @ring: A #GRing.
+ * @type: The type to extract.
+ * @i: The index within the #GRing relative to the current position.
+ *
+ * Retrieves the value at the given index from the #GRing. The value
+ * is cast to @type. You may retrieve a pointer to the value within the
+ * array by using &.
+ *
+ * [[
+ * gdouble *v = &g_ring_get_index(ring, gdouble, 0);
+ * gdouble v = g_ring_get_index(ring, gdouble, 0);
+ * ]]
+ *
+ * Returns: The value at the given index.
+ * Side effects: None.
+ */
+#define g_ring_get_index(ring, type, i) \
+ (((type*)(ring)->data)[(((gint)(ring)->pos - 1 - (i)) >= 0) ? \
+ ((ring)->pos - 1 - (i)) : \
+ ((ring)->len + ((ring)->pos - 1 - (i)))])
+
+typedef struct
+{
+ guint8 *data;
+ guint len;
+ guint pos;
+} GRing;
+
+GType g_ring_get_type (void) G_GNUC_CONST;
+GRing* g_ring_sized_new (guint element_size,
+ guint reserved_size,
+ GDestroyNotify element_destroy);
+void g_ring_append_vals (GRing *ring,
+ gconstpointer data,
+ guint len);
+void g_ring_foreach (GRing *ring,
+ GFunc func,
+ gpointer user_data);
+GRing* g_ring_ref (GRing *ring);
+void g_ring_unref (GRing *ring);
+
+G_END_DECLS
+
+#endif /* __G_RING_H__ */