ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Tree-M/M.xs
Revision: 1.2
Committed: Sun May 6 01:35:15 2001 UTC (23 years ago) by root
Branch: MAIN
Changes since 1.1: +6 -4 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 extern "C" {
2 #include "EXTERN.h"
3 #include "perl.h"
4 #include "XSUB.h"
5 }
6
7 #include "PMT.h"
8
9 typedef PMT Tree__M__MT;
10 typedef double *Key;
11
12 static double *
13 sv2c(SV *sv, int ndims)
14 {
15 if (!SvROK (sv) || SvTYPE (SvRV (sv)) != SVt_PVAV)
16 croak ("Tree::M: key must be array reference");
17
18 AV *av = (AV *)SvRV (sv);
19
20 if (av_len (av) != ndims -1)
21 croak ("Tree::M: illegal key, expected %d elements, found %d",
22 ndims, av_len (av) + 1);
23
24 double *k = new double [ndims];
25
26 for (int i = ndims; i--; )
27 k[i] = SvNV (*av_fetch (av, i, 1));
28
29 return k;
30 }
31
32 static SV *
33 c2sv(double *k, int ndims)
34 {
35 AV *av = newAV ();
36
37 av_extend (av, ndims);
38 for (int i = ndims; i--; )
39 av_store (av, i, newSVnv (k[i]));
40
41 return newRV_noinc ((SV *)av);
42 }
43
44 static AV *searchres;
45
46 void add_result(int data, double *k, int ndims)
47 {
48 AV *r = newAV ();
49
50 av_push (r, newSViv (data));
51 av_push (r, c2sv (k, ndims));
52
53 av_push (searchres, newRV_noinc ((SV *)r));
54 }
55
56 MODULE = Tree::M PACKAGE = Tree::M::MT
57
58 PROTOTYPES: ENABLE
59
60 PMT *
61 new(class, ndims, min = 0.0, max = 255.0, steps = 65536.0)
62 int ndims
63 double min
64 double max
65 double steps
66 CODE:
67 RETVAL = new PMT(ndims, min, max, steps);
68 OUTPUT:
69 RETVAL
70
71 void
72 PMT::create(path)
73 char * path
74
75 void
76 PMT::open(path)
77 char * path
78
79 void
80 PMT::insert(k, idx = 0)
81 SV * k
82 int idx
83 C_ARGS:
84 sv2c(k, THIS->ndims), idx
85
86 double
87 PMT::distance(k1, k2)
88 SV * k1
89 SV * k2
90 C_ARGS:
91 sv2c(k1, THIS->ndims), sv2c(k2, THIS->ndims)
92
93 SV *
94 PMT::range(k, r)
95 SV * k
96 double r
97 CODE:
98 searchres = newAV ();
99 THIS->range(sv2c(k, THIS->ndims), r);
100 RETVAL = newRV_noinc ((SV *)searchres);
101 OUTPUT:
102 RETVAL
103
104 SV *
105 PMT::top(k, n)
106 SV * k
107 int n
108 CODE:
109 searchres = newAV ();
110 THIS->top(sv2c(k, THIS->ndims), n);
111 RETVAL = newRV_noinc ((SV *)searchres);
112 OUTPUT:
113 RETVAL
114
115 int
116 PMT::maxlevel()
117
118 void
119 PMT::DESTROY()
120