Skip to content

Latest commit

 

History

History
33 lines (22 loc) · 2.1 KB

README.md

File metadata and controls

33 lines (22 loc) · 2.1 KB

cpp-mv-poly

(Automatically exported from code.google.com/p/cpp-mv-poly)

In the project we create an implementation of multivariate polynomials arithmetic which use sophisticated template techniques, and is able to work with different implementations of algebraic structures, fields, rings, etc. for polynomial coefficients (e.g. we used to apply NTL (cf. [NTL]) data structures which represent those notions). As a part of our “technical research” on using template techniques we are interested in applying template programming design patterns (e.g. from [VJ]) as well as adapting well-known OOP design patterns discussed in [GoF] for the objects from abstract algebra. More precisely the main goal of the project is construction of BMS-algorithm (cf. [CLO'S, ch. 10]).

Dependencies

  • Boost 1.3x+: some convenience utilities, no need for building (headers-only);
  • NTL 5+: A Library for doing Number Theory;
  • CUTE 2+: “C++ Unit Testing Easier”;
  • GLPK: GNU Linear Programming Kit;
  • google-glog: Logging library for C++.

Build

You need to have a compiler with thorough support for C++11 (say, GCC 4.7+). And the libraries listed in the Dependencies section.

The project is headers-only, so in order to try it out you have to use some test source code (in .cpp-file). This is examplified by Test.cpp from the repo. So current version of the project could be tested e.g. via:

g++ -std=c++11 -I/path/to/cute/cute_lib -o Test Test.cpp -lntl -lglpk

(Assuming Boost headers and binaries for NTL and GLPL are in proper places).

References

  • [NTL] NTL: A Library for doing Number Theory by Victor Shoup, http://shoup.net/ntl/
  • [VJ] D. Vandevoorde, N. M. Josuttis, C++ Templates: The Complete Guide.
  • [GoF] E. Gamma, R. Helm, R. Johnson, and J. M. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software.
  • [CLO'S] D. A. Cox, J. Little, D. O'Shea, Using Algebraic Geometry.