ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Geo-LatLon2Place/LatLon2Place.xs
Revision: 1.1
Committed: Mon Mar 14 02:41:51 2022 UTC (2 years, 2 months ago) by root
Branch: MAIN
CVS Tags: rel-0_01
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #include "EXTERN.h"
2     #include "perl.h"
3     #include "XSUB.h"
4    
5     #include <cdb.h>
6    
7     static struct cdb_make make;
8    
9     MODULE = Geo::LatLon2Place PACKAGE = Geo::LatLon2Place
10    
11     PROTOTYPES: ENABLE
12    
13     int
14     cdb_make_start (int fd)
15     CODE:
16     RETVAL = cdb_make_start (&make, fd);
17     OUTPUT: RETVAL
18    
19     int
20     cdb_make_add (SV *k, SV *v)
21     CODE:
22     {
23     STRLEN klen; const char *kp = SvPVbyte (k, klen);
24     STRLEN vlen; const char *vp = SvPVbyte (v, vlen);
25     RETVAL = cdb_make_add (&make, kp, klen, vp, vlen);
26     }
27     OUTPUT: RETVAL
28    
29     int
30     cdb_make_finish ()
31     CODE:
32     RETVAL = cdb_make_finish (&make);
33     OUTPUT: RETVAL
34    
35     int
36     cdb_init (SV *self, int fd)
37     CODE:
38     sv_upgrade (self, SVt_PV);
39     SvCUR_set (self, sizeof (struct cdb));
40     SvPOK_only (self);
41     RETVAL = cdb_init ((struct cdb *)SvPVX (self), fd);
42     OUTPUT: RETVAL
43    
44     void
45     cdb_free (SV *self)
46     CODE:
47     cdb_free ((struct cdb *)SvPVX (self));
48    
49     SV *
50     cdb_get (SV *self, SV *key)
51     CODE:
52     {
53     unsigned int p;
54     STRLEN l;
55     const char *s = SvPVbyte (key, l);
56     struct cdb *db = (struct cdb *)SvPVX (self);
57    
58     if (cdb_find (db, s, l) <= 0)
59     XSRETURN_UNDEF;
60    
61     p = cdb_datapos (db);
62     l = cdb_datalen (db);
63     RETVAL = newSVpvn (cdb_get (db, l, p), l);
64     }
65     OUTPUT: RETVAL
66