You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
3.8 KiB
78 lines
3.8 KiB
#ifndef _rpl_h_
|
|
#define _rpl_h_
|
|
|
|
/*! \file rpl.h
|
|
* \mainpage RPL Library
|
|
*
|
|
* \section intro_sec Introduction
|
|
*
|
|
* RPL stands for Replacement Package for Lidia : it is an \em ad \em hoc
|
|
* library designed to replace the LiDIA library in
|
|
* the QI (Quadratic Intersections) Project. \n
|
|
* It does \b not aims to be an alternative to LiDIA. It is
|
|
* just a subset of some LiDIA classes, with the minimal
|
|
* interface used in QI project. \n
|
|
* To achieve this, we need to re-implement the following classes :
|
|
* - base types
|
|
* -# \b bigint : arbitrary precision integers
|
|
* -# \b bigmod : arbitrary precision \f$\mathbb{Z}/m\mathbb{Z}\f$ integers (QILegendre.cc)
|
|
* -# \b bigfloat : arbitrary precision floats (QIInterWith22.cc,QIOutputter.cc)
|
|
* -# \b bigrational : arbitrary precision integers (QILegendre.cc)
|
|
* - composite types
|
|
* -# \b polynomial<T> : univariate polynomials (in 13 files)
|
|
* -# \b base_vector<T> : template type vectors (in 8 files)
|
|
* -# \b math_vector<T> : template type vectors for numeric (in 11 files)
|
|
* -# \b base_matrix<T> : template base matrix (QIParamStruct.h, QIQsicStruct.h)
|
|
* -# \b math_matrix<T> : template math matrix (QILegendre.cc, QIInterWith22.cc)
|
|
* -# \b bigint_matrix : bigint math matrix (> 13 files)
|
|
* -# \b rational_factorization : factorizations of rational numbers. (QIVanishDet.cc, QINumber.cc
|
|
* and QILegendre.cc )
|
|
* -# \b galois_field : QILegendre.cc
|
|
* -# \b gf_element : Galois Field elements (QILegendre.cc)
|
|
*
|
|
*
|
|
* For rapidity of developpement, we will re-uses some classical libraries :
|
|
* - <a href="http://boost.org"> Boost</a> (for Matrix, Vectors, Array classes and the Testing Framework)
|
|
* - <a href="gmplib.org">GMP</a> (To implements bigint, bigrational, bigfloat, and some mathematicals functions)
|
|
*
|
|
* the objective has two aspects :
|
|
* - one is the independance from the unmaintened LiDIA libraries.
|
|
* - the other comes from licensing. Using only the two previous quoted libraries (under LGPL or other licenses), \n
|
|
* one could therefore release the QI software as a commercial software.
|
|
*
|
|
* re-implementing from scratch some parts like polynomials seems to be naive, compared to the highly optimized \n
|
|
* LIDIA library, but we must keep in mind that, it devoted to the QI software, which only uses polynomials of \n
|
|
* degree 4 at most. So using some compile-time optimizations techniques, we hope to keep an efficient re-implementation \n
|
|
*
|
|
* As a first prototype, we could rewrite the code ignoring the file QLegendre.cc with is only required in the optimization case. \n
|
|
* In this case, we just need re-implement the following classes : \n
|
|
*
|
|
* - base types
|
|
* -# \c rpl::bigint : arbitrary precision integers
|
|
* -# \c rpl::bigfloat : arbitrary precision floating points
|
|
* - composite types
|
|
* -# \c rpl::polynomial : univariate polynomials
|
|
* -# \c rpl::base_vector : template base type vectors
|
|
* -# \c rpl::math_vector : template type vectors for numeric
|
|
* -# \c rpl::base_matrix : template base type matrices
|
|
* -# \c rpl::math_matrix : template math matrix for numeric
|
|
* -# \c rpl::bigint_matrix : specialized math matrix for type bigint with some <em> ad hoc </em> linear algebra functions (det, kernel, rank)
|
|
* -# \c rpl::rational_factorization : basical factorizations for bigints
|
|
*
|
|
* \section bigint_sec bigint
|
|
*
|
|
* the implementation of bigint is straightforward : we agregate an mpz_class member (coming from gmpxx.h, interface for
|
|
* c++ of the GMP library).
|
|
* \n Note that, all operations all not implemented in the C++ style. In this case, we call
|
|
* the member .get_mpz_t() and apply it the corresping C GMP function
|
|
*
|
|
*/
|
|
|
|
//! the global namespace for RPL
|
|
namespace rpl {
|
|
|
|
typedef int rpl_size_t; //!< a typedef replacing lidia_size_t in the original code
|
|
}
|
|
|
|
|
|
#endif
|
|
|