/* -*-c-*-
*
- * $Id: field.h,v 1.1 2001/04/29 18:12:33 mdw Exp $
+ * $Id: field.h,v 1.3 2002/01/13 13:48:44 mdw Exp $
*
* Definitions for field arithmetic
*
/*----- Revision history --------------------------------------------------*
*
* $Log: field.h,v $
+ * Revision 1.3 2002/01/13 13:48:44 mdw
+ * Further progress.
+ *
+ * Revision 1.2 2001/05/07 17:30:13 mdw
+ * Add an internal-representation no-op function.
+ *
* Revision 1.1 2001/04/29 18:12:33 mdw
* Prototype version.
*
mp *(*in)(field */*f*/, mp */*d*/, mp */*x*/);
mp *(*out)(field */*f*/, mp */*d*/, mp */*x*/);
+ mp *(*neg)(field */*f*/, mp */*d*/, mp */*x*/);
mp *(*add)(field */*f*/, mp */*d*/, mp */*x*/, mp */*y*/);
mp *(*sub)(field */*f*/, mp */*d*/, mp */*x*/, mp */*y*/);
mp *(*mul)(field */*f*/, mp */*d*/, mp */*x*/, mp */*y*/);
#define F_IN(f, d, x) (f)->ops->in((f), (d), (x))
#define F_OUT(f, d, x) (f)->ops->out((f), (d), (x))
+#define F_NEG(f, d, x) (f)->ops->neg((f), (d), (x))
#define F_ADD(f, d, x, y) (f)->ops->add((f), (d), (x), (y))
#define F_SUB(f, d, x, y) (f)->ops->sub((f), (d), (x), (y))
#define F_MUL(f, d, x, y) (f)->ops->mul((f), (d), (x), (y))
#define F_TPL(f, d, x) (f)->ops->tpl((f), (d), (x))
#define F_SQRT(f, d, x) (f)->ops->sqrt((f), (d), (x))
+/*----- Helpful field operations ------------------------------------------*/
+
+/* --- @field_id@ --- *
+ *
+ * Arguments: @field *f@ = pointer to a field
+ * @mp *d@ = a destination element
+ * @mp *x@ = a source element
+ *
+ * Returns: The result element.
+ *
+ * Use: An identity operation which can be used if your field has no
+ * internal representation.
+ */
+
+extern mp *field_id(field */*f*/, mp */*d*/, mp */*x*/);
+
/*----- Creating fields ---------------------------------------------------*/
/* --- @field_prime@ --- *