#include <abstract.h>
Inheritance diagram for FieldAbstract:
If a template is instantiated on the field archetype, we can change the field it is using by changing the derived class of this class. This allows us to change the field used in a template without having to reinstantiate it. This minimizes code bloat, but it also introduces indirection through the use of pointers and virtual functions which is inefficient.
Public Types | |
typedef ElementAbstract | Element |
element type. | |
typedef RandIterAbstract | RandIter |
Random iterator generator type. | |
Public Methods | |
Object Management | |
There are no public constructors for this class. It should only be used in tandem with \Ref{FieldArchetype}. | |
virtual | ~FieldAbstract (void) |
virtual FieldAbstract * | clone () const=0 |
virtual FieldAbstract & | operator= (const FieldAbstract &F)=0 |
virtual Element & | init (Element &x, const integer &y) const=0 |
virtual integer & | convert (integer &x, const Element &y) const=0 |
virtual Element & | assign (Element &x, const Element &y) const=0 |
virtual integer & | cardinality (integer &c) const=0 |
virtual integer & | characteristic (integer &c) const=0 |
Arithmetic Operations | |
x <- y op z; x <- op y These operations require all elements, including x, to be initialized before the operation is called. Uninitialized field elements will give undefined results. | |
Object virtual Management bool | areEqual (const Element &x, const Element &y) const=0 |
virtual Element & | add (Element &x, const Element &y, const Element &z) const=0 |
virtual Element & | sub (Element &x, const Element &y, const Element &z) const=0 |
virtual Element & | mul (Element &x, const Element &y, const Element &z) const=0 |
virtual Element & | div (Element &x, const Element &y, const Element &z) const=0 |
virtual Element & | neg (Element &x, const Element &y) const=0 |
virtual Element & | inv (Element &x, const Element &y) const=0 |
virtual Element & | axpy (Element &r, const Element &a, const Element &x, const Element &y) const=0 |
Inplace Arithmetic Operations | |
x <- x op y; x <- op x | |
Arithmetic virtual Operations bool | isZero (const Element &x) const=0 |
virtual bool | isOne (const Element &x) const=0 |
virtual Element & | addin (Element &x, const Element &y) const=0 |
virtual Element & | subin (Element &x, const Element &y) const=0 |
virtual Element & | mulin (Element &x, const Element &y) const=0 |
virtual Element & | divin (Element &x, const Element &y) const=0 |
virtual Element & | negin (Element &x) const=0 |
virtual Element & | invin (Element &x) const=0 |
virtual Element & | axpyin (Element &r, const Element &a, const Element &x) const=0 |
Input/Output Operations | |
Inplace Arithmetic virtual Operations std::ostream & | write (std::ostream &os) const=0 |
virtual std::istream & | read (std::istream &is)=0 |
virtual std::ostream & | write (std::ostream &os, const Element &x) const=0 |
virtual std::istream & | read (std::istream &is, Element &x) const=0 |
Protected Methods | |
FieldAbstract () | |
Friends | |
class | FieldArchetype |
FieldArchetype is friend. |
|
element type.
Reimplemented in FieldEnvelope, RingAbstract, RingEnvelope, and FieldEnvelope< Ring >. |
|
Random iterator generator type.
Reimplemented in FieldEnvelope, RingAbstract, RingEnvelope, and FieldEnvelope< Ring >. |
|
Destructor. Required because of virtual member functions. Virtual. |
|
Default Constructor. Required by derived classes, but protected because this class should never be constructed by itself. |
|
Addition. x = y + z This function assumes all the field elements have already been constructed and initialized. Purely virtual.
|
|
Inplace Addition. x += y This function assumes both field elements have already been constructed and initialized. Purely virtual.
|
|
Equality of two elements. This function assumes both field elements have already been constructed and initialized. Purely virtual.
|
|
Assignment of one field element to another. This function assumes both field elements have already been constructed and initialized. Purely virtual.
|
|
Natural AXPY. r = a * x + y This function assumes all field elements have already been constructed and initialized. Purely virtual.
|
|
Inplace AXPY. r += a * x This function assumes all field elements have already been constructed and initialized. Purely virtual
|
|
Cardinality. Return integer representing cardinality of the domain. Returns a non-negative integer for all domains with finite cardinality, and returns -1 to signify a domain of infinite cardinality. Purely virtual.
Implemented in FieldEnvelope, RingEnvelope, and FieldEnvelope< Ring >. |
|
Characteristic. Return integer representing characteristic of the domain. Returns a positive integer to all domains with finite characteristic, and returns 0 to signify a domain of infinite characteristic. Purely virtual.
Implemented in FieldEnvelope, RingEnvelope, and FieldEnvelope< Ring >. |
|
Virtual copy constructor. Required because constructors cannot be virtual. Passes construction on to derived classes. Purely virtual. This function is not part of the common object interface.
Implemented in FieldEnvelope, RingEnvelope, and FieldEnvelope< Ring >. |
|
Conversion of field element to an integer. This function assumes the output field element x has already been constructed, but that it is not already initialized. Purely virtual.
|
|
Division. x = y / z This function assumes all the field elements have already been constructed and initialized. Purely virtual.
|
|
Inplace Division. x /= y This function assumes both field elements have already been constructed and initialized. Purely virtual.
|
|
Initialization of field element from an integer. Behaves like C++ allocator construct. This function assumes the output field element x has already been constructed, but that it is not already initialized. Purely virtual.
|
|
Multiplicative Inverse. x = 1 / y This function assumes both field elements have already been constructed and initialized. Purely virtual.
|
|
Inplace Multiplicative Inverse. x = 1 / x This function assumes the field elementhas already been constructed and initialized. Purely virtual.
|
|
One equality. Test if field element is equal to one. This function assumes the field element has already been constructed and initialized. Purely virtual.
|
|
Zero equality. Test if field element is equal to zero. This function assumes the field element has already been constructed and initialized. Purely virtual.
|
|
Multiplication. x = y * z This function assumes all the field elements have already been constructed and initialized. Purely virtual.
|
|
Inplace Multiplication. x *= y This function assumes both field elements have already been constructed and initialized. Purely virtual.
|
|
Additive Inverse (Negation). x = - y This function assumes both field elements have already been constructed and initialized. Purely virtual.
|
|
Inplace Additive Inverse (Inplace Negation). x = - x This function assumes the field element has already been constructed and initialized. Purely virtual.
|
|
Assignment operator. Purely virtual.
Implemented in FieldEnvelope, RingEnvelope, and FieldEnvelope< Ring >. |
|
Read field element. This function assumes the field element has already been constructed and initialized. Purely virtual.
|
|
Read field. Purely virtual.
Implemented in FieldEnvelope, RingEnvelope, and FieldEnvelope< Ring >. |
|
Subtraction. x = y - z This function assumes all the field elements have already been constructed and initialized. Purely virtual.
|
|
Inplace Subtraction. x -= y This function assumes both field elements have already been constructed and initialized. Purely virtual.
|
|
Print field element. This function assumes the field element has already been constructed and initialized. Purely virtual.
|
|
Print field. Purely virtual.
Implemented in FieldEnvelope, RingEnvelope, and FieldEnvelope< Ring >. |
|
FieldArchetype is friend.
|