aboutsummaryrefslogtreecommitdiffstats
path: root/src/slide.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/slide.c')
-rw-r--r--src/slide.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/slide.c b/src/slide.c
new file mode 100644
index 0000000..e20d0be
--- /dev/null
+++ b/src/slide.c
@@ -0,0 +1,84 @@
+/*
+ * slide.c:
+ *
+ * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
+ * All rights reserved.
+ *
+ */
+
+static char rcsid[] = "$Id$";
+
+/*
+ * $Log$
+ * Revision 1.1 2008/02/13 16:57:29 james
+ * *** empty log message ***
+ *
+ * Revision 1.3 2008/02/13 09:12:21 james
+ * *** empty log message ***
+ *
+ * Revision 1.2 2008/02/12 22:36:46 james
+ * *** empty log message ***
+ *
+ * Revision 1.1 2008/02/08 15:06:42 james
+ * *** empty log message ***
+ *
+ */
+
+#include "project.h"
+
+void
+slide_free (Slide * s)
+{
+ free (s->slide);
+ free (s);
+}
+
+void
+slide_consume (Slide * s, int n)
+{
+ s->nbytes -= n;
+ memmove (s->slide, s->slide + n, s->nbytes);
+
+ if ((s->size > s->target_size) && (s->nbytes <= s->size))
+ {
+ s->size = s->target_size;
+ s->slide = realloc (s->slide, s->size);
+ }
+
+}
+
+void
+slide_added (Slide * s, int n)
+{
+ s->nbytes += n;
+}
+
+Slide *
+slide_new (int n)
+{
+ Slide *ret = (Slide *) malloc (sizeof (Slide));
+
+ ret->slide = (uint8_t *) malloc (n);
+ ret->size = n;
+ ret->target_size = n;
+ ret->nbytes = 0;
+
+ return ret;
+}
+
+
+void
+slide_expand (Slide * s, int n)
+{
+ n += s->nbytes;
+
+ if (n <= s->size)
+ return;
+
+ while (n > s->size)
+ s->size <<= 1;
+
+//FIXME -- might fail
+ s->slide = realloc (s->slide, s->size);
+
+}