Algorithm-QuadTree-XS

 view release on metacpan or  search on metacpan

qtbase.h  view on Meta::CPAN

#ifndef QTBASE_H
#define QTBASE_H

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"

typedef struct QuadTreeNode QuadTreeNode;
typedef struct QuadTreeRootNode QuadTreeRootNode;
typedef struct DynArr DynArr;
typedef enum ShapeType ShapeType;
typedef struct Shape Shape;

struct QuadTreeNode {
	QuadTreeNode *children;
	QuadTreeNode *parent;
	DynArr *values;
	double xmin, ymin, xmax, ymax;
	bool has_objects;
};

struct QuadTreeRootNode {
	QuadTreeNode *node;
	HV *backref;
	DynArr *objects;
};

struct DynArr {
	void **ptr;
	unsigned int count;
	unsigned int max_size;
};

enum ShapeType {
	shape_rectangle,
	shape_circle
};

struct Shape {
	ShapeType type;
	double x;
	double y;
	double x2;
	double y2;
	double radius_sq;
};


typedef enum ShapeType ShapeType;

Shape* create_shape();
void destroy_shape(Shape *s);

DynArr* create_array();
void destroy_array(DynArr* arr);
void push_array(DynArr *arr, void *ptr);

QuadTreeNode* create_nodes(int count, QuadTreeNode *parent);
void destroy_node(QuadTreeNode *node);
QuadTreeRootNode* create_root();

void adopt_object (QuadTreeRootNode *root, SV *value, Shape *s);
void disown_object (QuadTreeRootNode *root, SV *value);

void node_add_level(QuadTreeNode* node, double xmin, double ymin, double xmax, double ymax, int depth);
void find_nodes(QuadTreeNode *node, HV *ret, Shape *param);
bool fill_nodes(QuadTreeNode *node, SV *value, Shape *param);
void delete_nodes(QuadTreeNode *node, SV *value, Shape *param);
void clear_tree(QuadTreeRootNode *root);

/* XS helpers */

SV* get_hash_key (HV* hash, const char* key);
QuadTreeRootNode* get_root_from_perl(SV *self);
AV* get_hash_values (HV* hash);

#endif



( run in 1.263 second using v1.01-cache-2.11-cpan-e1769b4cff6 )