Diff of /src/runtime/util.h [000000] .. [a18f0a] Maximize Restore

  Switch to side-by-side view

--- a
+++ b/src/runtime/util.h
@@ -0,0 +1,40 @@
+/*
+ * miscellaneous utilities
+ */
+
+/*
+ * This software is part of the SBCL system. See the README file for
+ * more information.
+ *
+ * This software is derived from the CMU CL system, which was
+ * written at Carnegie Mellon University and released into the
+ * public domain. The software is in the public domain and is
+ * provided with absolutely no warranty. See the COPYING and CREDITS
+ * files for more information.
+ */
+
+/*
+ * a utility to accumulate a zero-terminated array of void* values
+ *
+ * (Ah, lovely C, makes it such a delight to accumulate a collection
+ * whose length isn't known in advance.. but it's probably more fun
+ * than trying to teach the SBCL debugger to walk g++ stack frames, not to
+ * mention dealing with g++'s lovely in-which-file-do-templates-expand
+ * issues; or than trying to use Lisp for all accumulation and having to
+ * hassle about FFIing all the details of opendir/readdir/closedir
+ * and so forth.)
+ *
+ * We more or less simulate C++-style ctors and dtors.
+ */
+typedef struct
+voidacc { /* the accumulator itself, to be treated as an opaque data type */
+/*private:*/
+    void **result;
+    int n_avail;
+    int n_used;
+} voidacc;
+int voidacc_ctor(voidacc*); /* the ctor, returning 0 for success */
+int voidacc_acc(voidacc*, void*); /* Accumulate an element into result,
+				   * returning 0 for success. */
+void** voidacc_give_away_result(voidacc*); /* giving away ownership */
+void voidacc_dtor(voidacc*); /* the dtor */