This file is indexed.

/usr/lib/perl5/Geo/Distance/XS.pm is in libgeo-distance-xs-perl 0.11-1build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
package Geo::Distance::XS;

use strict;
use warnings;

use Carp qw(croak);
use Geo::Distance;
use XSLoader;

our $VERSION    = '0.11';
our $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;

XSLoader::load(__PACKAGE__, $XS_VERSION);

my ($orig_distance_sub, $orig_formula_sub);
BEGIN {
    $orig_distance_sub = \&Geo::Distance::distance;
    $orig_formula_sub  = \&Geo::Distance::formula;
}

sub import {
    no warnings qw(redefine);
    no strict qw(refs);

    my %formulas = map { $_ => undef } @{__PACKAGE__.'::FORMULAS'};

    *Geo::Distance::distance = \&{__PACKAGE__.'::distance'};
    *Geo::Distance::formula = sub {
        my $self = shift;
        if (@_) {
            my $formula = shift;
            croak "Invalid formula: $formula"
                unless exists $formulas{$formula};
            $self->{formula} = $formula;
        }
        return $self->{formula};
    };
}

# Fall back to pure perl after calling 'no Geo::Distance::XS'.
sub unimport {
    no warnings qw(redefine);

    *Geo::Distance::formula  = $orig_formula_sub;
    *Geo::Distance::distance = $orig_distance_sub;
}


1;

__END__

=head1 NAME

Geo::Distance::XS - speed up Geo::Distance

=head1 SYNOPSIS

    use Geo::Distance::XS;

    my $geo = Geo::Distance->new;
    my $distance = $geo->distance(mile => $lon1, $lat1 => $lon2, $lat2);

=head1 DESCRIPTION

The C<Geo::Distance::XS> module provides faster C implementations of the
distance calculations found in C<Geo::Distance>.  See the documentation for
that module for usage.

NOTE: As of version 0.13, Geo::Distance automatically uses this module if
it is installed.

=head1 FORMULAS

In addition to the formulas offered in C<Geo::Distance>, this module
implements the additional formulas:

=head2 alt: Andoyer-Lambert-Thomas Formula

This is faster than the Vincenty formula, but trades a bit of accuracy.

=head1 PERFORMANCE

This distribution contains a benchmarking script which compares
C<Geo::Distance::XS> with C<Geo::Distance> and C<GIS::Distance::Fast>. These
are the results on a MacBook 2GHz with Perl 5.14.2:

    ---- [ Formula: hsin ] ------------------------------------
    perl     - distance from LA to NY: 2443.08796228363 miles
    xs       - distance from LA to NY: 2443.08796228363 miles
    gis_fast - distance from LA to NY: 2443.08796228363 miles

                Rate gis_fast     perl       xs
    gis_fast   24802/s       --     -70%     -98%
    perl       81919/s     230%       --     -92%
    xs       1003704/s    3947%    1125%       --

    ---- [ Formula: tv ] ------------------------------------
    perl     - distance from LA to NY: 2448.24135235512 miles
    xs       - distance from LA to NY: 2448.2413523656 miles
    gis_fast - distance from LA to NY: 2448.24135235512 miles

                Rate     perl gis_fast       xs
    perl      18101/s       --     -19%     -95%
    gis_fast  22330/s      23%       --     -94%
    xs       345717/s    1810%    1448%       --

    ---- [ Formula: polar ] ------------------------------------
    perl     - distance from LA to NY: 2766.02509696782 miles
    xs       - distance from LA to NY: 2766.02509696782 miles
    gis_fast - distance from LA to NY: 2766.02509696782 miles

                Rate gis_fast     perl       xs
    gis_fast   19200/s       --     -78%     -98%
    perl       87682/s     357%       --     -93%
    xs       1214700/s    6227%    1285%       --

    ---- [ Formula: cos ] ------------------------------------
    perl     - distance from LA to NY: 2443.08796228363 miles
    xs       - distance from LA to NY: 2443.08796228363 miles
    gis_fast - distance from LA to NY: 2443.08796228363 miles

                Rate gis_fast     perl       xs
    gis_fast   24435/s       --     -69%     -98%
    perl       78913/s     223%       --     -93%
    xs       1147836/s    4597%    1355%       --

    ---- [ Formula: gcd ] ------------------------------------
    perl     - distance from LA to NY: 2443.08796228363 miles
    xs       - distance from LA to NY: 2443.08796228363 miles
    gis_fast - distance from LA to NY: 2443.08796228363 miles

                Rate gis_fast     perl       xs
    gis_fast   18270/s       --     -75%     -98%
    perl       74472/s     308%       --     -93%
    xs       1102769/s    5936%    1381%       --

    ---- [ Formula: mt ] ------------------------------------
    perl     - distance from LA to NY: 2443.08796228363 miles
    xs       - distance from LA to NY: 2443.08796228363 miles
    gis_fast - distance from LA to NY: 2443.08796228363 miles

                Rate gis_fast     perl       xs
    gis_fast   17935/s       --     -75%     -98%
    perl       71739/s     300%       --     -94%
    xs       1135525/s    6231%    1483%       --

This distribution contains another benchmarking script which compares
only the XS formulas over several different coordinates:

            Rate    tv  hsin   alt   cos    mt   gcd polar
    tv     16906/s    --  -90%  -90%  -91%  -91%  -91%  -92%
    hsin  165414/s  878%    --   -4%   -8%  -10%  -13%  -17%
    alt   172032/s  918%    4%    --   -5%   -7%   -9%  -14%
    cos   180326/s  967%    9%    5%    --   -2%   -5%  -10%
    mt    184357/s  991%   11%    7%    2%    --   -3%   -8%
    gcd   189253/s 1019%   14%   10%    5%    3%    --   -6%
    polar 200386/s 1085%   21%   16%   11%    9%    6%    --

    Calculated length for short distance:
        alt  : 40.3740136064528 miles
        cos  : 40.3095459813536 miles
        gcd  : 40.3095459813294 miles
        hsin : 40.3095459813294 miles
        mt   : 40.3095459813536 miles
        polar: 46.7467797109043 miles
        tv   : 40.3740136384531 miles

    Calculated length for long distance:
        alt  : 2448.24135691376 miles
        cos  : 2443.08796228363 miles
        gcd  : 2443.08796228363 miles
        hsin : 2443.08796228363 miles
        mt   : 2443.08796228363 miles
        polar: 2766.02509696782 miles
        tv   : 2448.2413523656 miles

    Calculated length for nearly antipodes:
        alt  : 12340.6455133245 miles
        cos  : 12340.327635068 miles
        gcd  : 12340.327635068 miles
        hsin : 12340.327635068 miles
        mt   : 12340.327635068 miles
        polar: 12368.4764642469 miles
        tv   : 12340.7483034002 miles

    Calculated length for antipodes:
        alt  : 12429.86673988 miles
        cos  : 219.005548031861 miles
        gcd  : 12438.0476860875 miles
        hsin : 12438.0475680956 miles
        mt   : 219.005548031861 miles
        polar: 12438.0476860875 miles
        tv   : 12370.1885059814 miles

    Calculated length for polar antipodes:
        alt  : 12429.86673988 miles
        cos  : 12438.0476860875 miles
        gcd  : 12438.0476860875 miles
        hsin : 12438.0476860875 miles
        mt   : 12438.0476860875 miles
        polar: 12438.0476860875 miles
        tv   : 12429.8667398787 miles

=head1 SEE ALSO

L<Geo::Distance>

L<http://blogs.esri.com/esri/apl/2010/09/28/fast-times-at-geodesic-high/>

=head1 REQUESTS AND BUGS

Please report any bugs or feature requests to
L<http://rt.cpan.org/Public/Bug/Report.html?Queue=Geo-Distance-XS>. I will be
notified, and then you'll automatically be notified of progress on your bug as
I make changes.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Geo::Distance::XS

You can also look for information at:

=over

=item * GitHub Source Repository

L<http://github.com/gray/geo-distance-xs>

=item * AnnoCPAN: Annotated CPAN documentation

L<http://annocpan.org/dist/Geo-Distance-XS>

=item * CPAN Ratings

L<http://cpanratings.perl.org/d/Geo-Distance-XS>

=item * RT: CPAN's request tracker

L<http://rt.cpan.org/Public/Dist/Display.html?Name=Geo-Distance-XS>

=item * Search CPAN

L<http://search.cpan.org/dist/Geo-Distance-XS/>

=back

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2009-2012 gray <gray at cpan.org>, all rights reserved.

This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=head1 AUTHOR

gray, <gray at cpan.org>

=cut