summaryrefslogtreecommitdiff
path: root/sql/gcalc_tools.cc
diff options
context:
space:
mode:
authorAlexey Botchkov <holyfoot@askmonty.org>2011-10-14 16:10:55 +0500
committerAlexey Botchkov <holyfoot@askmonty.org>2011-10-14 16:10:55 +0500
commit8432284d4fe276db8fe99f434b98e3631e707146 (patch)
tree1d3e04875c1216df898f3fb575475091c6cb0bc6 /sql/gcalc_tools.cc
parentbf2deb5ed30b03e9cada6162d8aa837115dce4cc (diff)
downloadmariadb-git-8432284d4fe276db8fe99f434b98e3631e707146.tar.gz
GIS code.
Forward calculations introduced. per-file comments: sql/gcalc_slicescan.cc sql/gcalc_slicescan.h sql/gcalc_tools.cc sql/gcalc_tools.h sql/item_geofunc.cc
Diffstat (limited to 'sql/gcalc_tools.cc')
-rw-r--r--sql/gcalc_tools.cc48
1 files changed, 28 insertions, 20 deletions
diff --git a/sql/gcalc_tools.cc b/sql/gcalc_tools.cc
index eabc42a6c51..f6203ba552f 100644
--- a/sql/gcalc_tools.cc
+++ b/sql/gcalc_tools.cc
@@ -192,7 +192,7 @@ int Gcalc_function::count_internal(const char *cur_func, uint set_type,
result= result & !next_res;
break;
default:
- DBUG_ASSERT(FALSE);
+ GCALC_DBUG_ASSERT(FALSE);
};
}
@@ -262,7 +262,8 @@ void Gcalc_function::reset()
int Gcalc_function::check_function(Gcalc_scan_iterator &scan_it)
{
- const Gcalc_scan_iterator::point *eq_start, *cur_eq, *events;
+ const Gcalc_scan_iterator::point *eq_start, *cur_eq;
+ const Gcalc_scan_iterator::event_point *events;
GCALC_DBUG_ENTER("Gcalc_function::check_function");
while (scan_it.more_points())
@@ -502,7 +503,7 @@ int Gcalc_result_receiver::complete_shape()
}
else
{
- DBUG_ASSERT(cur_shape != Gcalc_function::shape_point);
+ GCALC_DBUG_ASSERT(cur_shape != Gcalc_function::shape_point);
if (cur_shape == Gcalc_function::shape_hole)
{
shape_area+= prev_x*first_y - prev_y*first_x;
@@ -534,7 +535,7 @@ do_complete:
if (!n_shapes++)
{
- DBUG_ASSERT(cur_shape != Gcalc_function::shape_hole);
+ GCALC_DBUG_ASSERT(cur_shape != Gcalc_function::shape_hole);
common_shapetype= cur_shape;
}
else if (cur_shape == Gcalc_function::shape_hole)
@@ -587,7 +588,7 @@ int Gcalc_result_receiver::get_result_typeid()
return (n_shapes == 1) ? Geometry::wkb_linestring :
Geometry::wkb_multilinestring;
default:
- DBUG_ASSERT(0);
+ GCALC_DBUG_ASSERT(0);
}
return 0;
}
@@ -648,6 +649,7 @@ Gcalc_operation_reducer(Gcalc_function *fn, modes mode, size_t blk_size) :
}
+#ifdef TMP_BLOCK
void Gcalc_operation_reducer::res_point::set(const Gcalc_scan_iterator *si)
{
if ((intersection_point= si->intersection_step()))
@@ -655,6 +657,12 @@ void Gcalc_operation_reducer::res_point::set(const Gcalc_scan_iterator *si)
else
pi= si->get_cur_pi();
}
+#endif /*TMP_BLOCK*/
+void Gcalc_operation_reducer::res_point::set(const Gcalc_scan_iterator *si)
+{
+ intersection_point= si->intersection_step();
+ pi= si->get_cur_pi();
+}
Gcalc_operation_reducer::res_point *
@@ -726,7 +734,7 @@ int Gcalc_operation_reducer::continue_range(active_thread *t,
inline int Gcalc_operation_reducer::continue_i_range(active_thread *t,
- const Gcalc_heap::Intersection_info *ii)
+ const Gcalc_heap::Info *ii)
{
res_point *rp= add_res_point(t->rp->type);
GCALC_DBUG_ENTER("Gcalc_operation_reducer::continue_i_range");
@@ -736,7 +744,7 @@ inline int Gcalc_operation_reducer::continue_i_range(active_thread *t,
rp->down= t->rp;
t->rp->up= rp;
rp->intersection_point= true;
- rp->ii= ii;
+ rp->pi= ii;
t->rp= rp;
GCALC_DBUG_RETURN(0);
}
@@ -746,7 +754,7 @@ int Gcalc_operation_reducer::end_couple(active_thread *t0, active_thread *t1,
{
res_point *rp0, *rp1;
GCALC_DBUG_ENTER("Gcalc_operation_reducer::end_couple");
- DBUG_ASSERT(t0->rp->type == t1->rp->type);
+ GCALC_DBUG_ASSERT(t0->rp->type == t1->rp->type);
if (!(rp0= add_res_point(t0->rp->type)) ||
!(rp1= add_res_point(t0->rp->type)))
GCALC_DBUG_RETURN(1);
@@ -769,7 +777,7 @@ int Gcalc_operation_reducer::count_slice(Gcalc_scan_iterator *si)
int prev_state= 0;
int sav_prev_state;
active_thread *prev_range= NULL;
- const Gcalc_scan_iterator::point *events;
+ const Gcalc_scan_iterator::event_point *events;
const Gcalc_scan_iterator::point *eq_start;
active_thread **cur_t_hook= &m_first_active_thread;
active_thread **starting_t_hook;
@@ -834,7 +842,7 @@ int Gcalc_operation_reducer::count_slice(Gcalc_scan_iterator *si)
break;
}
default:
- DBUG_ASSERT(0);
+ GCALC_DBUG_ASSERT(0);
}
GCALC_DBUG_RETURN(0);
}
@@ -875,7 +883,7 @@ int Gcalc_operation_reducer::count_slice(Gcalc_scan_iterator *si)
{
if (cur_t->rp->type == Gcalc_function::shape_line)
{
- DBUG_ASSERT(!prev_state);
+ GCALC_DBUG_ASSERT(!prev_state);
add_line(1, cur_t, events);
}
else
@@ -971,7 +979,7 @@ int Gcalc_operation_reducer::count_slice(Gcalc_scan_iterator *si)
{
poly_border *pb1, *pb2;
pb1= m_poly_borders;
- DBUG_ASSERT(m_poly_borders->next);
+ GCALC_DBUG_ASSERT(m_poly_borders->next);
pb2= get_pair_border(pb1);
/* Remove pb1 from the list. The pb2 already removed in get_pair_border. */
@@ -1098,7 +1106,7 @@ int Gcalc_operation_reducer::connect_threads(
if (incoming_a && incoming_b)
{
res_point *rpa, *rpb;
- DBUG_ASSERT(ta->rp->type == tb->rp->type);
+ GCALC_DBUG_ASSERT(ta->rp->type == tb->rp->type);
if (!(rpa= add_res_point(ta->rp->type)) ||
!(rpb= add_res_point(ta->rp->type)))
GCALC_DBUG_RETURN(1);
@@ -1116,7 +1124,7 @@ int Gcalc_operation_reducer::connect_threads(
}
if (!incoming_a)
{
- DBUG_ASSERT(!incoming_b);
+ GCALC_DBUG_ASSERT(!incoming_b);
res_point *rp0, *rp1;
if (!(rp0= add_res_point(s_t)) || !(rp1= add_res_point(s_t)))
@@ -1152,14 +1160,14 @@ int Gcalc_operation_reducer::connect_threads(
}
/* else, if only ta is incoming */
- DBUG_ASSERT(tb != ta);
+ GCALC_DBUG_ASSERT(tb != ta);
tb->rp= ta->rp;
tb->thread_start= ta->thread_start;
if (Gcalc_scan_iterator::point::
cmp_dx_dy(ta->p1, ta->p2, pb->pi, pb->next_pi) != 0)
{
if (si->intersection_step() ?
- continue_i_range(tb, si->get_cur_ii()) :
+ continue_i_range(tb, si->get_cur_pi()) :
continue_range(tb, si->get_cur_pi(), pb->next_pi))
GCALC_DBUG_RETURN(1);
}
@@ -1191,7 +1199,7 @@ int Gcalc_operation_reducer::end_line(active_thread *t,
const Gcalc_scan_iterator *si)
{
GCALC_DBUG_ENTER("Gcalc_operation_reducer::end_line");
- DBUG_ASSERT(t->rp->type == Gcalc_function::shape_line);
+ GCALC_DBUG_ASSERT(t->rp->type == Gcalc_function::shape_line);
res_point *rp= add_res_point(Gcalc_function::shape_line);
if (!rp)
GCALC_DBUG_RETURN(1);
@@ -1237,7 +1245,7 @@ inline int Gcalc_operation_reducer::get_single_result(res_point *res,
if (res->intersection_point)
{
double x, y;
- res->ii->calc_xy(&x, &y);
+ res->pi->calc_xy(&x, &y);
if (storage->single_point(x,y))
GCALC_DBUG_RETURN(1);
}
@@ -1264,7 +1272,7 @@ int Gcalc_operation_reducer::get_result_thread(res_point *cur,
{
if (cur->intersection_point)
{
- cur->ii->calc_xy(&x, &y);
+ cur->pi->calc_xy(&x, &y);
}
else
{
@@ -1368,7 +1376,7 @@ int Gcalc_operation_reducer::get_result(Gcalc_result_receiver *storage)
uint32 insert_position, hole_position, position_shift;
poly_instance *cur_poly;
insert_position= m_result->outer_poly->first_poly_node->poly_position;
- DBUG_ASSERT(insert_position);
+ GCALC_DBUG_ASSERT(insert_position);
hole_position= storage->position();
storage->start_shape(Gcalc_function::shape_hole);
if (get_polygon_result(m_result, storage,