fixed a bug in the construction visitor (tried to access an event that was freed)

This commit is contained in:
Baruch Zukerman 2006-06-27 13:50:59 +00:00
parent 0134eb0995
commit 35d98052ba
2 changed files with 20 additions and 14 deletions

View File

@ -485,9 +485,6 @@ public:
_init_endpoint(curve, MAX_END, m_subCurves+index);
_init_endpoint(curve, MIN_END, m_subCurves+index);
/*(m_subCurves+index)->set_left_event(left_event);
(m_subCurves+index)->set_right_event(right_event);*/
return;
}
@ -901,7 +898,7 @@ protected:
// We have a new event
Point_2 pt = Point_2();
e = allocate_event(pt, type);
_set_attributes_of_infinity(e, x_inf, y_inf, ind);
_set_attributes_of_infinity(e, x_inf, y_inf);
if(sc != NULL)
{
if(type == Base_event::LEFT_END)
@ -922,7 +919,7 @@ protected:
// The event already exsits
e = *(pair_res.first);
e->set_attribute(type);
_set_attributes_of_infinity(e, x_inf, y_inf, ind);
_set_attributes_of_infinity(e, x_inf, y_inf);
if(sc != NULL)
{
if(type == Base_event::LEFT_END)
@ -938,14 +935,12 @@ protected:
}
}
return (std::make_pair(e, !exist));
}
void _set_attributes_of_infinity(Event* e,
Infinity_type x_inf,
Infinity_type y_inf,
Curve_end ind)
Infinity_type y_inf)
{
if(x_inf == MINUS_INFINITY)
e->set_minus_infinite_x();

View File

@ -96,10 +96,6 @@ protected:
Event* m_prev_minus_inf_x_event;
Event* m_prev_plus_inf_y_event;
private:
Arr_construction_visitor (const Self& );
@ -193,7 +189,10 @@ public:
}
if(event->get_num_right_curves() == 0)
{
set_prev_inf_event_to_null(event);
return true;
}
event->get_is_curve_in_arr().resize(event->get_num_right_curves(),false);
for(SubCurveIter itr = event->right_curves_begin();
@ -244,6 +243,8 @@ public:
CGAL_assertion(prev->face() == hhandle->face());
bool dummy;
res = this->insert_at_vertices(cv,hhandle,prev,sc, dummy);
res = res->twin();
}
@ -269,6 +270,7 @@ public:
if(lastEvent->dec_right_curves_counter() == 0)
{
set_prev_inf_event_to_null(lastEvent);
(this ->deallocate_event(lastEvent));
}
@ -479,7 +481,7 @@ public:
case MINUS_INFINITY:
m_arr_access.split_fictitious_edge(m_lh, v_at_inf);
event->set_halfedge_handle(m_lh);
if(m_prev_minus_inf_x_event != NULL)
if(m_prev_minus_inf_x_event)
m_prev_minus_inf_x_event->set_halfedge_handle(m_lh->next());
m_prev_minus_inf_x_event = event;
return;
@ -564,6 +566,15 @@ private:
m_sc_he_table[i] = he;
}
void set_prev_inf_event_to_null(Event* e)
{
if(e == m_prev_minus_inf_x_event)
m_prev_minus_inf_x_event = NULL;
else
if(e == m_prev_plus_inf_y_event)
m_prev_plus_inf_y_event = NULL;
}
};
CGAL_END_NAMESPACE