1. Arranging the constructors.

2. Adding a copy constructor and an assignment operator.
This commit is contained in:
Ester Ezra 2002-01-28 13:51:38 +00:00
parent cde159c5ec
commit 1049314a85
1 changed files with 67 additions and 37 deletions

View File

@ -63,7 +63,7 @@ public:
Map_overlay() : sub_division1(0), sub_division2(0),
ovl_change_notf(new Change_notification),
ovl(new Map_ovl_sweep),
ovl_alg(new Map_ovl_sweep),
use_delete_notf(true),
use_delete_ovl(true) {
@ -77,7 +77,7 @@ public:
Map_overlay (const Arrangement &arr) : arr_(arr),
sub_division1(0), sub_division2(0),
ovl_change_notf(new Change_notification),
ovl(new Map_ovl_sweep),
ovl_alg(new Map_ovl_sweep),
use_delete_notf(true),
use_delete_ovl(true)
{
@ -95,7 +95,7 @@ public:
Map_overlay (const Arrangement &arr,
Change_notification* pmwx_change_notf) :
arr_(arr), sub_division1(0), sub_division2(0),
ovl_change_notf(pmwx_change_notf), ovl(new Map_ovl_sweep),
ovl_change_notf(pmwx_change_notf), ovl_alg(new Map_ovl_sweep),
use_delete_notf(false), use_delete_ovl(true)
{
// here we can't use copy Constructor since we have to update arr attributres due to the notifier.
@ -108,21 +108,21 @@ public:
Map_overlay (const Arrangement &arr,
Map_ovl_base *ovl_ptr) :
arr_(arr), sub_division1(0), sub_division2(0),
ovl_change_notf(new Change_notification), ovl(ovl_ptr),
ovl_change_notf(new Change_notification), ovl_alg(ovl_ptr),
use_delete_notf(true), use_delete_ovl(false) {}
Map_overlay (const Arrangement &arr,
Change_notification* pmwx_change_notf,
Map_ovl_base *ovl_ptr) :
arr_(arr), sub_division1(0), sub_division2(0),
ovl_change_notf(pmwx_change_notf), ovl(ovl_ptr),
ovl_change_notf(pmwx_change_notf), ovl_alg(ovl_ptr),
use_delete_notf(false), use_delete_ovl(false) {}
Map_overlay (const Self &ovl1, const Self &ovl2) :
sub_division1(&ovl1), sub_division2(&ovl2),
ovl_change_notf(new Change_notification(&(ovl1.subdivision()),
&(ovl2.subdivision()) )),
ovl(new Map_ovl_sweep),
ovl_alg(new Map_ovl_sweep),
use_delete_notf(true), use_delete_ovl(true)
{
//ovl = new Map_ovl_sweep;
@ -134,7 +134,7 @@ public:
//int c_sweep_t;
//c_sweep_t = clock();
ovl->map_overlay(ovl1.subdivision(), ovl2.subdivision(), ovl_change_notf, arr_);
ovl_alg->map_overlay(ovl1.subdivision(), ovl2.subdivision(), ovl_change_notf, arr_);
//c_sweep_t = clock() - c_sweep_t;
//std::cout<<"The time required by sweep line : "<< (double) c_sweep_t / (double) CLOCKS_PER_SEC<<std::endl;
@ -148,7 +148,7 @@ public:
sub_division1(&ovl1), sub_division2(&ovl2),
ovl_change_notf(new Change_notification(&(ovl1.subdivision()),
&(ovl2.subdivision()) )),
ovl(new Map_ovl_sweep),
ovl_alg(new Map_ovl_sweep),
use_delete_notf(true), use_delete_ovl(true)
{
//ovl = new Map_ovl_sweep;
@ -160,7 +160,7 @@ public:
int c_sweep_t;
c_sweep_t = clock();
ovl->map_overlay(ovl1.subdivision(), ovl2.subdivision(), ovl_change_notf, arr_);
ovl_alg->map_overlay(ovl1.subdivision(), ovl2.subdivision(), ovl_change_notf, arr_);
c_sweep_t = clock() - c_sweep_t;
std::cout<<"The time required by sweep line : "<< (double) c_sweep_t / (double) CLOCKS_PER_SEC<<std::endl;
@ -170,57 +170,87 @@ public:
Map_overlay (const Self &ovl1,
const Self &ovl2,
Change_notification* pmwx_change_notf)
: ovl_change_notf(pmwx_change_notf)
Change_notification* pmwx_change_notf) :
sub_division1(&ovl1), sub_division2(&ovl2),
ovl_change_notf(pmwx_change_notf), ovl_alg(new Map_ovl_sweep),
use_delete_notf(false), use_delete_ovl(true)
{
ovl = new Map_ovl_sweep;
use_delete_ovl = true;
use_delete_notf = false;
// ovl_alg = new Map_ovl_sweep;
//use_delete_ovl = true;
//use_delete_notf = false;
ovl->map_overlay(ovl1.subdivision(), ovl2.subdivision(), ovl_change_notf, arr_);
ovl_alg->map_overlay(ovl1.subdivision(), ovl2.subdivision(), ovl_change_notf, arr_);
sub_division1 = (Self *) &ovl1;
sub_division2 = (Self *) &ovl2;
//sub_division1 = (Self *) &ovl1;
//sub_division2 = (Self *) &ovl2;
}
Map_overlay (const Self &ovl1, const Self &ovl2, Map_ovl_base *ovl_ptr)
: ovl(ovl_ptr)
Map_overlay (const Self &ovl1, const Self &ovl2, Map_ovl_base *ovl_ptr) :
sub_division1(&ovl1), sub_division2(&ovl2),
ovl_change_notf(new Change_notification(&(ovl1.subdivision()),
&(ovl2.subdivision()) )),
ovl_alg(ovl_ptr),
use_delete_notf(true), use_delete_ovl(false)
{
ovl_change_notf = new Change_notification( &(ovl1.subdivision()),
&(ovl2.subdivision()) );
use_delete_notf = true;
use_delete_ovl = false;
//ovl_change_notf = new Change_notification( &(ovl1.subdivision()),
// &(ovl2.subdivision()) );
//use_delete_notf = true;
//use_delete_ovl = false;
ovl->map_overlay(ovl1.subdivision(), ovl2.subdivision(), ovl_change_notf, arr_);
ovl_alg->map_overlay(ovl1.subdivision(), ovl2.subdivision(), ovl_change_notf, arr_);
sub_division1 = (Self *) &ovl1;
sub_division2 = (Self *) &ovl2;
//sub_division1 = (Self *) &ovl1;
//sub_division2 = (Self *) &ovl2;
}
Map_overlay (const Self &ovl1,
const Self &ovl2,
Change_notification* pmwx_change_notf,
Map_ovl_base *ovl_ptr)
: ovl_change_notf(pmwx_change_notf) , ovl(ovl_ptr)
Map_ovl_base *ovl_ptr) :
sub_division1(&ovl1), sub_division2(&ovl2),
ovl_change_notf(pmwx_change_notf), ovl_alg(ovl_ptr),
use_delete_notf(false), use_delete_ovl(false)
{
use_delete_notf = false;
use_delete_ovl = false;
//use_delete_notf = false;
//use_delete_ovl = false;
ovl->map_overlay(ovl1.subdivision(), ovl2.subdivision(), ovl_change_notf, arr_);
ovl_alg->map_overlay(ovl1.subdivision(), ovl2.subdivision(), ovl_change_notf, arr_);
sub_division1 = (Self *) &ovl1;
sub_division2 = (Self *) &ovl2;
//sub_division1 = (Self *) &ovl1;
//sub_division2 = (Self *) &ovl2;
}
virtual ~Map_overlay()
{
if (use_delete_notf) delete ovl_change_notf;
if (use_delete_ovl) delete ovl;
if (use_delete_ovl) delete ovl_alg;
}
// ------------------- Add a copy contr'
// -------------------- Add assignement operator.
// ------------------- Copy contr'
Map_overlay (const Self &ovl) :
arr_(ovl.arr_),
sub_division1(ovl.sub_division1),
sub_division2(ovl.sub_division2),
ovl_change_notf(new Change_notification(ovl.ovl_change_notf)),
ovl_alg(ovl.ovl_alg),
use_delete_notf(true), use_delete_ovl(false) {}
// -------------------- Assignement operator.
const Self& operator=(const Self& ovl)
{
arr_ = ovl.arr_;
sub_division1 = ovl.sub_division1;
sub_division2 = ovl.sub_division2;
// The notifier and ovl algorithm remain their initial values obtained
// in the defualt constructor (or other constructor taken for *this).
//ovl_change_notf(new Change_notification(ovl.ovl_change_notf));
//ovl_alg = ovl.ovl_alg;
//use_delete_notf=true; use_delete_ovl=false;
return *this;
}
void delete_subtree() {
arr_ = Map_overlay(arr_);
@ -309,7 +339,7 @@ private:
Arrangement arr_;
const Self *sub_division1, *sub_division2;
Change_notification *ovl_change_notf;
Map_ovl_base *ovl;
Map_ovl_base *ovl_alg;
bool use_delete_notf;
bool use_delete_ovl;
};