/* -*-c-*-
*
- * $Id: mp.h,v 1.9 2000/07/29 17:03:31 mdw Exp $
+ * $Id: mp.h,v 1.11 2001/04/03 19:36:05 mdw Exp $
*
* Simple multiprecision arithmetic
*
/*----- Revision history --------------------------------------------------*
*
* $Log: mp.h,v $
+ * Revision 1.11 2001/04/03 19:36:05 mdw
+ * Add some simple bitwise operations so that Perl can use them.
+ *
+ * Revision 1.10 2000/10/08 12:03:16 mdw
+ * Provide @mp_eq@ and @MP_EQ@ for rapidly testing equality of two
+ * integers.
+ *
* Revision 1.9 2000/07/29 17:03:31 mdw
* Add support for left-to-right bitscanning, for use in modular
* exponentiation.
extern mp *mp_lsr(mp */*d*/, mp */*a*/, size_t /*n*/);
+/* --- @mp_eq@ --- *
+ *
+ * Arguments: @const mp *a, *b@ = two numbers
+ *
+ * Returns: Nonzero if the numbers are equal.
+ */
+
+extern int mp_eq(const mp */*a*/, const mp */*b*/);
+
+#define MP_EQ(a, b) \
+ ((((a)->f ^ (b)->f) & MP_NEG) == 0 && \
+ mpx_ueq((a)->v, (a)->vl, (b)->v, (b)->vl))
+
/* --- @mp_cmp@ --- *
*
* Arguments: @const mp *a, *b@ = two numbers
#define MP_CMP(a, op, b) (mp_cmp((a), (b)) op 0)
+/* --- @mpx_and@, @mpx_or@, @mpx_xor@, @mpx_not@ --- *
+ *
+ * Arguments: @mp *d@ = destination
+ * @mp *a, *b@ = sources
+ *
+ * Returns: The result of the obvious bitwise operation.
+ */
+
+extern mp *mp_and(mp */*d*/, mp */*a*/, mp */*b*/);
+extern mp *mp_or(mp */*d*/, mp */*a*/, mp */*b*/);
+extern mp *mp_xor(mp */*d*/, mp */*a*/, mp */*b*/);
+extern mp *mp_not(mp */*d*/, mp */*a*/);
+
/* --- @mp_add@ --- *
*
* Arguments: @mp *d@ = destination