navit  0.5.3-trunk
quadtree.c File Reference
#include <stdlib.h>
#include <glib.h>
#include "debug.h"
#include "quadtree.h"

Data Structures

struct  quadtree_iter
 
struct  quadtree_iter_node
 

Macros

#define QUADTREE_NODE_CAPACITY   10
 
#define MAX_DOUBLE   9999999
 
#define segments_overlap(x11, x12, x21, x22)   (((x11)<=(x21) && (x21)<=(x12)) || ((x21)<=(x11) && (x11)<=(x22)))
 
#define rects_overlap(x11, y11, x12, y12, x21, y21, x22, y22)   (segments_overlap(x11,x12, x21,x22) && segments_overlap(y11,y12, y21,y22))
 

Functions

static double dist_sq (double x1, double y1, double x2, double y2)
 
struct quadtree_nodequadtree_node_new (struct quadtree_node *parent, double xmin, double xmax, double ymin, double ymax)
 
void quadtree_find_rect_items (struct quadtree_node *this_, double dXMin, double dXMax, double dYMin, double dYMax, GList **out)
 
struct quadtree_itemquadtree_find_nearest_flood (struct quadtree_node *this_, struct quadtree_item *item, double current_max, struct quadtree_node *toSkip)
 
struct quadtree_itemquadtree_find_item (struct quadtree_node *this_, struct quadtree_item *item)
 
struct quadtree_nodequadtree_find_containing_node (struct quadtree_node *root, struct quadtree_item *item)
 
int quadtree_delete_item (struct quadtree_node *root, struct quadtree_item *item)
 
struct quadtree_itemquadtree_find_nearest (struct quadtree_node *this_, struct quadtree_item *item)
 
void quadtree_node_drop_garbage (struct quadtree_node *node, struct quadtree_iter *iter)
 Free space occupied by deleted unreferenced items. More...
 
void quadtree_add (struct quadtree_node *this_, struct quadtree_item *item, struct quadtree_iter *iter)
 Add new node to quadtree. More...
 
void quadtree_split (struct quadtree_node *this_)
 
void quadtree_destroy (struct quadtree_node *this_)
 
struct quadtree_iterquadtree_query (struct quadtree_node *this_, double dXMin, double dXMax, double dYMin, double dYMax, void(*item_free)(void *context, struct quadtree_item *qitem), void *item_free_context)
 
void quadtree_query_free (struct quadtree_iter *iter)
 
void quadtree_item_delete (struct quadtree_iter *iter)
 
struct quadtree_itemquadtree_item_next (struct quadtree_iter *iter)
 

Macro Definition Documentation

◆ MAX_DOUBLE

#define MAX_DOUBLE   9999999

Referenced by quadtree_find_nearest().

◆ QUADTREE_NODE_CAPACITY

#define QUADTREE_NODE_CAPACITY   10

Navit, a modular navigation system. Copyright (C) 2005-2011 Navit Team

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Referenced by quadtree_add().

◆ rects_overlap

#define rects_overlap (   x11,
  y11,
  x12,
  y12,
  x21,
  y21,
  x22,
  y22 
)    (segments_overlap(x11,x12, x21,x22) && segments_overlap(y11,y12, y21,y22))

Referenced by quadtree_item_next().

◆ segments_overlap

#define segments_overlap (   x11,
  x12,
  x21,
  x22 
)    (((x11)<=(x21) && (x21)<=(x12)) || ((x21)<=(x11) && (x11)<=(x22)))

Function Documentation

◆ dist_sq()

static double dist_sq ( double  x1,
double  y1,
double  x2,
double  y2 
)
static

◆ quadtree_add()

void quadtree_add ( struct quadtree_node this_,
struct quadtree_item item,
struct quadtree_iter iter 
)

◆ quadtree_delete_item()

int quadtree_delete_item ( struct quadtree_node root,
struct quadtree_item item 
)

◆ quadtree_destroy()

void quadtree_destroy ( struct quadtree_node this_)

◆ quadtree_find_containing_node()

◆ quadtree_find_item()

◆ quadtree_find_nearest()

◆ quadtree_find_nearest_flood()

◆ quadtree_find_rect_items()

◆ quadtree_item_delete()

void quadtree_item_delete ( struct quadtree_iter iter)

◆ quadtree_item_next()

◆ quadtree_node_drop_garbage()

void quadtree_node_drop_garbage ( struct quadtree_node node,
struct quadtree_iter iter 
)

Free space occupied by deleted unreferenced items.

Parameters
nodepointer to the quadtree node
iterQuadtree iteration context.
Returns
nothing

References dbg, quadtree_item::deleted, quadtree_iter::item_free, quadtree_iter::item_free_context, quadtree_node::items, lvl_debug, quadtree_node::node_num, and quadtree_item::ref_count.

Referenced by quadtree_add(), and quadtree_item_next().

◆ quadtree_node_new()

◆ quadtree_query()

◆ quadtree_query_free()

void quadtree_query_free ( struct quadtree_iter iter)

◆ quadtree_split()