*.c: Publish algorithm and crypto-group tables as `mapping' objects.
[catacomb-python] / catacomb-python.h
index 4c7ced4..da6a8fe 100644 (file)
@@ -136,24 +136,14 @@ MODULES(DECLARE_MODINIT)
 /* Conversions. */
 extern int convmpw(PyObject *, void *);
 
-/* Make a dictionary of generic-crypto classes. */
-#define GEN(func, base)                                                        \
-  static PyObject *func(void)                                          \
-  {                                                                    \
-    PyObject *d = PyDict_New();                                                \
-    PyObject *o;                                                       \
-    int i;                                                             \
-                                                                       \
-    for (i = 0; g##base##tab[i]; i++) {                                        \
-      o = gc##base##_pywrap(CONVERT_CAREFULLY(gc##base *, const gc##base *, \
-                                             g##base##tab[i]));        \
-      PyDict_SetItemString(d,                                          \
-                          (/*unconst*/ char *)g##base##tab[i]->name,   \
-                          o);                                          \
-      Py_DECREF(o);                                                    \
-    }                                                                  \
-    return (d);                                                                \
-  }
+/* Building tables of things. */
+extern PyObject *make_algtab(const void *tab, size_t esz,
+                            const char *(*namefn)(const void *),
+                            PyObject *(*valfn)(const void *));
+extern PyObject *make_grouptab(const void *tab, size_t esz,
+                              const char *(*namefn)(const void *),
+                              int (*ixfn)(const void *),
+                              PyObject *(*valfn)(int));
 
 /* Common handling for simultaneous exponentiation. */
 extern PyObject *mexp_common(PyObject *, PyObject *, size_t,