Changeset c1e4cd in git


Ignore:
Timestamp:
Aug 17, 2005, 11:42:15 AM (19 years ago)
Author:
Michael Brickenstein <bricken@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
82f499751785a3a81044266a491b4ef627535172
Parents:
650d1417bb87b3339aa5ce123bb3ca01e61f181f
Message:
*bricken: more template magic


git-svn-id: file:///usr/local/Singular/svn/trunk@8517 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
kernel
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • kernel/Number.h

    r650d14 rc1e4cd  
    1010  POLY_VARIANT_MODUL
    1111};
    12 template<poly_variant> class PolyBase;
    13 
     12template<poly_variant,class> class PolyBase;
     13class Poly;
    1414class Number{
    1515 
     
    3030  friend Number operator*(int n1, const Number& n2);
    3131  friend bool operator==(int n1, const Number& n2);
    32   friend class PolyBase<POLY_VARIANT_RING>;
    33   friend class PolyBase<POLY_VARIANT_MODUL>;
     32  friend class Poly;
     33  friend class PolyBase<POLY_VARIANT_RING,Poly>;
     34 
    3435  friend class PolyImpl;
    3536  Number& operator=(const Number& n2){
  • kernel/Poly.h

    r650d14 rc1e4cd  
    1 //$Id: Poly.h,v 1.12 2005-08-17 09:14:34 bricken Exp $
     1//$Id: Poly.h,v 1.13 2005-08-17 09:42:15 bricken Exp $
    22
    33
     
    2323//PolyImpl is a 08/15 poly wrapper
    2424//Poly wraps around PolyImpl with reference counting using boost
     25
    2526class PolyImpl{
    26   friend class PolyBase<POLY_VARIANT_RING>;
    27   friend class PolyBase<POLY_VARIANT_MODUL>;
     27  friend class PolyBase<POLY_VARIANT_RING,Poly>;
     28  //friend class PolyBase<POLY_VARIANT_MODUL>;
    2829  friend class Poly;
    2930  //friend class Number;
     
    328329};
    329330
    330 template <poly_variant variant> class PolyBase;
    331 template <poly_variant v> inline PolyBase<v> operator+(const PolyBase<v>& p1, const PolyBase<v>& p2);
     331
     332//template <poly_variant v> inline PolyBase<v> operator+(const PolyBase<v>& p1, const PolyBase<v>& p2);
    332333//template <poly_variant v> inline PolyBase<v> operator*(const PolyBase<v>& p1, const PolyBase<v>& p2);
    333334//template <poly_variant v>inline PolyBase<v> operator*(const PolyBase<v>& p1, const Number& n);
    334 template<poly_variant variant> class PolyBase{
     335template<poly_variant variant, class create_type_input> class PolyBase{
    335336 
    336337 public:
    337   typedef PolyInputIterator<PolyBase> iterator;
     338  typedef create_type_input create_type;
     339  typedef PolyInputIterator<create_type> iterator;
    338340  void copy_on_write(){
    339341    if (!ptr.unique()){
     
    362364  PolyBase(const PolyBase&p):ptr(p.ptr){
    363365  }
    364   typedef PolyBase<variant> create_type;
     366
    365367
    366368
     
    371373    return *this;
    372374  }
    373   PolyBase& operator*=(const PolyBase<POLY_VARIANT_RING> & p2){
     375  PolyBase& operator*=(const Poly & p2){
    374376    copy_on_write();
    375377    *ptr *= *p2.ptr;
     
    397399    }*/
    398400
    399   PolyInputIterator<PolyBase> begin(){
    400     return PolyInputIterator<PolyBase>(ptr->p,ptr->r);
    401   }
    402   PolyInputIterator<PolyBase> end(){
    403     return PolyInputIterator<PolyBase>(NULL, ptr->r);
     401  PolyInputIterator<create_type> begin(){
     402    return PolyInputIterator<create_type>(ptr->p,ptr->r);
     403  }
     404  PolyInputIterator<create_type> end(){
     405    return PolyInputIterator<create_type>(NULL, ptr->r);
    404406  }
    405407  ring getRing(){
     
    420422  // friend inline Poly operator*(const Poly& p1, const Number& n);
    421423  //  friend inline template PolyBase<poly_variant variant> operator+(const PolyBase<v>& p1, const PolyBase<v>& p2);
    422   friend PolyBase<variant> operator+<>(const PolyBase<variant>& p1, const PolyBase<variant>& p2);
     424  //friend PolyBase<variant> operator+<>(const PolyBase<variant>& p1, const PolyBase<variant>& p2);
    423425  //friend PolyBase<variant> operator*<>(const PolyBase<variant>& p1, const PolyBase<variant>& p2);
    424426  //friend PolyBase<variant> operator*<>(const PolyBase<variant>& p1, const Number& p2);
    425427};
    426428
    427 class Poly: public PolyBase<POLY_VARIANT_RING>{
     429class Poly: public PolyBase<POLY_VARIANT_RING, Poly>{
    428430 
    429431 public:
    430    typedef PolyInputIterator<Poly> iterator;
    431   Poly(ring r=currRing):PolyBase<POLY_VARIANT_RING> ((poly)NULL,r,0){
    432   }
    433   Poly(int n, ring r=currRing):PolyBase<POLY_VARIANT_RING>(*(new PolyImpl(n,r))){
    434    
    435   }
    436   Poly(const char* c, ring r=currRing):PolyBase<POLY_VARIANT_RING>(c,r){
    437 
    438   }
    439   Poly(const PolyBase<POLY_VARIANT_RING>& p):PolyBase<POLY_VARIANT_RING>(p){
     432
     433  Poly(ring r=currRing):PolyBase<POLY_VARIANT_RING, Poly> ((poly)NULL,r,0){
     434  }
     435  Poly(int n, ring r=currRing):PolyBase<POLY_VARIANT_RING, Poly>(*(new PolyImpl(n,r))){
     436   
     437  }
     438  Poly(const char* c, ring r=currRing):PolyBase<POLY_VARIANT_RING, Poly>(c,r){
     439
     440  }
     441  Poly(const PolyBase<POLY_VARIANT_RING, Poly>& p):PolyBase<POLY_VARIANT_RING, Poly>(p){
    440442  }
    441443 
    442   Poly(const Number& n):PolyBase<POLY_VARIANT_RING>(*(new PolyImpl(n))){
    443    
    444   }
    445   Poly(poly p, ring r):PolyBase<POLY_VARIANT_RING>(p,r){
    446    
    447   }
    448   Poly(poly p, ring r, int):PolyBase<POLY_VARIANT_RING>(p,r,0){
    449   }
    450   Poly(std::vector<int> v, ring r=currRing):PolyBase<POLY_VARIANT_RING>(*(new PolyImpl((poly) NULL,r))){
     444  Poly(const Number& n):PolyBase<POLY_VARIANT_RING, Poly>(*(new PolyImpl(n))){
     445   
     446  }
     447  Poly(poly p, ring r):PolyBase<POLY_VARIANT_RING, Poly>(p,r){
     448   
     449  }
     450  Poly(poly p, ring r, int):PolyBase<POLY_VARIANT_RING, Poly>(p,r,0){
     451  }
     452  Poly(std::vector<int> v, ring r=currRing):PolyBase<POLY_VARIANT_RING, Poly>(*(new PolyImpl((poly) NULL,r))){
    451453    unsigned int i;
    452454    int s=v.size();
     
    460462  /*  Poly& operator+=(const Number& n){
    461463  Poly p2(n);
    462   ((PolyBase<POLY_VARIANT_RING>&) (*this))+=p2;
     464  ((PolyBase<POLY_VARIANT_RING, Poly>&) (*this))+=p2;
    463465  return *this;
    464466  }*/
    465467  Poly& operator+=(const Poly& p ){
    466468
    467     ((PolyBase<POLY_VARIANT_RING>&)*this)+=p;
    468     return *this;
    469   }
    470   Poly& operator+=(const PolyBase<POLY_VARIANT_RING>& p ){
    471 
    472     ((PolyBase<POLY_VARIANT_RING>&)*this)+=p;
    473     return *this;
    474   }
    475   PolyInputIterator<Poly> begin(){
    476     return PolyInputIterator<Poly>(ptr->p,ptr->r);
    477   }
    478   PolyInputIterator<Poly> end(){
    479     return PolyInputIterator<Poly>(NULL, ptr->r);
    480   }
     469    ((PolyBase<POLY_VARIANT_RING, Poly>&)*this)+=p;
     470    return *this;
     471  }
     472  Poly& operator+=(const PolyBase<POLY_VARIANT_RING, Poly>& p ){
     473
     474    ((PolyBase<POLY_VARIANT_RING, Poly>&)*this)+=p;
     475    return *this;
     476  }
     477
    481478};
    482 void foo(Poly p, Number n){
    483     p+=(Poly) n;
    484   }
     479
    485480//typedef Poly PolyBase<POLY_VARIANT_RING>::create_type;
    486 template <poly_variant v> inline PolyBase<v> operator+(const PolyBase<v>& p1, const PolyBase<v>& p2){
     481/*template <poly_variant v, class c> inline PolyBase<v> operator+(const PolyBase<v,c>& p1, const PolyBase<v,c>& p2){
    487482    PolyImpl* res=new PolyImpl(*p1.ptr);
    488483    *res+=*p2.ptr;
    489     return(PolyBase<v>(*res));
    490 }
     484    return(PolyBase<v,c>(*res));
     485    }*/
    491486/*template <poly_variant v> inline PolyBase<v> operator*(const PolyBase<v>& p1, const PolyBase<v>& p2){
    492487    PolyImpl* res=new PolyImpl(*p1.ptr);
     
    494489    return(PolyBase<v> (*res));
    495490    }*/
    496 inline PolyBase<POLY_VARIANT_MODUL> operator*(const PolyBase<POLY_VARIANT_MODUL>& p1, const Number& n){
     491/*template <class c> inline PolyBase<POLY_VARIANT_MODUL> operator*(const PolyBase<POLY_VARIANT_MODUL>& p1, const Number& n){
    497492  PolyBase<POLY_VARIANT_MODUL> erg(p1);
    498493  erg*=n;
    499494  return erg;
    500 }
     495  }*/
    501496Poly operator*(const Poly& p, const Poly& p2){
    502497  Poly erg=p;
Note: See TracChangeset for help on using the changeset viewer.