Changeset e604cd in git for kernel


Ignore:
Timestamp:
Nov 25, 2005, 11:17:58 AM (18 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', '2a584933abf2a2d3082034c7586d38bb6de1a30a')
Children:
f498f1081627c853c4d77077fcaa2ea32d82a711
Parents:
84578647043da515b0705f610dde44cdd285907c
Message:
*bricken: generalization


git-svn-id: file:///usr/local/Singular/svn/trunk@8811 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/Poly.h

    r8457864 re604cd  
    1 //$Id: Poly.h,v 1.30 2005-11-24 15:57:10 bricken Exp $
     1//$Id: Poly.h,v 1.31 2005-11-25 10:17:58 bricken Exp $
    22
    33
     
    1717
    1818#include <vector>
     19#include <exception>
     20using std::exception;
    1921
    2022#define BOOST_DISABLE_THREADS
    2123
     24class DifferentDomainException: public exception{
     25
     26};
     27class ExceptionBasedErrorHandler{
     28    public:
     29        static const bool handleErrors=true;
     30        static void handleDifferentRing(ring r, ring s){
     31        PrintS("throwing");
     32        throw DifferentDomainException();
     33    }
     34};
    2235
    2336//PolyImpl is a 08/15 poly wrapper
     
    2538class TrivialErrorHandler{
    2639    public:
    27     static const bool handle_errors=false;
    28     static void handle(){
     40    static const bool handleErrors=false;
     41    static void handleDifferentRing(ring r, ring s){
    2942    }
    3043};
     
    357370    return p_Copy(ptr->p,ptr->r);
    358371  }
    359  
     372  template<class T> void checkIsSameRing(T& p){
     373    if (error_handle_traits::handleErrors){
     374                 if (p.getRing()!=this->getRing()){
     375   error_handle_traits::handleDifferentRing(
     376    this->getRing(),
     377    p.getRing()
     378   );
     379        }
     380    }
     381  }
    360382  typedef create_type_input create_type;
    361383  typedef PolyInputIterator<create_type> iterator;
     
    398420
    399421  PolyBase& operator+=(const PolyBase& p2){
     422    checkIsSameRing(p2);
    400423    copy_on_write();
    401424    *ptr += *p2.ptr;
     
    465488};
    466489
    467 class Poly: public PolyBase<POLY_VARIANT_RING, Poly, TrivialErrorHandler>{
     490class Poly: public PolyBase<POLY_VARIANT_RING, Poly, ExceptionBasedErrorHandler>{
    468491 private:
    469     typedef PolyBase<POLY_VARIANT_RING, Poly,TrivialErrorHandler> Base;
     492    typedef PolyBase<POLY_VARIANT_RING, Poly,ExceptionBasedErrorHandler> Base;
    470493  friend class Vector;
    471   friend class PolyBase<POLY_VARIANT_MODUL,Vector,TrivialErrorHandler>;
     494  friend class PolyBase<POLY_VARIANT_MODUL,Vector,ExceptionBasedErrorHandler>;
    472495 public:
    473496
     
    519542
    520543};
    521 class Vector: public PolyBase<POLY_VARIANT_MODUL, Vector, TrivialErrorHandler>{
     544class Vector: public PolyBase<POLY_VARIANT_MODUL, Vector, ExceptionBasedErrorHandler>{
    522545 private:
    523     typedef PolyBase<POLY_VARIANT_MODUL, Vector, TrivialErrorHandler> Base;
     546    typedef PolyBase<POLY_VARIANT_MODUL, Vector, ExceptionBasedErrorHandler> Base;
    524547 public:
    525548
Note: See TracChangeset for help on using the changeset viewer.