Changeset c1e4cd in git
- Timestamp:
- Aug 17, 2005, 11:42:15 AM (19 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 82f499751785a3a81044266a491b4ef627535172
- Parents:
- 650d1417bb87b3339aa5ce123bb3ca01e61f181f
- Location:
- kernel
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/Number.h
r650d14 rc1e4cd 10 10 POLY_VARIANT_MODUL 11 11 }; 12 template<poly_variant > class PolyBase;13 12 template<poly_variant,class> class PolyBase; 13 class Poly; 14 14 class Number{ 15 15 … … 30 30 friend Number operator*(int n1, const Number& n2); 31 31 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 34 35 friend class PolyImpl; 35 36 Number& operator=(const Number& n2){ -
kernel/Poly.h
r650d14 rc1e4cd 1 //$Id: Poly.h,v 1.1 2 2005-08-17 09:14:34bricken Exp $1 //$Id: Poly.h,v 1.13 2005-08-17 09:42:15 bricken Exp $ 2 2 3 3 … … 23 23 //PolyImpl is a 08/15 poly wrapper 24 24 //Poly wraps around PolyImpl with reference counting using boost 25 25 26 class 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>; 28 29 friend class Poly; 29 30 //friend class Number; … … 328 329 }; 329 330 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); 332 333 //template <poly_variant v> inline PolyBase<v> operator*(const PolyBase<v>& p1, const PolyBase<v>& p2); 333 334 //template <poly_variant v>inline PolyBase<v> operator*(const PolyBase<v>& p1, const Number& n); 334 template<poly_variant variant > class PolyBase{335 template<poly_variant variant, class create_type_input> class PolyBase{ 335 336 336 337 public: 337 typedef PolyInputIterator<PolyBase> iterator; 338 typedef create_type_input create_type; 339 typedef PolyInputIterator<create_type> iterator; 338 340 void copy_on_write(){ 339 341 if (!ptr.unique()){ … … 362 364 PolyBase(const PolyBase&p):ptr(p.ptr){ 363 365 } 364 typedef PolyBase<variant> create_type; 366 365 367 366 368 … … 371 373 return *this; 372 374 } 373 PolyBase& operator*=(const Poly Base<POLY_VARIANT_RING>& p2){375 PolyBase& operator*=(const Poly & p2){ 374 376 copy_on_write(); 375 377 *ptr *= *p2.ptr; … … 397 399 }*/ 398 400 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); 404 406 } 405 407 ring getRing(){ … … 420 422 // friend inline Poly operator*(const Poly& p1, const Number& n); 421 423 // 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); 423 425 //friend PolyBase<variant> operator*<>(const PolyBase<variant>& p1, const PolyBase<variant>& p2); 424 426 //friend PolyBase<variant> operator*<>(const PolyBase<variant>& p1, const Number& p2); 425 427 }; 426 428 427 class Poly: public PolyBase<POLY_VARIANT_RING >{429 class Poly: public PolyBase<POLY_VARIANT_RING, Poly>{ 428 430 429 431 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){ 440 442 } 441 443 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))){ 451 453 unsigned int i; 452 454 int s=v.size(); … … 460 462 /* Poly& operator+=(const Number& n){ 461 463 Poly p2(n); 462 ((PolyBase<POLY_VARIANT_RING >&) (*this))+=p2;464 ((PolyBase<POLY_VARIANT_RING, Poly>&) (*this))+=p2; 463 465 return *this; 464 466 }*/ 465 467 Poly& operator+=(const Poly& p ){ 466 468 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 481 478 }; 482 void foo(Poly p, Number n){ 483 p+=(Poly) n; 484 } 479 485 480 //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){ 487 482 PolyImpl* res=new PolyImpl(*p1.ptr); 488 483 *res+=*p2.ptr; 489 return(PolyBase<v >(*res));490 } 484 return(PolyBase<v,c>(*res)); 485 }*/ 491 486 /*template <poly_variant v> inline PolyBase<v> operator*(const PolyBase<v>& p1, const PolyBase<v>& p2){ 492 487 PolyImpl* res=new PolyImpl(*p1.ptr); … … 494 489 return(PolyBase<v> (*res)); 495 490 }*/ 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){ 497 492 PolyBase<POLY_VARIANT_MODUL> erg(p1); 498 493 erg*=n; 499 494 return erg; 500 } 495 }*/ 501 496 Poly operator*(const Poly& p, const Poly& p2){ 502 497 Poly erg=p;
Note: See TracChangeset
for help on using the changeset viewer.