math/mpint.[ch]: Consolidate the list of supplied conversions in header.
[catacomb] / math / mpint.h
index e351b05..637ec10 100644 (file)
 
 /*----- Functions provided ------------------------------------------------*/
 
+/* --- Build up the list of conversions to be supplied --- */
+
+#define MPINT_CONVERSIONS(_)                                           \
+  _(short, short, SHRT_MAX)                                            \
+  _(ushort, unsigned short, USHRT_MAX)                                 \
+  _(int, int, INT_MAX)                                                 \
+  _(uint, unsigned, UINT_MAX)                                          \
+  _(long, long, LONG_MAX)                                              \
+  _(ulong, unsigned long, ULONG_MAX)                                   \
+  _(uint32, uint32, MASK32)
+
 /* --- @mp_fromINT@ --- *
  *
  * Arguments:  @mp *d@ = pointer to destination multiprecision integer
  * Use:                Converts a standard C integer to a multiprecision integer.
  */
 
-#define mp_fromINT(name, type)                                         \
-  extern mp *mp_from##name(mp */*d*/, type /*i*/)
-
-mp_fromINT(short, short);
-mp_fromINT(ushort, unsigned short);
-mp_fromINT(int, int);
-mp_fromINT(uint, unsigned);
-mp_fromINT(uint32, uint32);
-mp_fromINT(long, long);
-mp_fromINT(ulong, unsigned long);
-
+#define mp_fromINT(name, type, max)                                    \
+  extern mp *mp_from##name(mp */*d*/, type /*i*/);
+MPINT_CONVERSIONS(mp_fromINT)
 #undef mp_fromINT
 
 /* --- @mp_toINT@ --- *
@@ -181,17 +184,9 @@ mp_fromINT(ulong, unsigned long);
  *             type is signed, the behaviour is undefined.
  */
 
-#define mp_toINT(name, type)                                           \
-  extern type mp_to##name(const mp */*m*/)
-
-mp_toINT(short, short);
-mp_toINT(ushort, unsigned short);
-mp_toINT(int, int);
-mp_toINT(uint, unsigned);
-mp_toINT(uint32, uint32);
-mp_toINT(long, long);
-mp_toINT(ulong, unsigned long);
-
+#define mp_toINT(name, type, max)                                      \
+  extern type mp_to##name(const mp */*m*/);
+MPINT_CONVERSIONS(mp_toINT)
 #undef mp_toINT
 
 /*----- That's all, folks -------------------------------------------------*/