/* -*-c-*-
*
- * $Id: mpscan.h,v 1.1 1999/09/03 08:41:12 mdw Exp $
+ * $Id: mpscan.h,v 1.2 1999/11/13 01:55:10 mdw Exp $
*
* Sequential bit scan of multiprecision integers
*
/*----- Revision history --------------------------------------------------*
*
* $Log: mpscan.h,v $
+ * Revision 1.2 1999/11/13 01:55:10 mdw
+ * Fixed so that they compile. Minor interface changes.
+ *
* Revision 1.1 1999/09/03 08:41:12 mdw
* Initial import.
*
/*----- Header files ------------------------------------------------------*/
-#ifndef MPTYPES_H
-# include "mptypes.h"
+#ifndef MPW_H
+# include "mpw.h"
#endif
/*----- Data structures ---------------------------------------------------*/
typedef struct mpscan {
- const mpw *v; /* Vector of words to scan */
+ const mpw *v, *vl; /* Vector of words to scan */
mpw w; /* Current word to scan */
int bits; /* Number of bits left in @w@ */
- size_t len; /* Length of the vector in words */
} mpscan;
/*----- Functions provided ------------------------------------------------*/
/* --- @mpscan_initx@ --- *
*
* Arguments: @mpscan *m@ = pointer to bitscanner structure
- * @const mpw *v@ = vector of words to scan
- * @size_t len@ = length of vector in words
+ * @const mpw *v, *vl@ = vector of words to scan
*
* Returns: ---
*
- * Use: Initializes a bitscanner from a low-level vector-and-length
+ * Use: Initializes a bitscanner from a low-level base-and-limit
* representation of an integer. Initially no bit is ready; you
* must call @mpscan_step@ before anything useful will come
* out.
*/
-#define MPSCAN_INITX(m_, v_, len_) do { \
+#define MPSCAN_INITX(m_, v_, vl_) do { \
mpscan *_m = (m_); \
_m->v = (v_); \
- _m->len = (len_); \
+ _m->vl = (vl_); \
_m->bits = 0; \
} while (0)
-extern void mpscan_initx(mpscan */*m*/, const mpw */*v*/, size_t /*len*/);
+extern void mpscan_initx(mpscan */*m*/, const mpw */*v*/, const mpw */*vl*/);
/* --- @mpscan_step@ --- *
*
#define MPSCAN_STEP(m) \
((m)->bits ? ((m)->w >>= 1, \
(m)->bits--, 1) : \
- (m)->len ? ((m)->len--, \
- (m)->w = *(m)->v++, \
- (m)->bits = MP_WBITS - 1, 1) : \
+ (m)->v < (m)->vl ? ((m)->w = *(m)->v++, \
+ (m)->bits = MPW_BITS - 1, 1) : \
0)
extern int mpscan_step(mpscan */*m*/);