#include <abstract.h>
Inheritance diagram for FieldAbstract:
Found in the file {linbox/field/abstract.h}. Abstract base class used to implement the field archetype to minimize code bloat. All public member functions of this class are purely virtual and must be implemented by all derived classes.
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 Member Functions | |
Object Management | |
There are no public constructors for this class. It should only be used in tandem with 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. | |
virtual 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 | |
virtual 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 | |
virtual 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 Member Functions | |
FieldAbstract () | |
Friends | |
class | FieldArchetype |
FieldArchetype is friend. |
|
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. |
|
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 >. |
|
Assignment operator. Purely virtual.
Implemented in FieldEnvelope, RingEnvelope, and FieldEnvelope< Ring >. |
|
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.
|
|
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.
|
|
Assignment of one field element to another. This function assumes both 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 >. |
|
Equality of two elements. This function assumes both field elements have already been constructed and initialized. Purely virtual.
|
|
Addition. x = y + z This function assumes all the field elements have already been constructed and initialized. Purely virtual.
|
|
Subtraction. x = y - z This function assumes all the field elements have 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.
|
|
Division. x = y / z This function assumes all the 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.
|
|
Multiplicative Inverse. x = 1 / y 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.
|
|
Zero equality. Test if field element is equal to zero. This function assumes the field element has 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.
|
|
Inplace Addition. x += y This function assumes both 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.
|
|
Inplace Multiplication. x *= y This function assumes both 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.
|
|
Inplace Additive Inverse (Inplace Negation). x = - x This function assumes the field element has 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.
|
|
Inplace AXPY. r += a * x This function assumes all field elements have already been constructed and initialized. Purely virtual
|
|
Print field. Purely virtual.
Implemented in FieldEnvelope, RingEnvelope, and FieldEnvelope< Ring >. |
|
Read field. Purely virtual.
Implemented in FieldEnvelope, RingEnvelope, and FieldEnvelope< Ring >. |
|
Print field element. This function assumes the field element has already been constructed and initialized. Purely virtual.
|
|
Read field element. This function assumes the field element has already been constructed and initialized. Purely virtual.
|