Geo-Hash-XS
view release on metacpan or search on metacpan
xs/geohash.xs view on Meta::CPAN
void
decode_to_interval(self, hash)
SV *self;
char *hash;
PREINIT:
NV lat_min = 0, lat_max = 0, lon_min = 0, lon_max = 0;
STRLEN len = strlen(hash);
AV *lat_range = (AV *)sv_2mortal((SV *)newAV());
AV *lon_range = (AV *)sv_2mortal((SV *)newAV());
PPCODE:
PERL_UNUSED_VAR(self);
decode_to_interval(hash, len, &lat_min, &lat_max, &lon_min, &lon_max);
av_push(lat_range, newSVnv(lat_max));
av_push(lat_range, newSVnv(lat_min));
av_push(lon_range, newSVnv(lon_max));
av_push(lon_range, newSVnv(lon_min));
XPUSHs(sv_2mortal(newRV_inc((SV *)lat_range)));
XPUSHs(sv_2mortal(newRV_inc((SV *)lon_range)));
void
decode(self, hash)
SV *self;
char *hash;
PREINIT:
NV lat = 0, lon = 0;
STRLEN len = strlen(hash);
PPCODE:
PERL_UNUSED_VAR(self);
decode(hash, len, &lat, &lon);
mXPUSHn(lat);
mXPUSHn(lon);
IV
precision(self, lat, lon)
SV *self
SV *lat
SV *lon;
xs/geohash.xs view on Meta::CPAN
void
neighbors(self, hash, around = 1, offset = 0)
SV *self;
char *hash;
int around;
int offset;
PREINIT:
int i;
int nsize;
char **list;
PPCODE:
PERL_UNUSED_VAR(self);
neighbors(hash, strlen(hash), around, offset, &list, &nsize);
for( i = 0; i < nsize; i++ ) {
mXPUSHp( list[i], strlen(list[i]) );
}
for( i = 0; i < nsize; i++ ) {
Safefree(list[i]);
}
Safefree(list);
( run in 1.482 second using v1.01-cache-2.11-cpan-5511b514fd6 )