… | |
… | |
10 | typedef double *Key; |
10 | typedef double *Key; |
11 | |
11 | |
12 | static double * |
12 | static double * |
13 | sv2c(SV *sv, int ndims) |
13 | sv2c(SV *sv, int ndims) |
14 | { |
14 | { |
15 | if (!SvROK (sv) && SvTYPE (SvRV (sv)) != SVt_PVAV) |
15 | if (!SvROK (sv) || SvTYPE (SvRV (sv)) != SVt_PVAV) |
16 | croak ("Tree::M: key must be array references"); |
16 | croak ("Tree::M: key must be array reference"); |
17 | |
17 | |
18 | AV *av = (AV *)SvRV (sv); |
18 | AV *av = (AV *)SvRV (sv); |
19 | |
19 | |
20 | if (av_len (av) != ndims -1) |
20 | if (av_len (av) != ndims -1) |
21 | croak ("Tree::M: illegal key, expected %d elements, found %d", |
21 | croak ("Tree::M: illegal key, expected %d elements, found %d", |
… | |
… | |
41 | return newRV_noinc ((SV *)av); |
41 | return newRV_noinc ((SV *)av); |
42 | } |
42 | } |
43 | |
43 | |
44 | static AV *searchres; |
44 | static AV *searchres; |
45 | |
45 | |
46 | void add_result(double distance, int data, double *k, int ndims) |
46 | void add_result(int data, double *k, int ndims) |
47 | { |
47 | { |
48 | AV *r = newAV (); |
48 | AV *r = newAV (); |
49 | |
49 | |
50 | av_push (r, newSVnv (distance)); |
50 | av_push (r, c2sv (k, ndims)); |
51 | av_push (r, newSViv (data)); |
51 | av_push (r, newSViv (data)); |
52 | av_push (r, c2sv (k, ndims)); |
|
|
53 | |
52 | |
54 | av_push (searchres, newRV_noinc ((SV *)r)); |
53 | av_push (searchres, newRV_noinc ((SV *)r)); |
55 | } |
54 | } |
56 | |
55 | |
57 | MODULE = Tree::M PACKAGE = Tree::M::MT |
56 | MODULE = Tree::M PACKAGE = Tree::M |
58 | |
57 | |
59 | PROTOTYPES: ENABLE |
58 | PROTOTYPES: ENABLE |
60 | |
59 | |
61 | PMT * |
60 | PMT * |
62 | new(class, ndims, min = 0.0, max = 255.0, steps = 65536.0) |
61 | _new(class, ndims, min = 0.0, max = 255.0, steps = 256.0, pagesize = 4096) |
63 | int ndims |
62 | int ndims |
64 | double min |
63 | double min |
65 | double max |
64 | double max |
66 | double steps |
65 | double steps |
|
|
66 | unsigned int pagesize |
67 | CODE: |
67 | CODE: |
68 | RETVAL = new PMT(ndims, min, max, steps); |
68 | RETVAL = new PMT(ndims, min, max, steps, pagesize); |
69 | OUTPUT: |
69 | OUTPUT: |
70 | RETVAL |
70 | RETVAL |
71 | |
71 | |
72 | void |
72 | void |
73 | PMT::create(path) |
73 | PMT::create(path) |
… | |
… | |
112 | RETVAL = newRV_noinc ((SV *)searchres); |
112 | RETVAL = newRV_noinc ((SV *)searchres); |
113 | OUTPUT: |
113 | OUTPUT: |
114 | RETVAL |
114 | RETVAL |
115 | |
115 | |
116 | void |
116 | void |
|
|
117 | PMT::sync() |
|
|
118 | |
|
|
119 | int |
|
|
120 | PMT::maxlevel() |
|
|
121 | |
|
|
122 | void |
117 | PMT::DESTROY() |
123 | PMT::DESTROY() |
118 | |
124 | |