File Coverage

blib/lib/Geo/GDAL/FFI.pm
Criterion Covered Total %
statement 2110 2188 96.4
branch 37 72 51.3
condition 13 34 38.2
subroutine 43 63 68.2
pod 15 36 41.6
total 2218 2393 92.6


line stmt bran cond sub pod time code
1             package Geo::GDAL::FFI;
2              
3 5     5   189737 use v5.10;
  5         47  
4 5     5   3787 use strict;
  5         14  
  5         120  
5 5     5   25 use warnings;
  5         7  
  5         118  
6 5     5   27 use Carp;
  5         8  
  5         266  
7 5     5   3319 use PDL;
  5         94  
  5         24  
8 5     5   1158880 use FFI::Platypus;
  5         38975  
  5         157  
9 5     5   2327 use FFI::Platypus::Buffer;
  5         2769  
  5         341  
10             require Exporter;
11             require B;
12              
13 5     5   2207 use Geo::GDAL::FFI::VSI;
  5         14  
  5         239  
14 5     5   2171 use Geo::GDAL::FFI::VSI::File;
  5         11  
  5         164  
15 5     5   2240 use Geo::GDAL::FFI::SpatialReference;
  5         21  
  5         159  
16 5     5   2172 use Geo::GDAL::FFI::Object;
  5         14  
  5         162  
17 5     5   2142 use Geo::GDAL::FFI::Driver;
  5         13  
  5         143  
18 5     5   2437 use Geo::GDAL::FFI::Dataset;
  5         14  
  5         166  
19 5     5   2349 use Geo::GDAL::FFI::Band;
  5         14  
  5         172  
20 5     5   34 use Geo::GDAL::FFI::Layer;
  5         22  
  5         130  
21 5     5   2274 use Geo::GDAL::FFI::FeatureDefn;
  5         14  
  5         164  
22 5     5   2196 use Geo::GDAL::FFI::FieldDefn;
  5         14  
  5         158  
23 5     5   2182 use Geo::GDAL::FFI::GeomFieldDefn;
  5         14  
  5         160  
24 5     5   2302 use Geo::GDAL::FFI::Feature;
  5         13  
  5         161  
25 5     5   2376 use Geo::GDAL::FFI::Geometry;
  5         22  
  5         81478  
26              
27             our $VERSION = 0.0800;
28             our $DEBUG = 0;
29              
30             our @ISA = qw(Exporter);
31             our @EXPORT_OK = qw(@errors GetVersionInfo SetErrorHandling UnsetErrorHandling
32             Capabilities OpenFlags DataTypes ResamplingMethods
33             FieldTypes FieldSubtypes Justifications ColorInterpretations
34             GeometryTypes GeometryFormats GridAlgorithms
35             GetDriver GetDrivers IdentifyDriver Open
36             HaveGEOS SetConfigOption GetConfigOption
37             FindFile PushFinderLocation PopFinderLocation FinderClean);
38             our %EXPORT_TAGS = (all => \@EXPORT_OK);
39              
40             our $None = 0;
41             our $Debug = 1;
42             our $Warning = 2;
43             our $Failure = 3;
44             our $Fatal = 4;
45              
46             our %ogr_errors = (
47             1 => 'NOT_ENOUGH_DATA',
48             2 => 'NOT_ENOUGH_MEMORY',
49             3 => 'UNSUPPORTED_GEOMETRY_TYPE',
50             4 => 'UNSUPPORTED_OPERATION',
51             5 => 'CORRUPT_DATA',
52             6 => 'FAILURE',
53             7 => 'UNSUPPORTED_SRS',
54             8 => 'INVALID_HANDLE',
55             9 => 'NON_EXISTING_FEATURE',
56             );
57              
58             our $Read = 0;
59             our $Write = 1;
60              
61             our @errors;
62             our %immutable;
63             my %parent_ref_hash;
64              
65             my $instance;
66              
67             sub SetErrorHandling {
68 6 50   6 1 206 return unless $instance;
69 6 50       29 return if exists $instance->{CPLErrorHandler};
70             $instance->{CPLErrorHandler} = $instance->{ffi}->closure(
71             sub {
72 4     4   125 my ($err_cat, $err_num, $msg) = @_;
73 4 50       16 if ($err_cat == $None) {
    100          
    100          
74             } elsif ($err_cat == $Debug) {
75 2 100       11 if ($DEBUG) {
76 1         13 print STDERR $msg;
77             }
78             } elsif ($err_cat == $Warning) {
79 1         14 warn $msg;
80             } else {
81 1         6 push @errors, $msg;
82             }
83 6         79 });
84 6         7368 CPLPushErrorHandler($instance->{CPLErrorHandler});
85             }
86              
87             sub UnsetErrorHandling {
88 1 50   1 1 164 return unless $instance;
89 1 50       5 return unless exists $instance->{CPLErrorHandler};
90 1         22 CPLPopErrorHandler($instance->{CPLErrorHandler});
91 1         75 delete $instance->{CPLErrorHandler};
92             }
93              
94             sub error_msg {
95 17     17 0 39 my $args = shift;
96 17 50 33     129 return unless @errors || $args;
97 0 0       0 unless (@errors) {
98 0 0       0 return $ogr_errors{$args->{OGRError}} if $args->{OGRError};
99 0         0 return "Unknown error.";
100             }
101 0         0 my $msg = join("\n", @errors);
102 0         0 @errors = ();
103 0         0 return $msg;
104             }
105              
106             # internal methods
107             sub _register_parent_ref {
108 44     44   86 my ($gdal_handle, $parent) = @_;
109             # ensure $gdal_handle is not blessed?
110 44 50       88 confess "gdal handle is undefined"
111             if !defined $gdal_handle;
112 44 50       90 confess "Parent ref is undefined"
113             if !$parent;
114 44         112 $parent_ref_hash{$gdal_handle} = $parent;
115             }
116              
117             sub _deregister_parent_ref {
118 64     64   120 my ($gdal_handle) = @_;
119             # we get undef vals in global cleanup
120 64 50       132 return if !$gdal_handle;
121 64         165 delete $parent_ref_hash{$gdal_handle};
122             }
123              
124             sub _get_parent_ref {
125 0     0   0 my ($gdal_handle) = @_;
126             warn "Attempting to access non-existent parent"
127 0 0       0 if !$parent_ref_hash{$gdal_handle};
128 0         0 return $parent_ref_hash{$gdal_handle}
129             }
130              
131              
132             our %capabilities = (
133             OPEN => 1,
134             CREATE => 2,
135             CREATECOPY => 3,
136             VIRTUALIO => 4,
137             RASTER => 5,
138             VECTOR => 6,
139             GNM => 7,
140             NOTNULL_FIELDS => 8,
141             DEFAULT_FIELDS => 9,
142             NOTNULL_GEOMFIELDS => 10,
143             NONSPATIAL => 11,
144             FEATURE_STYLES => 12,
145             );
146              
147             sub Capabilities {
148 0     0 1 0 return sort {$capabilities{$a} <=> $capabilities{$b}} keys %capabilities;
  0         0  
149             }
150              
151             our %open_flags = (
152             READONLY => 0x00,
153             UPDATE => 0x01,
154             ALL => 0x00,
155             RASTER => 0x02,
156             VECTOR => 0x04,
157             GNM => 0x08,
158             SHARED => 0x20,
159             VERBOSE_ERROR => 0x40,
160             INTERNAL => 0x80,
161             ARRAY_BLOCK_ACCESS => 0x100,
162             HASHSET_BLOCK_ACCESS => 0x200,
163             );
164              
165             sub OpenFlags {
166 0     0 1 0 return sort {$open_flags{$a} <=> $open_flags{$b}} keys %open_flags;
  0         0  
167             }
168              
169             our %data_types = (
170             Unknown => 0,
171             Byte => 1,
172             UInt16 => 2,
173             Int16 => 3,
174             UInt32 => 4,
175             Int32 => 5,
176             Float32 => 6,
177             Float64 => 7,
178             CInt16 => 8,
179             CInt32 => 9,
180             CFloat32 => 10,
181             CFloat64 => 11
182             );
183             our %data_types_reverse = reverse %data_types;
184              
185             sub DataTypes {
186 0     0 1 0 return sort {$data_types{$a} <=> $data_types{$b}} keys %data_types;
  0         0  
187             }
188              
189             our %rat_field_type = (
190             Integer => 0,
191             Real => 1,
192             String => 2
193             );
194              
195             our %rat_field_usage = (
196             Generic => 0,
197             PixelCount => 1,
198             Name => 2,
199             Min => 3,
200             Max => 4,
201             MinMax => 5,
202             Red => 6,
203             Green => 7,
204             Blue => 8,
205             Alpha => 9,
206             RedMin => 10,
207             GreenMin => 11,
208             BlueMin => 12,
209             AlphaMin => 13,
210             RedMax => 14,
211             GreenMax => 15,
212             BlueMax => 16,
213             AlphaMax => 17,
214             );
215              
216             our %rat_table_type = (
217             THEMATIC => 0,
218             ATHEMATIC => 1
219             );
220            
221             our %resampling = (
222             NearestNeighbour => 0,
223             Bilinear => 1,
224             Cubic => 2,
225             CubicSpline => 3,
226             ORA_Lanczos => 4,
227             Average => 5,
228             Mode => 6,
229             Gauss => 7
230             );
231              
232             sub ResamplingMethods {
233 0     0 0 0 return sort {$resampling{$a} <=> $resampling{$b}} keys %resampling;
  0         0  
234             }
235              
236             our %data_type2pdl_data_type = (
237             Byte => $PDL::Types::PDL_B,
238             Int16 => $PDL::Types::PDL_S,
239             UInt16 => $PDL::Types::PDL_US,
240             Int32 => $PDL::Types::PDL_L,
241             Float32 => $PDL::Types::PDL_F,
242             Float64 => $PDL::Types::PDL_D,
243             );
244             our %pdl_data_type2data_type = reverse %data_type2pdl_data_type;
245              
246             our %field_types = (
247             Integer => 0,
248             IntegerList => 1,
249             Real => 2,
250             RealList => 3,
251             String => 4,
252             StringList => 5,
253             #WideString => 6, # do not use
254             #WideStringList => 7, # do not use
255             Binary => 8,
256             Date => 9,
257             Time => 10,
258             DateTime => 11,
259             Integer64 => 12,
260             Integer64List => 13,
261             );
262             our %field_types_reverse = reverse %field_types;
263              
264             sub FieldTypes {
265 0     0 1 0 return sort {$field_types{$a} <=> $field_types{$b}} keys %field_types;
  0         0  
266             }
267              
268             our %field_subtypes = (
269             None => 0,
270             Boolean => 1,
271             Int16 => 2,
272             Float32 => 3
273             );
274             our %field_subtypes_reverse = reverse %field_subtypes;
275              
276             sub FieldSubtypes {
277 0     0 1 0 return sort {$field_subtypes{$a} <=> $field_subtypes{$b}} keys %field_subtypes;
  0         0  
278             }
279              
280             our %justification = (
281             Undefined => 0,
282             Left => 1,
283             Right => 2
284             );
285             our %justification_reverse = reverse %justification;
286              
287             sub Justifications {
288 0     0 1 0 return sort {$justification{$a} <=> $justification{$b}} keys %justification;
  0         0  
289             }
290              
291             our %color_interpretations = (
292             Undefined => 0,
293             GrayIndex => 1,
294             PaletteIndex => 2,
295             RedBand => 3,
296             GreenBand => 4,
297             BlueBand => 5,
298             AlphaBand => 6,
299             HueBand => 7,
300             SaturationBand => 8,
301             LightnessBand => 9,
302             CyanBand => 10,
303             MagentaBand => 11,
304             YellowBand => 12,
305             BlackBand => 13,
306             YCbCr_YBand => 14,
307             YCbCr_CbBand => 15,
308             YCbCr_CrBand => 16,
309             );
310             our %color_interpretations_reverse = reverse %color_interpretations;
311              
312             sub ColorInterpretations {
313 0     0 1 0 return sort {$color_interpretations{$a} <=> $color_interpretations{$b}} keys %color_interpretations;
  0         0  
314             }
315              
316             our %geometry_types = (
317             Unknown => 0,
318             Point => 1,
319             LineString => 2,
320             Polygon => 3,
321             MultiPoint => 4,
322             MultiLineString => 5,
323             MultiPolygon => 6,
324             GeometryCollection => 7,
325             CircularString => 8,
326             CompoundCurve => 9,
327             CurvePolygon => 10,
328             MultiCurve => 11,
329             MultiSurface => 12,
330             Curve => 13,
331             Surface => 14,
332             PolyhedralSurface => 15,
333             TIN => 16,
334             Triangle => 17,
335             None => 100,
336             LinearRing => 101,
337             CircularStringZ => 1008,
338             CompoundCurveZ => 1009,
339             CurvePolygonZ => 1010,
340             MultiCurveZ => 1011,
341             MultiSurfaceZ => 1012,
342             CurveZ => 1013,
343             SurfaceZ => 1014,
344             PolyhedralSurfaceZ => 1015,
345             TINZ => 1016,
346             TriangleZ => 1017,
347             PointM => 2001,
348             LineStringM => 2002,
349             PolygonM => 2003,
350             MultiPointM => 2004,
351             MultiLineStringM => 2005,
352             MultiPolygonM => 2006,
353             GeometryCollectionM => 2007,
354             CircularStringM => 2008,
355             CompoundCurveM => 2009,
356             CurvePolygonM => 2010,
357             MultiCurveM => 2011,
358             MultiSurfaceM => 2012,
359             CurveM => 2013,
360             SurfaceM => 2014,
361             PolyhedralSurfaceM => 2015,
362             TINM => 2016,
363             TriangleM => 2017,
364             PointZM => 3001,
365             LineStringZM => 3002,
366             PolygonZM => 3003,
367             MultiPointZM => 3004,
368             MultiLineStringZM => 3005,
369             MultiPolygonZM => 3006,
370             GeometryCollectionZM => 3007,
371             CircularStringZM => 3008,
372             CompoundCurveZM => 3009,
373             CurvePolygonZM => 3010,
374             MultiCurveZM => 3011,
375             MultiSurfaceZM => 3012,
376             CurveZM => 3013,
377             SurfaceZM => 3014,
378             PolyhedralSurfaceZM => 3015,
379             TINZM => 3016,
380             TriangleZM => 3017,
381             Point25D => 0x80000001,
382             LineString25D => 0x80000002,
383             Polygon25D => 0x80000003,
384             MultiPoint25D => 0x80000004,
385             MultiLineString25D => 0x80000005,
386             MultiPolygon25D => 0x80000006,
387             GeometryCollection25D => 0x80000007
388             );
389             our %geometry_types_reverse = reverse %geometry_types;
390              
391             sub GeometryTypes {
392 0     0 1 0 return sort {$geometry_types{$a} <=> $geometry_types{$b}} keys %geometry_types;
  0         0  
393             }
394              
395             our %geometry_formats = (
396             WKT => 1,
397             );
398              
399             sub GeometryFormats {
400 0     0 0 0 return sort {$geometry_formats{$a} <=> $geometry_formats{$b}} keys %geometry_formats;
  0         0  
401             }
402              
403             our %grid_algorithms = (
404             InverseDistanceToAPower => 1,
405             MovingAverage => 2,
406             NearestNeighbor => 3,
407             MetricMinimum => 4,
408             MetricMaximum => 5,
409             MetricRange => 6,
410             MetricCount => 7,
411             MetricAverageDistance => 8,
412             MetricAverageDistancePts => 9,
413             Linear => 10,
414             InverseDistanceToAPowerNearestNeighbor => 11
415             );
416              
417             sub GridAlgorithms {
418 0     0 0 0 return sort {$grid_algorithms{$a} <=> $grid_algorithms{$b}} keys %grid_algorithms;
  0         0  
419             }
420              
421             sub isint {
422 256     256 0 366 my $value = shift;
423 256         655 my $b_obj = B::svref_2object(\$value);
424 256         512 my $flags = $b_obj->FLAGS;
425 256 50 66     1782 return 1 if $flags & B::SVp_IOK() && !($flags & B::SVp_NOK()) && !($flags & B::SVp_POK());
      66        
426             }
427              
428             sub new {
429 6     6 0 635 my $class = shift;
430              
431 6 100       53 return $instance if $instance;
432              
433 5         146 my $ffi = FFI::Platypus->new;
434 5         34243 $ffi->load_custom_type('::StringPointer' => 'string_pointer');
435 5         26050 $ffi->lib(Alien::gdal->dynamic_libs);
436              
437 5         333089 $ffi->type('(pointer,size_t,size_t,opaque)->size_t' => 'VSIWriteFunction');
438 5         1994 $ffi->type('(int,int,string)->void' => 'CPLErrorHandler');
439 5         1386 $ffi->type('(double,string,pointer)->int' => 'GDALProgressFunc');
440 5         931 $ffi->type('(pointer,int, pointer,int,int,unsigned int,unsigned int,int,int)->int' => 'GDALDerivedPixelFunc');
441 5         1478 $ffi->type('(pointer,int,int,pointer,pointer,pointer,pointer)->int' => 'GDALTransformerFunc');
442 5         838 $ffi->type('(double,int,pointer,pointer,pointer)->int' => 'GDALContourWriter');
443              
444             # from port/*.h
445 5         887 eval{$ffi->attach(VSIMalloc => [qw/uint/] => 'opaque');};
  5         82  
446 5 50       183266 croak "Can't attach to GDAL methods. Does Alien::gdal provide GDAL dynamic libs?" unless $class->can('VSIMalloc');
447 5         36 eval{$ffi->attach(VSIFree => ['opaque'] => 'void');};
  5         44  
448 5         1665 eval{$ffi->attach(CPLError => [qw/int int string/] => 'void');};
  5         36  
449 5         1099 eval{$ffi->attach(VSIFOpenL => [qw/string string/] => 'opaque');};
  5         31  
450 5         930 eval{$ffi->attach(VSIFOpenExL => [qw/string string int/] => 'opaque');};
  5         30  
451 5         1114 eval{$ffi->attach(VSIFCloseL => ['opaque'] => 'int');};
  5         37  
452 5         1005 eval{$ffi->attach(VSIFWriteL => [qw/opaque uint uint opaque/] => 'uint');};
  5         46  
453 5         1248 eval{$ffi->attach(VSIFReadL => [qw/opaque uint uint opaque/] => 'uint');};
  5         47  
454 5         1216 eval{$ffi->attach(VSIIngestFile => [qw/opaque string string_pointer uint64* sint64/] => 'int');};
  5         48  
455 5         1903 eval{$ffi->attach(VSIMkdir => [qw/string sint64/] => 'int');};
  5         32  
456 5         982 eval{$ffi->attach(VSIRmdir => [qw/string/] => 'int');};
  5         34  
457 5         765 eval{$ffi->attach(VSIReadDirEx => [qw/string int/] => 'opaque');};
  5         35  
458 5         990 eval{$ffi->attach(VSIUnlink => [qw/string/] => 'int');};
  5         34  
459 5         732 eval{$ffi->attach(VSIRename => [qw/string string/] => 'int');};
  5         39  
460 5         778 eval{$ffi->attach(VSIStdoutSetRedirection => ['VSIWriteFunction', 'opaque'] => 'void');};
  5         44  
461 5         1192 eval{$ffi->attach(CPLPushErrorHandler => ['CPLErrorHandler'] => 'void');};
  5         35  
462 5         1060 eval{$ffi->attach(CPLPopErrorHandler => ['CPLErrorHandler'] => 'void');};
  5         40  
463 5         914 eval{$ffi->attach(CSLDestroy => ['opaque'] => 'void');};
  5         41  
464 5         1091 eval{$ffi->attach(CSLAddString => ['opaque', 'string'] => 'opaque');};
  5         33  
465 5         1180 eval{$ffi->attach(CSLCount => ['opaque'] => 'int');};
  5         36  
466 5         913 eval{$ffi->attach(CSLGetField => ['opaque', 'int'] => 'string');};
  5         33  
467 5         906 eval{$ffi->attach(CPLGetConfigOption => ['string', 'string'] => 'string');};
  5         38  
468 5         795 eval{$ffi->attach(CPLSetConfigOption => ['string', 'string'] => 'void');};
  5         42  
469 5         1001 eval{$ffi->attach(CPLFindFile => ['string', 'string'] => 'string');};
  5         177  
470 5         814 eval{$ffi->attach(CPLPushFinderLocation => ['string'] => 'void');};
  5         31  
471 5         983 eval{$ffi->attach(CPLPopFinderLocation => [] => 'void');};
  5         31  
472 5         798 eval{$ffi->attach(CPLFinderClean => [] => 'void');};
  5         26  
473              
474             # from ogr_core.h
475 5         793 eval{$ffi->attach( 'OGR_GT_Flatten' => ['unsigned int'] => 'unsigned int');};
  5         26  
476              
477             # generated with parse_h.pl
478             # from gcore/gdal.h
479 5         811 eval{$ffi->attach('GDALGetDataTypeSize' => ['unsigned int'] => 'int');};
  5         56  
480 5         807 eval{$ffi->attach('GDALGetDataTypeSizeBits' => ['unsigned int'] => 'int');};
  5         51  
481 5         734 eval{$ffi->attach('GDALGetDataTypeSizeBytes' => ['unsigned int'] => 'int');};
  5         53  
482 5         771 eval{$ffi->attach('GDALDataTypeIsComplex' => ['unsigned int'] => 'int');};
  5         29  
483 5         671 eval{$ffi->attach('GDALDataTypeIsInteger' => ['unsigned int'] => 'int');};
  5         45  
484 5         706 eval{$ffi->attach('GDALDataTypeIsFloating' => ['unsigned int'] => 'int');};
  5         36  
485 5         700 eval{$ffi->attach('GDALDataTypeIsSigned' => ['unsigned int'] => 'int');};
  5         36  
486 5         682 eval{$ffi->attach('GDALGetDataTypeName' => ['unsigned int'] => 'string');};
  5         33  
487 5         667 eval{$ffi->attach('GDALGetDataTypeByName' => [qw/string/] => 'unsigned int');};
  5         35  
488 5         667 eval{$ffi->attach('GDALDataTypeUnion' => ['unsigned int','unsigned int'] => 'unsigned int');};
  5         43  
489 5         792 eval{$ffi->attach('GDALDataTypeUnionWithValue' => ['unsigned int','double','int'] => 'unsigned int');};
  5         41  
490 5         980 eval{$ffi->attach('GDALFindDataType' => [qw/int int int int/] => 'unsigned int');};
  5         26  
491 5         799 eval{$ffi->attach('GDALFindDataTypeForValue' => [qw/double int/] => 'unsigned int');};
  5         33  
492 5         1013 eval{$ffi->attach('GDALAdjustValueToDataType' => ['unsigned int','double','int*','int*'] => 'double');};
  5         66  
493 5         1644 eval{$ffi->attach('GDALGetNonComplexDataType' => ['unsigned int'] => 'unsigned int');};
  5         50  
494 5         698 eval{$ffi->attach('GDALDataTypeIsConversionLossy' => ['unsigned int','unsigned int'] => 'int');};
  5         32  
495 5         761 eval{$ffi->attach('GDALGetAsyncStatusTypeName' => ['unsigned int'] => 'string');};
  5         44  
496 5         743 eval{$ffi->attach('GDALGetAsyncStatusTypeByName' => [qw/string/] => 'unsigned int');};
  5         32  
497 5         729 eval{$ffi->attach('GDALGetColorInterpretationName' => ['unsigned int'] => 'string');};
  5         342  
498 5         766 eval{$ffi->attach('GDALGetColorInterpretationByName' => [qw/string/] => 'unsigned int');};
  5         33  
499 5         706 eval{$ffi->attach('GDALGetPaletteInterpretationName' => ['unsigned int'] => 'string');};
  5         31  
500 5         634 eval{$ffi->attach('GDALAllRegister' => [] => 'void');};
  5         28  
501 5         812 eval{$ffi->attach('GDALCreate' => ['opaque','string','int','int','int','unsigned int','opaque'] => 'opaque');};
  5         52  
502 5         1599 eval{$ffi->attach('GDALCreateCopy' => [qw/opaque string opaque int opaque GDALProgressFunc opaque/] => 'opaque');};
  5         30  
503 5         1777 eval{$ffi->attach('GDALIdentifyDriver' => [qw/string opaque/] => 'opaque');};
  5         33  
504 5         1165 eval{$ffi->attach('GDALIdentifyDriverEx' => ['string','unsigned int','opaque','opaque'] => 'opaque');};
  5         37  
505 5         1391 eval{$ffi->attach('GDALOpen' => ['string','unsigned int'] => 'opaque');};
  5         52  
506 5         956 eval{$ffi->attach('GDALOpenShared' => ['string','unsigned int'] => 'opaque');};
  5         37  
507 5         885 eval{$ffi->attach('GDALOpenEx' => ['string','unsigned int','opaque','opaque','opaque'] => 'opaque');};
  5         40  
508 5         1588 eval{$ffi->attach('GDALDumpOpenDatasets' => [qw/opaque/] => 'int');};
  5         45  
509 5         1031 eval{$ffi->attach('GDALGetDriverByName' => [qw/string/] => 'opaque');};
  5         47  
510 5         936 eval{$ffi->attach('GDALGetDriverCount' => [] => 'int');};
  5         117  
511 5         784 eval{$ffi->attach('GDALGetDriver' => [qw/int/] => 'opaque');};
  5         31  
512 5         1311 eval{$ffi->attach('GDALCreateDriver' => [] => 'opaque');};
  5         27  
513 5         790 eval{$ffi->attach('GDALDestroyDriver' => [qw/opaque/] => 'void');};
  5         34  
514 5         999 eval{$ffi->attach('GDALRegisterDriver' => [qw/opaque/] => 'int');};
  5         45  
515 5         1090 eval{$ffi->attach('GDALDeregisterDriver' => [qw/opaque/] => 'void');};
  5         57  
516 5         1098 eval{$ffi->attach('GDALDestroyDriverManager' => [] => 'void');};
  5         26  
517 5         829 eval{$ffi->attach('GDALDestroy' => [] => 'void');};
  5         23  
518 5         845 eval{$ffi->attach('GDALDeleteDataset' => [qw/opaque string/] => 'int');};
  5         29  
519 5         988 eval{$ffi->attach('GDALRenameDataset' => [qw/opaque string string/] => 'int');};
  5         44  
520 5         922 eval{$ffi->attach('GDALCopyDatasetFiles' => [qw/opaque string string/] => 'int');};
  5         37  
521 5         935 eval{$ffi->attach('GDALValidateCreationOptions' => [qw/opaque opaque/] => 'int');};
  5         31  
522 5         1042 eval{$ffi->attach('GDALGetDriverShortName' => [qw/opaque/] => 'string');};
  5         50  
523 5         900 eval{$ffi->attach('GDALGetDriverLongName' => [qw/opaque/] => 'string');};
  5         29  
524 5         873 eval{$ffi->attach('GDALGetDriverHelpTopic' => [qw/opaque/] => 'string');};
  5         55  
525 5         1027 eval{$ffi->attach('GDALGetDriverCreationOptionList' => [qw/opaque/] => 'string');};
  5         24  
526 5         850 eval{$ffi->attach('GDALInitGCPs' => [qw/int opaque/] => 'void');};
  5         38  
527 5         1080 eval{$ffi->attach('GDALDeinitGCPs' => [qw/int opaque/] => 'void');};
  5         46  
528 5         1200 eval{$ffi->attach('GDALDuplicateGCPs' => [qw/int opaque/] => 'opaque');};
  5         40  
529 5         1052 eval{$ffi->attach('GDALGCPsToGeoTransform' => [qw/int opaque double* int/] => 'int');};
  5         45  
530 5         1385 eval{$ffi->attach('GDALInvGeoTransform' => [qw/double* double*/] => 'int');};
  5         25  
531 5         704 eval{$ffi->attach('GDALApplyGeoTransform' => [qw/double* double double double* double*/] => 'void');};
  5         29  
532 5         1334 eval{$ffi->attach('GDALComposeGeoTransforms' => [qw/double* double* double*/] => 'void');};
  5         56  
533 5         958 eval{$ffi->attach('GDALGetMetadataDomainList' => [qw/opaque/] => 'opaque');};
  5         35  
534 5         1185 eval{$ffi->attach('GDALGetMetadata' => [qw/opaque string/] => 'opaque');};
  5         43  
535 5         1154 eval{$ffi->attach('GDALSetMetadata' => [qw/opaque opaque string/] => 'int');};
  5         44  
536 5         1548 eval{$ffi->attach('GDALGetMetadataItem' => [qw/opaque string string/] => 'string');};
  5         34  
537 5         1064 eval{$ffi->attach('GDALSetMetadataItem' => [qw/opaque string string string/] => 'int');};
  5         37  
538 5         1041 eval{$ffi->attach('GDALGetDescription' => [qw/opaque/] => 'string');};
  5         60  
539 5         926 eval{$ffi->attach('GDALSetDescription' => [qw/opaque string/] => 'void');};
  5         35  
540 5         1067 eval{$ffi->attach('GDALGetDatasetDriver' => [qw/opaque/] => 'opaque');};
  5         34  
541 5         1061 eval{$ffi->attach('GDALGetFileList' => [qw/opaque/] => 'opaque');};
  5         55  
542 5         1166 eval{$ffi->attach('GDALClose' => [qw/opaque/] => 'void');};
  5         34  
543 5         1095 eval{$ffi->attach('GDALGetRasterXSize' => [qw/opaque/] => 'int');};
  5         54  
544 5         924 eval{$ffi->attach('GDALGetRasterYSize' => [qw/opaque/] => 'int');};
  5         36  
545 5         953 eval{$ffi->attach('GDALGetRasterCount' => [qw/opaque/] => 'int');};
  5         35  
546 5         941 eval{$ffi->attach('GDALGetRasterBand' => [qw/opaque int/] => 'opaque');};
  5         29  
547 5         1117 eval{$ffi->attach('GDALAddBand' => ['opaque','unsigned int','opaque'] => 'int');};
  5         45  
548 5         1128 eval{$ffi->attach('GDALBeginAsyncReader' => ['opaque','int','int','int','int','opaque','int','int','unsigned int','int','int*','int','int','int','opaque'] => 'opaque');};
  5         55  
549 5         1992 eval{$ffi->attach('GDALEndAsyncReader' => [qw/opaque opaque/] => 'void');};
  5         49  
550 5         1225 eval{$ffi->attach('GDALDatasetRasterIO' => ['opaque','unsigned int','int','int','int','int','opaque','int','int','unsigned int','int','int*','int','int','int'] => 'int');};
  5         41  
551 5         1707 eval{$ffi->attach('GDALDatasetRasterIOEx' => ['opaque','unsigned int','int','int','int','int','opaque','int','int','unsigned int','int','int*','sint64','sint64','sint64','opaque'] => 'int');};
  5         59  
552 5         2394 eval{$ffi->attach('GDALDatasetAdviseRead' => ['opaque','int','int','int','int','int','int','unsigned int','int','int*','opaque'] => 'int');};
  5         71  
553 5         1462 eval{$ffi->attach('GDALGetProjectionRef' => [qw/opaque/] => 'string');};
  5         48  
554 5         918 eval{$ffi->attach('GDALGetSpatialRef' => [qw/opaque/] => 'opaque');};
  5         41  
555 5         1043 eval{$ffi->attach('GDALSetProjection' => [qw/opaque string/] => 'int');};
  5         35  
556 5         919 eval{$ffi->attach('GDALSetSpatialRef' => [qw/opaque opaque/] => 'int');};
  5         36  
557 5         1137 eval{$ffi->attach('GDALGetGeoTransform' => [qw/opaque double[6]/] => 'int');};
  5         33  
558 5         1556 eval{$ffi->attach('GDALSetGeoTransform' => [qw/opaque double[6]/] => 'int');};
  5         43  
559 5         978 eval{$ffi->attach('GDALGetGCPCount' => [qw/opaque/] => 'int');};
  5         39  
560 5         925 eval{$ffi->attach('GDALGetGCPProjection' => [qw/opaque/] => 'string');};
  5         32  
561 5         865 eval{$ffi->attach('GDALGetGCPSpatialRef' => [qw/opaque/] => 'opaque');};
  5         41  
562 5         999 eval{$ffi->attach('GDALGetGCPs' => [qw/opaque/] => 'opaque');};
  5         36  
563 5         1098 eval{$ffi->attach('GDALSetGCPs' => [qw/opaque int opaque string/] => 'int');};
  5         38  
564 5         1108 eval{$ffi->attach('GDALSetGCPs2' => [qw/opaque int opaque opaque/] => 'int');};
  5         25  
565 5         1305 eval{$ffi->attach('GDALGetInternalHandle' => [qw/opaque string/] => 'opaque');};
  5         47  
566 5         1098 eval{$ffi->attach('GDALReferenceDataset' => [qw/opaque/] => 'int');};
  5         57  
567 5         938 eval{$ffi->attach('GDALDereferenceDataset' => [qw/opaque/] => 'int');};
  5         40  
568 5         906 eval{$ffi->attach('GDALReleaseDataset' => [qw/opaque/] => 'int');};
  5         44  
569 5         873 eval{$ffi->attach('GDALBuildOverviews' => [qw/opaque string int int* int int* GDALProgressFunc opaque/] => 'int');};
  5         36  
570 5         1356 eval{$ffi->attach('GDALGetOpenDatasets' => [qw/uint64* int*/] => 'void');};
  5         35  
571 5         878 eval{$ffi->attach('GDALGetAccess' => [qw/opaque/] => 'int');};
  5         22  
572 5         835 eval{$ffi->attach('GDALFlushCache' => [qw/opaque/] => 'void');};
  5         35  
573 5         1079 eval{$ffi->attach('GDALCreateDatasetMaskBand' => [qw/opaque int/] => 'int');};
  5         25  
574 5         938 eval{$ffi->attach('GDALDatasetCopyWholeRaster' => [qw/opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         39  
575 5         1533 eval{$ffi->attach('GDALRasterBandCopyWholeRaster' => [qw/opaque opaque string_pointer GDALProgressFunc opaque/] => 'int');};
  5         41  
576 5         1446 eval{$ffi->attach('GDALRegenerateOverviews' => [qw/opaque int uint64* string GDALProgressFunc opaque/] => 'int');};
  5         29  
577 5         1265 eval{$ffi->attach('GDALDatasetGetLayerCount' => [qw/opaque/] => 'int');};
  5         36  
578 5         889 eval{$ffi->attach('GDALDatasetGetLayer' => [qw/opaque int/] => 'opaque');};
  5         40  
579 5         1122 eval{$ffi->attach('GDALDatasetGetLayerByName' => [qw/opaque string/] => 'opaque');};
  5         40  
580 5         1088 eval{$ffi->attach('GDALDatasetDeleteLayer' => [qw/opaque int/] => 'int');};
  5         46  
581 5         885 eval{$ffi->attach('GDALDatasetCreateLayer' => ['opaque','string','opaque','unsigned int','opaque'] => 'opaque');};
  5         54  
582 5         1597 eval{$ffi->attach('GDALDatasetCopyLayer' => [qw/opaque opaque string opaque/] => 'opaque');};
  5         34  
583 5         1556 eval{$ffi->attach('GDALDatasetResetReading' => [qw/opaque/] => 'void');};
  5         33  
584 5         1061 eval{$ffi->attach('GDALDatasetGetNextFeature' => [qw/opaque uint64* double* GDALProgressFunc opaque/] => 'opaque');};
  5         71  
585 5         1355 eval{$ffi->attach('GDALDatasetTestCapability' => [qw/opaque string/] => 'int');};
  5         37  
586 5         941 eval{$ffi->attach('GDALDatasetExecuteSQL' => [qw/opaque string opaque string/] => 'opaque');};
  5         41  
587 5         1319 eval{$ffi->attach('GDALDatasetReleaseResultSet' => [qw/opaque opaque/] => 'void');};
  5         43  
588 5         1258 eval{$ffi->attach('GDALDatasetGetStyleTable' => [qw/opaque/] => 'opaque');};
  5         37  
589 5         1027 eval{$ffi->attach('GDALDatasetSetStyleTableDirectly' => [qw/opaque opaque/] => 'void');};
  5         31  
590 5         1219 eval{$ffi->attach('GDALDatasetSetStyleTable' => [qw/opaque opaque/] => 'void');};
  5         35  
591 5         1304 eval{$ffi->attach('GDALDatasetStartTransaction' => [qw/opaque int/] => 'int');};
  5         36  
592 5         1009 eval{$ffi->attach('GDALDatasetCommitTransaction' => [qw/opaque/] => 'int');};
  5         26  
593 5         882 eval{$ffi->attach('GDALDatasetRollbackTransaction' => [qw/opaque/] => 'int');};
  5         27  
594 5         850 eval{$ffi->attach('GDALGetRasterDataType' => [qw/opaque/] => 'unsigned int');};
  5         26  
595 5         980 eval{$ffi->attach('GDALGetBlockSize' => [qw/opaque int* int*/] => 'void');};
  5         32  
596 5         1182 eval{$ffi->attach('GDALGetActualBlockSize' => [qw/opaque int int int* int*/] => 'int');};
  5         44  
597 5         1138 eval{$ffi->attach('GDALRasterAdviseRead' => ['opaque','int','int','int','int','int','int','unsigned int','opaque'] => 'int');};
  5         43  
598 5         1496 eval{$ffi->attach('GDALRasterIO' => ['opaque','unsigned int','int','int','int','int','opaque','int','int','unsigned int','int','int'] => 'int');};
  5         99  
599 5         1690 eval{$ffi->attach('GDALRasterIOEx' => ['opaque','unsigned int','int','int','int','int','opaque','int','int','unsigned int','sint64','sint64','opaque'] => 'int');};
  5         48  
600 5         2100 eval{$ffi->attach('GDALReadBlock' => [qw/opaque int int opaque/] => 'int');};
  5         29  
601 5         1315 eval{$ffi->attach('GDALWriteBlock' => [qw/opaque int int opaque/] => 'int');};
  5         44  
602 5         1254 eval{$ffi->attach('GDALGetRasterBandXSize' => [qw/opaque/] => 'int');};
  5         121  
603 5         921 eval{$ffi->attach('GDALGetRasterBandYSize' => [qw/opaque/] => 'int');};
  5         25  
604 5         851 eval{$ffi->attach('GDALGetRasterAccess' => [qw/opaque/] => 'unsigned int');};
  5         33  
605 5         900 eval{$ffi->attach('GDALGetBandNumber' => [qw/opaque/] => 'int');};
  5         39  
606 5         923 eval{$ffi->attach('GDALGetBandDataset' => [qw/opaque/] => 'opaque');};
  5         46  
607 5         1010 eval{$ffi->attach('GDALGetRasterColorInterpretation' => [qw/opaque/] => 'unsigned int');};
  5         29  
608 5         1003 eval{$ffi->attach('GDALSetRasterColorInterpretation' => ['opaque','unsigned int'] => 'int');};
  5         45  
609 5         1038 eval{$ffi->attach('GDALGetRasterColorTable' => [qw/opaque/] => 'opaque');};
  5         63  
610 5         1140 eval{$ffi->attach('GDALSetRasterColorTable' => [qw/opaque opaque/] => 'int');};
  5         43  
611 5         1139 eval{$ffi->attach('GDALHasArbitraryOverviews' => [qw/opaque/] => 'int');};
  5         28  
612 5         917 eval{$ffi->attach('GDALGetOverviewCount' => [qw/opaque/] => 'int');};
  5         30  
613 5         870 eval{$ffi->attach('GDALGetOverview' => [qw/opaque int/] => 'opaque');};
  5         41  
614 5         1031 eval{$ffi->attach('GDALGetRasterNoDataValue' => [qw/opaque int*/] => 'double');};
  5         43  
615 5         1158 eval{$ffi->attach('GDALSetRasterNoDataValue' => [qw/opaque double/] => 'int');};
  5         26  
616 5         1123 eval{$ffi->attach('GDALDeleteRasterNoDataValue' => [qw/opaque/] => 'int');};
  5         33  
617 5         915 eval{$ffi->attach('GDALGetRasterCategoryNames' => [qw/opaque/] => 'opaque');};
  5         25  
618 5         1053 eval{$ffi->attach('GDALSetRasterCategoryNames' => [qw/opaque opaque/] => 'int');};
  5         30  
619 5         1216 eval{$ffi->attach('GDALGetRasterMinimum' => [qw/opaque int*/] => 'double');};
  5         42  
620 5         1103 eval{$ffi->attach('GDALGetRasterMaximum' => [qw/opaque int*/] => 'double');};
  5         47  
621 5         1087 eval{$ffi->attach('GDALGetRasterStatistics' => [qw/opaque int int double* double* double* double*/] => 'int');};
  5         47  
622 5         1123 eval{$ffi->attach('GDALComputeRasterStatistics' => [qw/opaque int double* double* double* double* GDALProgressFunc opaque/] => 'int');};
  5         52  
623 5         1291 eval{$ffi->attach('GDALSetRasterStatistics' => [qw/opaque double double double double/] => 'int');};
  5         43  
624 5         1618 eval{$ffi->attach('GDALRasterBandAsMDArray' => [qw/opaque/] => 'opaque');};
  5         32  
625 5         1027 eval{$ffi->attach('GDALGetRasterUnitType' => [qw/opaque/] => 'string');};
  5         39  
626 5         880 eval{$ffi->attach('GDALSetRasterUnitType' => [qw/opaque string/] => 'int');};
  5         37  
627 5         1017 eval{$ffi->attach('GDALGetRasterOffset' => [qw/opaque int*/] => 'double');};
  5         42  
628 5         1044 eval{$ffi->attach('GDALSetRasterOffset' => [qw/opaque double/] => 'int');};
  5         66  
629 5         1082 eval{$ffi->attach('GDALGetRasterScale' => [qw/opaque int*/] => 'double');};
  5         71  
630 5         1058 eval{$ffi->attach('GDALSetRasterScale' => [qw/opaque double/] => 'int');};
  5         33  
631 5         1027 eval{$ffi->attach('GDALComputeRasterMinMax' => [qw/opaque int double/] => 'void');};
  5         48  
632 5         1333 eval{$ffi->attach('GDALFlushRasterCache' => [qw/opaque/] => 'int');};
  5         37  
633 5         906 eval{$ffi->attach('GDALGetRasterHistogram' => [qw/opaque double double int int* int int GDALProgressFunc opaque/] => 'int');};
  5         40  
634 5         1710 eval{$ffi->attach('GDALGetRasterHistogramEx' => [qw/opaque double double int uint64* int int GDALProgressFunc opaque/] => 'int');};
  5         46  
635 5         2129 eval{$ffi->attach('GDALGetDefaultHistogram' => [qw/opaque double* double* int* int* int GDALProgressFunc opaque/] => 'int');};
  5         40  
636 5         1330 eval{$ffi->attach('GDALGetDefaultHistogramEx' => [qw/opaque double* double* int* uint64* int GDALProgressFunc opaque/] => 'int');};
  5         49  
637 5         1316 eval{$ffi->attach('GDALSetDefaultHistogram' => [qw/opaque double double int int*/] => 'int');};
  5         56  
638 5         1375 eval{$ffi->attach('GDALSetDefaultHistogramEx' => [qw/opaque double double int uint64*/] => 'int');};
  5         63  
639 5         1337 eval{$ffi->attach('GDALGetRandomRasterSample' => [qw/opaque int float*/] => 'int');};
  5         48  
640 5         1386 eval{$ffi->attach('GDALGetRasterSampleOverview' => [qw/opaque int/] => 'opaque');};
  5         27  
641 5         1142 eval{$ffi->attach('GDALGetRasterSampleOverviewEx' => [qw/opaque uint64/] => 'opaque');};
  5         33  
642 5         1348 eval{$ffi->attach('GDALFillRaster' => [qw/opaque double double/] => 'int');};
  5         42  
643 5         1287 eval{$ffi->attach('GDALComputeBandStats' => [qw/opaque int double* double* GDALProgressFunc opaque/] => 'int');};
  5         31  
644 5         1236 eval{$ffi->attach('GDALOverviewMagnitudeCorrection' => [qw/opaque int uint64* GDALProgressFunc opaque/] => 'int');};
  5         29  
645 5         1174 eval{$ffi->attach('GDALGetDefaultRAT' => [qw/opaque/] => 'opaque');};
  5         49  
646 5         1038 eval{$ffi->attach('GDALSetDefaultRAT' => [qw/opaque opaque/] => 'int');};
  5         31  
647 5         1034 eval{$ffi->attach('GDALAddDerivedBandPixelFunc' => [qw/string GDALDerivedPixelFunc/] => 'int');};
  5         32  
648 5         717 eval{$ffi->attach('GDALGetMaskBand' => [qw/opaque/] => 'opaque');};
  5         23  
649 5         1064 eval{$ffi->attach('GDALGetMaskFlags' => [qw/opaque/] => 'int');};
  5         46  
650 5         908 eval{$ffi->attach('GDALCreateMaskBand' => [qw/opaque int/] => 'int');};
  5         53  
651 5         1002 eval{$ffi->attach('GDALGetDataCoverageStatus' => [qw/opaque int int int int int double*/] => 'int');};
  5         40  
652 5         1200 eval{$ffi->attach('GDALARGetNextUpdatedRegion' => [qw/opaque double int* int* int* int*/] => 'unsigned int');};
  5         32  
653 5         1207 eval{$ffi->attach('GDALARLockBuffer' => [qw/opaque double/] => 'int');};
  5         24  
654 5         1047 eval{$ffi->attach('GDALARUnlockBuffer' => [qw/opaque/] => 'void');};
  5         28  
655 5         1029 eval{$ffi->attach('GDALGeneralCmdLineProcessor' => [qw/int string_pointer int/] => 'int');};
  5         32  
656 5         768 eval{$ffi->attach('GDALSwapWords' => [qw/opaque int int int/] => 'void');};
  5         74  
657 5         1211 eval{$ffi->attach('GDALSwapWordsEx' => [qw/opaque int size_t int/] => 'void');};
  5         34  
658 5         1138 eval{$ffi->attach('GDALCopyWords' => ['opaque','unsigned int','int','opaque','unsigned int','int','int'] => 'void');};
  5         51  
659 5         1565 eval{$ffi->attach('GDALCopyWords64' => ['opaque','unsigned int','int','opaque','unsigned int','int','int'] => 'void');};
  5         49  
660 5         1467 eval{$ffi->attach('GDALCopyBits' => [qw/pointer int int pointer int int int int/] => 'void');};
  5         43  
661 5         1171 eval{$ffi->attach('GDALLoadWorldFile' => [qw/string double*/] => 'int');};
  5         25  
662 5         694 eval{$ffi->attach('GDALReadWorldFile' => [qw/string string double*/] => 'int');};
  5         37  
663 5         722 eval{$ffi->attach('GDALWriteWorldFile' => [qw/string string double*/] => 'int');};
  5         34  
664 5         722 eval{$ffi->attach('GDALLoadTabFile' => [qw/string double* string_pointer int* opaque/] => 'int');};
  5         30  
665 5         1089 eval{$ffi->attach('GDALReadTabFile' => [qw/string double* string_pointer int* opaque/] => 'int');};
  5         49  
666 5         1074 eval{$ffi->attach('GDALLoadOziMapFile' => [qw/string double* string_pointer int* opaque/] => 'int');};
  5         49  
667 5         1079 eval{$ffi->attach('GDALReadOziMapFile' => [qw/string double* string_pointer int* opaque/] => 'int');};
  5         29  
668 5         1123 eval{$ffi->attach('GDALDecToDMS' => [qw/double string int/] => 'string');};
  5         29  
669 5         996 eval{$ffi->attach('GDALPackedDMSToDec' => [qw/double/] => 'double');};
  5         24  
670 5         1045 eval{$ffi->attach('GDALDecToPackedDMS' => [qw/double/] => 'double');};
  5         37  
671 5         1008 eval{$ffi->attach('GDALVersionInfo' => [qw/string/] => 'string');};
  5         38  
672 5         687 eval{$ffi->attach('GDALCheckVersion' => [qw/int int string/] => 'int');};
  5         34  
673 5         800 eval{$ffi->attach('GDALExtractRPCInfo' => [qw/opaque opaque/] => 'int');};
  5         41  
674 5         1078 eval{$ffi->attach('GDALCreateColorTable' => ['unsigned int'] => 'opaque');};
  5         47  
675 5         902 eval{$ffi->attach('GDALDestroyColorTable' => [qw/opaque/] => 'void');};
  5         25  
676 5         1025 eval{$ffi->attach('GDALCloneColorTable' => [qw/opaque/] => 'opaque');};
  5         36  
677 5         1012 eval{$ffi->attach('GDALGetPaletteInterpretation' => [qw/opaque/] => 'unsigned int');};
  5         20  
678 5         896 eval{$ffi->attach('GDALGetColorEntryCount' => [qw/opaque/] => 'int');};
  5         24  
679 5         899 eval{$ffi->attach('GDALGetColorEntry' => [qw/opaque int/] => 'short[4]');};
  5         41  
680 5         1413 eval{$ffi->attach('GDALGetColorEntryAsRGB' => [qw/opaque int short[4]/] => 'int');};
  5         27  
681 5         939 eval{$ffi->attach('GDALSetColorEntry' => [qw/opaque int short[4]/] => 'void');};
  5         63  
682 5         1114 eval{$ffi->attach('GDALCreateColorRamp' => [qw/opaque int short[4] int short[4]/] => 'void');};
  5         29  
683 5         1261 eval{$ffi->attach('GDALCreateRasterAttributeTable' => [] => 'opaque');};
  5         34  
684 5         804 eval{$ffi->attach('GDALDestroyRasterAttributeTable' => [qw/opaque/] => 'void');};
  5         40  
685 5         998 eval{$ffi->attach('GDALRATGetColumnCount' => [qw/opaque/] => 'int');};
  5         37  
686 5         889 eval{$ffi->attach('GDALRATGetNameOfCol' => [qw/opaque int/] => 'string');};
  5         38  
687 5         945 eval{$ffi->attach('GDALRATGetUsageOfCol' => [qw/opaque int/] => 'unsigned int');};
  5         49  
688 5         934 eval{$ffi->attach('GDALRATGetTypeOfCol' => [qw/opaque int/] => 'unsigned int');};
  5         34  
689 5         924 eval{$ffi->attach('GDALRATGetColOfUsage' => ['opaque','unsigned int'] => 'int');};
  5         33  
690 5         972 eval{$ffi->attach('GDALRATGetRowCount' => [qw/opaque/] => 'int');};
  5         32  
691 5         871 eval{$ffi->attach('GDALRATGetValueAsString' => [qw/opaque int int/] => 'string');};
  5         34  
692 5         947 eval{$ffi->attach('GDALRATGetValueAsInt' => [qw/opaque int int/] => 'int');};
  5         52  
693 5         943 eval{$ffi->attach('GDALRATGetValueAsDouble' => [qw/opaque int int/] => 'double');};
  5         38  
694 5         1165 eval{$ffi->attach('GDALRATSetValueAsString' => [qw/opaque int int string/] => 'void');};
  5         35  
695 5         1138 eval{$ffi->attach('GDALRATSetValueAsInt' => [qw/opaque int int int/] => 'void');};
  5         34  
696 5         1110 eval{$ffi->attach('GDALRATSetValueAsDouble' => [qw/opaque int int double/] => 'void');};
  5         31  
697 5         1373 eval{$ffi->attach('GDALRATChangesAreWrittenToFile' => [qw/opaque/] => 'int');};
  5         25  
698 5         931 eval{$ffi->attach('GDALRATValuesIOAsDouble' => ['opaque','unsigned int','int','int','int','double*'] => 'int');};
  5         63  
699 5         1170 eval{$ffi->attach('GDALRATValuesIOAsInteger' => ['opaque','unsigned int','int','int','int','int*'] => 'int');};
  5         83  
700 5         1094 eval{$ffi->attach('GDALRATValuesIOAsString' => ['opaque','unsigned int','int','int','int','opaque'] => 'int');};
  5         30  
701 5         1250 eval{$ffi->attach('GDALRATSetRowCount' => [qw/opaque int/] => 'void');};
  5         26  
702 5         1056 eval{$ffi->attach('GDALRATCreateColumn' => ['opaque','string','unsigned int','unsigned int'] => 'int');};
  5         51  
703 5         967 eval{$ffi->attach('GDALRATSetLinearBinning' => [qw/opaque double double/] => 'int');};
  5         62  
704 5         1296 eval{$ffi->attach('GDALRATGetLinearBinning' => [qw/opaque double* double*/] => 'int');};
  5         30  
705 5         969 eval{$ffi->attach('GDALRATSetTableType' => ['opaque','unsigned int'] => 'int');};
  5         28  
706 5         917 eval{$ffi->attach('GDALRATGetTableType' => [qw/opaque/] => 'unsigned int');};
  5         29  
707 5         848 eval{$ffi->attach('GDALRATInitializeFromColorTable' => [qw/opaque opaque/] => 'int');};
  5         34  
708 5         1141 eval{$ffi->attach('GDALRATTranslateToColorTable' => [qw/opaque int/] => 'opaque');};
  5         49  
709 5         1062 eval{$ffi->attach('GDALRATDumpReadable' => [qw/opaque opaque/] => 'void');};
  5         48  
710 5         1217 eval{$ffi->attach('GDALRATClone' => [qw/opaque/] => 'opaque');};
  5         58  
711 5         992 eval{$ffi->attach('GDALRATSerializeJSON' => [qw/opaque/] => 'opaque');};
  5         22  
712 5         1105 eval{$ffi->attach('GDALRATGetRowOfValue' => [qw/opaque double/] => 'int');};
  5         29  
713 5         1061 eval{$ffi->attach('GDALRATRemoveStatistics' => [qw/opaque/] => 'void');};
  5         72  
714 5         1060 eval{$ffi->attach('GDALSetCacheMax' => [qw/int/] => 'void');};
  5         29  
715 5         878 eval{$ffi->attach('GDALGetCacheMax' => [] => 'int');};
  5         20  
716 5         650 eval{$ffi->attach('GDALGetCacheUsed' => [] => 'int');};
  5         22  
717 5         634 eval{$ffi->attach('GDALSetCacheMax64' => [qw/sint64/] => 'void');};
  5         65  
718 5         1046 eval{$ffi->attach('GDALGetCacheMax64' => [] => 'sint64');};
  5         26  
719 5         787 eval{$ffi->attach('GDALGetCacheUsed64' => [] => 'sint64');};
  5         28  
720 5         765 eval{$ffi->attach('GDALFlushCacheBlock' => [] => 'int');};
  5         35  
721 5         583 eval{$ffi->attach('GDALDatasetGetVirtualMem' => ['opaque','unsigned int','int','int','int','int','int','int','unsigned int','int','int*','int','sint64','sint64','size_t','size_t','int','opaque'] => 'opaque');};
  5         78  
722 5         2275 eval{$ffi->attach('GDALRasterBandGetVirtualMem' => ['opaque','unsigned int','int','int','int','int','int','int','unsigned int','int','sint64','size_t','size_t','int','opaque'] => 'opaque');};
  5         58  
723 5         1974 eval{$ffi->attach('GDALGetVirtualMemAuto' => ['opaque','unsigned int','int*','sint64*','opaque'] => 'opaque');};
  5         59  
724 5         1823 eval{$ffi->attach('GDALDatasetGetTiledVirtualMem' => ['opaque','unsigned int','int','int','int','int','int','int','unsigned int','int','int*','unsigned int','size_t','int','opaque'] => 'opaque');};
  5         67  
725 5         1882 eval{$ffi->attach('GDALRasterBandGetTiledVirtualMem' => ['opaque','unsigned int','int','int','int','int','int','int','unsigned int','size_t','int','opaque'] => 'opaque');};
  5         52  
726 5         1644 eval{$ffi->attach('GDALCreatePansharpenedVRT' => [qw/string opaque int uint64*/] => 'opaque');};
  5         25  
727 5         1132 eval{$ffi->attach('GDALGetJPEG2000Structure' => [qw/string opaque/] => 'opaque');};
  5         49  
728 5         1055 eval{$ffi->attach('GDALCreateMultiDimensional' => [qw/opaque string opaque opaque/] => 'opaque');};
  5         30  
729 5         1532 eval{$ffi->attach('GDALExtendedDataTypeCreate' => ['unsigned int'] => 'opaque');};
  5         50  
730 5         897 eval{$ffi->attach('GDALExtendedDataTypeCreateString' => [qw/size_t/] => 'opaque');};
  5         38  
731 5         915 eval{$ffi->attach('GDALExtendedDataTypeCreateCompound' => [qw/string size_t size_t opaque/] => 'opaque');};
  5         36  
732 5         1258 eval{$ffi->attach('GDALExtendedDataTypeRelease' => [qw/opaque/] => 'void');};
  5         26  
733 5         1073 eval{$ffi->attach('GDALExtendedDataTypeGetName' => [qw/opaque/] => 'string');};
  5         40  
734 5         966 eval{$ffi->attach('GDALExtendedDataTypeGetClass' => [qw/opaque/] => 'int');};
  5         31  
735 5         887 eval{$ffi->attach('GDALExtendedDataTypeGetNumericDataType' => [qw/opaque/] => 'unsigned int');};
  5         58  
736 5         914 eval{$ffi->attach('GDALExtendedDataTypeGetSize' => [qw/opaque/] => 'size_t');};
  5         25  
737 5         866 eval{$ffi->attach('GDALExtendedDataTypeGetMaxStringLength' => [qw/opaque/] => 'size_t');};
  5         33  
738 5         839 eval{$ffi->attach('GDALExtendedDataTypeGetComponents' => [qw/opaque size_t/] => 'uint64*');};
  5         32  
739 5         866 eval{$ffi->attach('GDALExtendedDataTypeFreeComponents' => [qw/uint64* size_t/] => 'void');};
  5         39  
740 5         995 eval{$ffi->attach('GDALExtendedDataTypeCanConvertTo' => [qw/opaque opaque/] => 'int');};
  5         52  
741 5         1085 eval{$ffi->attach('GDALExtendedDataTypeEquals' => [qw/opaque opaque/] => 'int');};
  5         39  
742 5         1091 eval{$ffi->attach('GDALEDTComponentCreate' => [qw/string size_t opaque/] => 'opaque');};
  5         77  
743 5         1159 eval{$ffi->attach('GDALEDTComponentRelease' => [qw/opaque/] => 'void');};
  5         25  
744 5         1008 eval{$ffi->attach('GDALEDTComponentGetName' => [qw/opaque/] => 'string');};
  5         24  
745 5         847 eval{$ffi->attach('GDALEDTComponentGetOffset' => [qw/opaque/] => 'size_t');};
  5         31  
746 5         847 eval{$ffi->attach('GDALEDTComponentGetType' => [qw/opaque/] => 'opaque');};
  5         33  
747 5         989 eval{$ffi->attach('GDALDatasetGetRootGroup' => [qw/opaque/] => 'opaque');};
  5         53  
748 5         1048 eval{$ffi->attach('GDALGroupRelease' => [qw/opaque/] => 'void');};
  5         39  
749 5         1001 eval{$ffi->attach('GDALGroupGetName' => [qw/opaque/] => 'string');};
  5         30  
750 5         822 eval{$ffi->attach('GDALGroupGetFullName' => [qw/opaque/] => 'string');};
  5         24  
751 5         965 eval{$ffi->attach('GDALGroupGetMDArrayNames' => [qw/opaque opaque/] => 'string_pointer');};
  5         52  
752 5         1145 eval{$ffi->attach('GDALGroupOpenMDArray' => [qw/opaque string opaque/] => 'opaque');};
  5         30  
753 5         1646 eval{$ffi->attach('GDALGroupGetGroupNames' => [qw/opaque opaque/] => 'string_pointer');};
  5         396  
754 5         1085 eval{$ffi->attach('GDALGroupOpenGroup' => [qw/opaque string opaque/] => 'opaque');};
  5         54  
755 5         1252 eval{$ffi->attach('GDALGroupGetDimensions' => [qw/opaque size_t opaque/] => 'uint64*');};
  5         34  
756 5         1092 eval{$ffi->attach('GDALGroupGetAttribute' => [qw/opaque string/] => 'opaque');};
  5         24  
757 5         1067 eval{$ffi->attach('GDALGroupGetAttributes' => [qw/opaque size_t opaque/] => 'uint64*');};
  5         34  
758 5         1076 eval{$ffi->attach('GDALGroupGetStructuralInfo' => [qw/opaque/] => 'opaque');};
  5         29  
759 5         1111 eval{$ffi->attach('GDALGroupCreateGroup' => [qw/opaque string opaque/] => 'opaque');};
  5         38  
760 5         1273 eval{$ffi->attach('GDALGroupCreateDimension' => [qw/opaque string string string uint64 opaque/] => 'opaque');};
  5         64  
761 5         1640 eval{$ffi->attach('GDALGroupCreateMDArray' => [qw/opaque string size_t uint64* opaque opaque/] => 'opaque');};
  5         39  
762 5         1518 eval{$ffi->attach('GDALGroupCreateAttribute' => [qw/opaque string size_t uint64* opaque opaque/] => 'opaque');};
  5         26  
763 5         1504 eval{$ffi->attach('GDALMDArrayRelease' => [qw/opaque/] => 'void');};
  5         25  
764 5         1035 eval{$ffi->attach('GDALMDArrayGetName' => [qw/opaque/] => 'string');};
  5         27  
765 5         837 eval{$ffi->attach('GDALMDArrayGetFullName' => [qw/opaque/] => 'string');};
  5         24  
766 5         876 eval{$ffi->attach('GDALMDArrayGetTotalElementsCount' => [qw/opaque/] => 'uint64');};
  5         128  
767 5         1018 eval{$ffi->attach('GDALMDArrayGetDimensionCount' => [qw/opaque/] => 'size_t');};
  5         38  
768 5         1077 eval{$ffi->attach('GDALMDArrayGetDimensions' => [qw/opaque size_t/] => 'uint64*');};
  5         42  
769 5         944 eval{$ffi->attach('GDALMDArrayGetDataType' => [qw/opaque/] => 'opaque');};
  5         27  
770 5         1000 eval{$ffi->attach('GDALMDArrayRead' => [qw/opaque uint64* size_t int64 int* opaque opaque opaque size_t/] => 'int');};
  5         46  
771 5         3758 eval{$ffi->attach('GDALMDArrayWrite' => [qw/opaque uint64* size_t int64 int* opaque opaque opaque size_t/] => 'int');};
  5         59  
772 5         1666 eval{$ffi->attach('GDALMDArrayGetAttribute' => [qw/opaque string/] => 'opaque');};
  5         42  
773 5         1171 eval{$ffi->attach('GDALMDArrayGetAttributes' => [qw/opaque size_t opaque/] => 'uint64*');};
  5         42  
774 5         1105 eval{$ffi->attach('GDALMDArrayCreateAttribute' => [qw/opaque string size_t uint64* opaque opaque/] => 'opaque');};
  5         51  
775 5         1584 eval{$ffi->attach('GDALMDArrayGetRawNoDataValue' => [qw/opaque/] => 'opaque');};
  5         23  
776 5         1000 eval{$ffi->attach('GDALMDArrayGetNoDataValueAsDouble' => [qw/opaque int*/] => 'double');};
  5         60  
777 5         1074 eval{$ffi->attach('GDALMDArraySetRawNoDataValue' => [qw/opaque opaque/] => 'int');};
  5         52  
778 5         1058 eval{$ffi->attach('GDALMDArraySetNoDataValueAsDouble' => [qw/opaque double/] => 'int');};
  5         25  
779 5         1044 eval{$ffi->attach('GDALMDArraySetScale' => [qw/opaque double/] => 'int');};
  5         33  
780 5         1057 eval{$ffi->attach('GDALMDArrayGetScale' => [qw/opaque int*/] => 'double');};
  5         28  
781 5         1197 eval{$ffi->attach('GDALMDArraySetOffset' => [qw/opaque double/] => 'int');};
  5         29  
782 5         1049 eval{$ffi->attach('GDALMDArrayGetOffset' => [qw/opaque int*/] => 'double');};
  5         80  
783 5         1158 eval{$ffi->attach('GDALMDArrayGetBlockSize' => [qw/opaque size_t/] => 'uint64');};
  5         26  
784 5         1095 eval{$ffi->attach('GDALMDArraySetUnit' => [qw/opaque string/] => 'int');};
  5         37  
785 5         962 eval{$ffi->attach('GDALMDArrayGetUnit' => [qw/opaque/] => 'string');};
  5         28  
786 5         896 eval{$ffi->attach('GDALMDArraySetSpatialRef' => [qw/opaque opaque/] => 'int');};
  5         41  
787 5         1082 eval{$ffi->attach('GDALMDArrayGetSpatialRef' => [qw/opaque/] => 'opaque');};
  5         32  
788 5         996 eval{$ffi->attach('GDALMDArrayGetProcessingChunkSize' => [qw/opaque size_t size_t/] => 'size_t');};
  5         47  
789 5         988 eval{$ffi->attach('GDALMDArrayGetStructuralInfo' => [qw/opaque/] => 'opaque');};
  5         32  
790 5         1041 eval{$ffi->attach('GDALMDArrayGetView' => [qw/opaque string/] => 'opaque');};
  5         40  
791 5         1100 eval{$ffi->attach('GDALMDArrayTranspose' => [qw/opaque size_t int*/] => 'opaque');};
  5         33  
792 5         1074 eval{$ffi->attach('GDALMDArrayGetUnscaled' => [qw/opaque/] => 'opaque');};
  5         57  
793 5         1030 eval{$ffi->attach('GDALMDArrayGetMask' => [qw/opaque opaque/] => 'opaque');};
  5         40  
794 5         1311 eval{$ffi->attach('GDALMDArrayAsClassicDataset' => [qw/opaque size_t size_t/] => 'opaque');};
  5         45  
795 5         1141 eval{$ffi->attach('GDALAttributeRelease' => [qw/opaque/] => 'void');};
  5         32  
796 5         998 eval{$ffi->attach('GDALReleaseAttributes' => [qw/uint64* size_t/] => 'void');};
  5         35  
797 5         898 eval{$ffi->attach('GDALAttributeGetName' => [qw/opaque/] => 'string');};
  5         26  
798 5         825 eval{$ffi->attach('GDALAttributeGetFullName' => [qw/opaque/] => 'string');};
  5         38  
799 5         899 eval{$ffi->attach('GDALAttributeGetTotalElementsCount' => [qw/opaque/] => 'uint64');};
  5         42  
800 5         1046 eval{$ffi->attach('GDALAttributeGetDimensionCount' => [qw/opaque/] => 'size_t');};
  5         34  
801 5         896 eval{$ffi->attach('GDALAttributeGetDimensionsSize' => [qw/opaque size_t/] => 'uint64');};
  5         37  
802 5         1128 eval{$ffi->attach('GDALAttributeGetDataType' => [qw/opaque/] => 'opaque');};
  5         39  
803 5         1092 eval{$ffi->attach('GDALAttributeReadAsRaw' => [qw/opaque size_t/] => 'pointer');};
  5         27  
804 5         884 eval{$ffi->attach('GDALAttributeFreeRawResult' => [qw/opaque pointer size_t/] => 'void');};
  5         39  
805 5         1086 eval{$ffi->attach('GDALAttributeReadAsString' => [qw/opaque/] => 'string');};
  5         24  
806 5         890 eval{$ffi->attach('GDALAttributeReadAsInt' => [qw/opaque/] => 'int');};
  5         36  
807 5         951 eval{$ffi->attach('GDALAttributeReadAsDouble' => [qw/opaque/] => 'double');};
  5         51  
808 5         1384 eval{$ffi->attach('GDALAttributeReadAsStringArray' => [qw/opaque/] => 'string_pointer');};
  5         21  
809 5         950 eval{$ffi->attach('GDALAttributeReadAsIntArray' => [qw/opaque size_t/] => 'int*');};
  5         39  
810 5         949 eval{$ffi->attach('GDALAttributeReadAsDoubleArray' => [qw/opaque size_t/] => 'double*');};
  5         55  
811 5         956 eval{$ffi->attach('GDALAttributeWriteRaw' => [qw/opaque opaque size_t/] => 'int');};
  5         34  
812 5         1110 eval{$ffi->attach('GDALAttributeWriteString' => [qw/opaque string/] => 'int');};
  5         29  
813 5         940 eval{$ffi->attach('GDALAttributeWriteStringArray' => [qw/opaque opaque/] => 'int');};
  5         40  
814 5         1082 eval{$ffi->attach('GDALAttributeWriteInt' => [qw/opaque int/] => 'int');};
  5         36  
815 5         890 eval{$ffi->attach('GDALAttributeWriteDouble' => [qw/opaque double/] => 'int');};
  5         22  
816 5         1051 eval{$ffi->attach('GDALAttributeWriteDoubleArray' => [qw/opaque double* size_t/] => 'int');};
  5         37  
817 5         950 eval{$ffi->attach('GDALDimensionRelease' => [qw/opaque/] => 'void');};
  5         26  
818 5         1146 eval{$ffi->attach('GDALReleaseDimensions' => [qw/uint64* size_t/] => 'void');};
  5         35  
819 5         988 eval{$ffi->attach('GDALDimensionGetName' => [qw/opaque/] => 'string');};
  5         27  
820 5         935 eval{$ffi->attach('GDALDimensionGetFullName' => [qw/opaque/] => 'string');};
  5         27  
821 5         849 eval{$ffi->attach('GDALDimensionGetType' => [qw/opaque/] => 'string');};
  5         23  
822 5         928 eval{$ffi->attach('GDALDimensionGetDirection' => [qw/opaque/] => 'string');};
  5         25  
823 5         862 eval{$ffi->attach('GDALDimensionGetSize' => [qw/opaque/] => 'uint64');};
  5         44  
824 5         1031 eval{$ffi->attach('GDALDimensionGetIndexingVariable' => [qw/opaque/] => 'opaque');};
  5         38  
825 5         1059 eval{$ffi->attach('GDALDimensionSetIndexingVariable' => [qw/opaque opaque/] => 'int');};
  5         25  
826             # from ogr/ogr_api.h
827 5         1040 eval{$ffi->attach('OGR_G_CreateFromWkb' => [qw/string opaque uint64* int/] => 'int');};
  5         36  
828 5         997 eval{$ffi->attach('OGR_G_CreateFromWkt' => [qw/string_pointer opaque uint64*/] => 'int');};
  5         67  
829 5         1029 eval{$ffi->attach('OGR_G_CreateFromFgf' => [qw/string opaque uint64* int int*/] => 'int');};
  5         43  
830 5         1127 eval{$ffi->attach('OGR_G_DestroyGeometry' => [qw/opaque/] => 'void');};
  5         46  
831 5         1119 eval{$ffi->attach('OGR_G_CreateGeometry' => ['unsigned int'] => 'opaque');};
  5         52  
832 5         939 eval{$ffi->attach('OGR_G_ApproximateArcAngles' => [qw/double double double double double double double double double/] => 'opaque');};
  5         69  
833 5         2711 eval{$ffi->attach('OGR_G_ForceToPolygon' => [qw/opaque/] => 'opaque');};
  5         26  
834 5         980 eval{$ffi->attach('OGR_G_ForceToLineString' => [qw/opaque/] => 'opaque');};
  5         28  
835 5         996 eval{$ffi->attach('OGR_G_ForceToMultiPolygon' => [qw/opaque/] => 'opaque');};
  5         41  
836 5         1010 eval{$ffi->attach('OGR_G_ForceToMultiPoint' => [qw/opaque/] => 'opaque');};
  5         32  
837 5         1021 eval{$ffi->attach('OGR_G_ForceToMultiLineString' => [qw/opaque/] => 'opaque');};
  5         53  
838 5         1114 eval{$ffi->attach('OGR_G_ForceTo' => ['opaque','unsigned int','string_pointer'] => 'opaque');};
  5         33  
839 5         1165 eval{$ffi->attach('OGR_G_RemoveLowerDimensionSubGeoms' => [qw/opaque/] => 'opaque');};
  5         32  
840 5         1051 eval{$ffi->attach('OGR_G_GetDimension' => [qw/opaque/] => 'int');};
  5         23  
841 5         881 eval{$ffi->attach('OGR_G_GetCoordinateDimension' => [qw/opaque/] => 'int');};
  5         32  
842 5         884 eval{$ffi->attach('OGR_G_CoordinateDimension' => [qw/opaque/] => 'int');};
  5         41  
843 5         896 eval{$ffi->attach('OGR_G_SetCoordinateDimension' => [qw/opaque int/] => 'void');};
  5         37  
844 5         1065 eval{$ffi->attach('OGR_G_Is3D' => [qw/opaque/] => 'int');};
  5         23  
845 5         954 eval{$ffi->attach('OGR_G_IsMeasured' => [qw/opaque/] => 'int');};
  5         32  
846 5         891 eval{$ffi->attach('OGR_G_Set3D' => [qw/opaque int/] => 'void');};
  5         29  
847 5         1188 eval{$ffi->attach('OGR_G_SetMeasured' => [qw/opaque int/] => 'void');};
  5         38  
848 5         1050 eval{$ffi->attach('OGR_G_Clone' => [qw/opaque/] => 'opaque');};
  5         34  
849 5         1108 eval{$ffi->attach('OGR_G_GetEnvelope' => [qw/opaque double[4]/] => 'void');};
  5         30  
850 5         1642 eval{$ffi->attach('OGR_G_GetEnvelope3D' => [qw/opaque double[6]/] => 'void');};
  5         47  
851 5         1213 eval{$ffi->attach('OGR_G_ImportFromWkb' => [qw/opaque string int/] => 'int');};
  5         37  
852 5         974 eval{$ffi->attach('OGR_G_ExportToWkb' => ['opaque','unsigned int','string'] => 'int');};
  5         39  
853 5         956 eval{$ffi->attach('OGR_G_ExportToIsoWkb' => ['opaque','unsigned int','string'] => 'int');};
  5         35  
854 5         915 eval{$ffi->attach('OGR_G_WkbSize' => [qw/opaque/] => 'int');};
  5         40  
855 5         940 eval{$ffi->attach('OGR_G_ImportFromWkt' => [qw/opaque string_pointer/] => 'int');};
  5         31  
856 5         900 eval{$ffi->attach('OGR_G_ExportToWkt' => [qw/opaque string_pointer/] => 'int');};
  5         30  
857 5         1051 eval{$ffi->attach('OGR_G_ExportToIsoWkt' => [qw/opaque string_pointer/] => 'int');};
  5         39  
858 5         912 eval{$ffi->attach('OGR_G_GetGeometryType' => [qw/opaque/] => 'unsigned int');};
  5         58  
859 5         926 eval{$ffi->attach('OGR_G_GetGeometryName' => [qw/opaque/] => 'string');};
  5         218  
860 5         945 eval{$ffi->attach('OGR_G_DumpReadable' => [qw/opaque opaque string/] => 'void');};
  5         54  
861 5         1296 eval{$ffi->attach('OGR_G_FlattenTo2D' => [qw/opaque/] => 'void');};
  5         36  
862 5         997 eval{$ffi->attach('OGR_G_CloseRings' => [qw/opaque/] => 'void');};
  5         23  
863 5         975 eval{$ffi->attach('OGR_G_CreateFromGML' => [qw/string/] => 'opaque');};
  5         31  
864 5         861 eval{$ffi->attach('OGR_G_ExportToGML' => [qw/opaque/] => 'opaque');};
  5         33  
865 5         998 eval{$ffi->attach('OGR_G_ExportToGMLEx' => [qw/opaque opaque/] => 'opaque');};
  5         28  
866 5         1339 eval{$ffi->attach('OGR_G_CreateFromGMLTree' => [qw/opaque/] => 'opaque');};
  5         91  
867 5         1033 eval{$ffi->attach('OGR_G_ExportToGMLTree' => [qw/opaque/] => 'opaque');};
  5         31  
868 5         988 eval{$ffi->attach('OGR_G_ExportEnvelopeToGMLTree' => [qw/opaque/] => 'opaque');};
  5         38  
869 5         993 eval{$ffi->attach('OGR_G_ExportToKML' => [qw/opaque string/] => 'opaque');};
  5         33  
870 5         1143 eval{$ffi->attach('OGR_G_ExportToJson' => [qw/opaque/] => 'opaque');};
  5         30  
871 5         1097 eval{$ffi->attach('OGR_G_ExportToJsonEx' => [qw/opaque opaque/] => 'opaque');};
  5         34  
872 5         1284 eval{$ffi->attach('OGR_G_CreateGeometryFromJson' => [qw/string/] => 'opaque');};
  5         26  
873 5         894 eval{$ffi->attach('OGR_G_CreateGeometryFromEsriJson' => [qw/string/] => 'opaque');};
  5         25  
874 5         876 eval{$ffi->attach('OGR_G_AssignSpatialReference' => [qw/opaque opaque/] => 'void');};
  5         29  
875 5         1280 eval{$ffi->attach('OGR_G_GetSpatialReference' => [qw/opaque/] => 'opaque');};
  5         24  
876 5         1058 eval{$ffi->attach('OGR_G_Transform' => [qw/opaque opaque/] => 'int');};
  5         26  
877 5         1064 eval{$ffi->attach('OGR_G_TransformTo' => [qw/opaque opaque/] => 'int');};
  5         35  
878 5         1121 eval{$ffi->attach('OGR_GeomTransformer_Create' => [qw/opaque opaque/] => 'opaque');};
  5         41  
879 5         1250 eval{$ffi->attach('OGR_GeomTransformer_Transform' => [qw/opaque opaque/] => 'opaque');};
  5         32  
880 5         1184 eval{$ffi->attach('OGR_GeomTransformer_Destroy' => [qw/opaque/] => 'void');};
  5         24  
881 5         1018 eval{$ffi->attach('OGR_G_Simplify' => [qw/opaque double/] => 'opaque');};
  5         33  
882 5         1232 eval{$ffi->attach('OGR_G_SimplifyPreserveTopology' => [qw/opaque double/] => 'opaque');};
  5         30  
883 5         1252 eval{$ffi->attach('OGR_G_DelaunayTriangulation' => [qw/opaque double int/] => 'opaque');};
  5         32  
884 5         1260 eval{$ffi->attach('OGR_G_Segmentize' => [qw/opaque double/] => 'void');};
  5         29  
885 5         1212 eval{$ffi->attach('OGR_G_Intersects' => [qw/opaque opaque/] => 'int');};
  5         28  
886 5         1084 eval{$ffi->attach('OGR_G_Equals' => [qw/opaque opaque/] => 'int');};
  5         34  
887 5         1164 eval{$ffi->attach('OGR_G_Disjoint' => [qw/opaque opaque/] => 'int');};
  5         39  
888 5         1144 eval{$ffi->attach('OGR_G_Touches' => [qw/opaque opaque/] => 'int');};
  5         63  
889 5         1155 eval{$ffi->attach('OGR_G_Crosses' => [qw/opaque opaque/] => 'int');};
  5         77  
890 5         1169 eval{$ffi->attach('OGR_G_Within' => [qw/opaque opaque/] => 'int');};
  5         32  
891 5         1247 eval{$ffi->attach('OGR_G_Contains' => [qw/opaque opaque/] => 'int');};
  5         42  
892 5         1117 eval{$ffi->attach('OGR_G_Overlaps' => [qw/opaque opaque/] => 'int');};
  5         36  
893 5         1099 eval{$ffi->attach('OGR_G_Boundary' => [qw/opaque/] => 'opaque');};
  5         24  
894 5         1030 eval{$ffi->attach('OGR_G_ConvexHull' => [qw/opaque/] => 'opaque');};
  5         25  
895 5         1103 eval{$ffi->attach('OGR_G_Buffer' => [qw/opaque double int/] => 'opaque');};
  5         30  
896 5         1368 eval{$ffi->attach('OGR_G_Intersection' => [qw/opaque opaque/] => 'opaque');};
  5         33  
897 5         1267 eval{$ffi->attach('OGR_G_Union' => [qw/opaque opaque/] => 'opaque');};
  5         38  
898 5         1277 eval{$ffi->attach('OGR_G_UnionCascaded' => [qw/opaque/] => 'opaque');};
  5         26  
899 5         1066 eval{$ffi->attach('OGR_G_PointOnSurface' => [qw/opaque/] => 'opaque');};
  5         22  
900 5         1022 eval{$ffi->attach('OGR_G_Difference' => [qw/opaque opaque/] => 'opaque');};
  5         35  
901 5         1263 eval{$ffi->attach('OGR_G_SymDifference' => [qw/opaque opaque/] => 'opaque');};
  5         34  
902 5         1244 eval{$ffi->attach('OGR_G_Distance' => [qw/opaque opaque/] => 'double');};
  5         43  
903 5         1278 eval{$ffi->attach('OGR_G_Distance3D' => [qw/opaque opaque/] => 'double');};
  5         39  
904 5         1285 eval{$ffi->attach('OGR_G_Length' => [qw/opaque/] => 'double');};
  5         35  
905 5         1042 eval{$ffi->attach('OGR_G_Area' => [qw/opaque/] => 'double');};
  5         36  
906 5         1035 eval{$ffi->attach('OGR_G_Centroid' => [qw/opaque opaque/] => 'int');};
  5         36  
907 5         1153 eval{$ffi->attach('OGR_G_Value' => [qw/opaque double/] => 'opaque');};
  5         29  
908 5         1303 eval{$ffi->attach('OGR_G_Empty' => [qw/opaque/] => 'void');};
  5         42  
909 5         1080 eval{$ffi->attach('OGR_G_IsEmpty' => [qw/opaque/] => 'int');};
  5         27  
910 5         928 eval{$ffi->attach('OGR_G_IsValid' => [qw/opaque/] => 'int');};
  5         35  
911 5         916 eval{$ffi->attach('OGR_G_MakeValid' => [qw/opaque/] => 'opaque');};
  5         42  
912 5         1141 eval{$ffi->attach('OGR_G_IsSimple' => [qw/opaque/] => 'int');};
  5         24  
913 5         862 eval{$ffi->attach('OGR_G_IsRing' => [qw/opaque/] => 'int');};
  5         30  
914 5         866 eval{$ffi->attach('OGR_G_Polygonize' => [qw/opaque/] => 'opaque');};
  5         27  
915 5         999 eval{$ffi->attach('OGR_G_Intersect' => [qw/opaque opaque/] => 'int');};
  5         26  
916 5         1024 eval{$ffi->attach('OGR_G_Equal' => [qw/opaque opaque/] => 'int');};
  5         28  
917 5         1077 eval{$ffi->attach('OGR_G_SymmetricDifference' => [qw/opaque opaque/] => 'opaque');};
  5         41  
918 5         1226 eval{$ffi->attach('OGR_G_GetArea' => [qw/opaque/] => 'double');};
  5         39  
919 5         1007 eval{$ffi->attach('OGR_G_GetBoundary' => [qw/opaque/] => 'opaque');};
  5         37  
920 5         1021 eval{$ffi->attach('OGR_G_GetPointCount' => [qw/opaque/] => 'int');};
  5         59  
921 5         889 eval{$ffi->attach('OGR_G_GetPoints' => [qw/opaque opaque int opaque int opaque int/] => 'int');};
  5         34  
922 5         1688 eval{$ffi->attach('OGR_G_GetPointsZM' => [qw/opaque opaque int opaque int opaque int opaque int/] => 'int');};
  5         33  
923 5         1862 eval{$ffi->attach('OGR_G_GetX' => [qw/opaque int/] => 'double');};
  5         46  
924 5         1042 eval{$ffi->attach('OGR_G_GetY' => [qw/opaque int/] => 'double');};
  5         48  
925 5         1106 eval{$ffi->attach('OGR_G_GetZ' => [qw/opaque int/] => 'double');};
  5         27  
926 5         1133 eval{$ffi->attach('OGR_G_GetM' => [qw/opaque int/] => 'double');};
  5         34  
927 5         1110 eval{$ffi->attach('OGR_G_GetPoint' => [qw/opaque int double* double* double*/] => 'void');};
  5         35  
928 5         1190 eval{$ffi->attach('OGR_G_GetPointZM' => [qw/opaque int double* double* double* double*/] => 'void');};
  5         41  
929 5         1331 eval{$ffi->attach('OGR_G_SetPointCount' => [qw/opaque int/] => 'void');};
  5         40  
930 5         1065 eval{$ffi->attach('OGR_G_SetPoint' => [qw/opaque int double double double/] => 'void');};
  5         59  
931 5         1665 eval{$ffi->attach('OGR_G_SetPoint_2D' => [qw/opaque int double double/] => 'void');};
  5         29  
932 5         1524 eval{$ffi->attach('OGR_G_SetPointM' => [qw/opaque int double double double/] => 'void');};
  5         36  
933 5         1735 eval{$ffi->attach('OGR_G_SetPointZM' => [qw/opaque int double double double double/] => 'void');};
  5         35  
934 5         1894 eval{$ffi->attach('OGR_G_AddPoint' => [qw/opaque double double double/] => 'void');};
  5         37  
935 5         1615 eval{$ffi->attach('OGR_G_AddPoint_2D' => [qw/opaque double double/] => 'void');};
  5         37  
936 5         1466 eval{$ffi->attach('OGR_G_AddPointM' => [qw/opaque double double double/] => 'void');};
  5         34  
937 5         1601 eval{$ffi->attach('OGR_G_AddPointZM' => [qw/opaque double double double double/] => 'void');};
  5         47  
938 5         1871 eval{$ffi->attach('OGR_G_SetPoints' => [qw/opaque int opaque int opaque int opaque int/] => 'void');};
  5         42  
939 5         1780 eval{$ffi->attach('OGR_G_SetPointsZM' => [qw/opaque int opaque int opaque int opaque int opaque int/] => 'void');};
  5         100  
940 5         2098 eval{$ffi->attach('OGR_G_SwapXY' => [qw/opaque/] => 'void');};
  5         37  
941 5         1069 eval{$ffi->attach('OGR_G_GetGeometryCount' => [qw/opaque/] => 'int');};
  5         23  
942 5         934 eval{$ffi->attach('OGR_G_GetGeometryRef' => [qw/opaque int/] => 'opaque');};
  5         37  
943 5         1138 eval{$ffi->attach('OGR_G_AddGeometry' => [qw/opaque opaque/] => 'int');};
  5         74  
944 5         1085 eval{$ffi->attach('OGR_G_AddGeometryDirectly' => [qw/opaque opaque/] => 'int');};
  5         44  
945 5         1064 eval{$ffi->attach('OGR_G_RemoveGeometry' => [qw/opaque int int/] => 'int');};
  5         26  
946 5         949 eval{$ffi->attach('OGR_G_HasCurveGeometry' => [qw/opaque int/] => 'int');};
  5         29  
947 5         950 eval{$ffi->attach('OGR_G_GetLinearGeometry' => [qw/opaque double string_pointer/] => 'opaque');};
  5         40  
948 5         1256 eval{$ffi->attach('OGR_G_GetCurveGeometry' => [qw/opaque string_pointer/] => 'opaque');};
  5         43  
949 5         1109 eval{$ffi->attach('OGRBuildPolygonFromEdges' => [qw/opaque int int double int*/] => 'opaque');};
  5         55  
950 5         1382 eval{$ffi->attach('OGRSetGenerate_DB2_V72_BYTE_ORDER' => [qw/int/] => 'int');};
  5         69  
951 5         791 eval{$ffi->attach('OGRGetGenerate_DB2_V72_BYTE_ORDER' => [] => 'int');};
  5         26  
952 5         633 eval{$ffi->attach('OGRSetNonLinearGeometriesEnabledFlag' => [qw/int/] => 'void');};
  5         25  
953 5         1643 eval{$ffi->attach('OGRGetNonLinearGeometriesEnabledFlag' => [] => 'int');};
  5         36  
954 5         657 eval{$ffi->attach('OGR_Fld_Create' => ['string','unsigned int'] => 'opaque');};
  5         31  
955 5         1038 eval{$ffi->attach('OGR_Fld_Destroy' => [qw/opaque/] => 'void');};
  5         43  
956 5         1086 eval{$ffi->attach('OGR_Fld_SetName' => [qw/opaque string/] => 'void');};
  5         33  
957 5         1111 eval{$ffi->attach('OGR_Fld_GetNameRef' => [qw/opaque/] => 'string');};
  5         31  
958 5         958 eval{$ffi->attach('OGR_Fld_GetType' => [qw/opaque/] => 'unsigned int');};
  5         43  
959 5         954 eval{$ffi->attach('OGR_Fld_SetType' => ['opaque','unsigned int'] => 'void');};
  5         36  
960 5         1169 eval{$ffi->attach('OGR_Fld_GetSubType' => [qw/opaque/] => 'unsigned int');};
  5         30  
961 5         954 eval{$ffi->attach('OGR_Fld_SetSubType' => ['opaque','unsigned int'] => 'void');};
  5         33  
962 5         1114 eval{$ffi->attach('OGR_Fld_GetJustify' => [qw/opaque/] => 'unsigned int');};
  5         42  
963 5         927 eval{$ffi->attach('OGR_Fld_SetJustify' => ['opaque','unsigned int'] => 'void');};
  5         33  
964 5         1098 eval{$ffi->attach('OGR_Fld_GetWidth' => [qw/opaque/] => 'int');};
  5         29  
965 5         915 eval{$ffi->attach('OGR_Fld_SetWidth' => [qw/opaque int/] => 'void');};
  5         41  
966 5         1162 eval{$ffi->attach('OGR_Fld_GetPrecision' => [qw/opaque/] => 'int');};
  5         24  
967 5         940 eval{$ffi->attach('OGR_Fld_SetPrecision' => [qw/opaque int/] => 'void');};
  5         49  
968 5         1101 eval{$ffi->attach('OGR_Fld_Set' => ['opaque','string','unsigned int','int','int','unsigned int'] => 'void');};
  5         37  
969 5         1331 eval{$ffi->attach('OGR_Fld_IsIgnored' => [qw/opaque/] => 'int');};
  5         24  
970 5         916 eval{$ffi->attach('OGR_Fld_SetIgnored' => [qw/opaque int/] => 'void');};
  5         8261  
971 5         1193 eval{$ffi->attach('OGR_Fld_IsNullable' => [qw/opaque/] => 'int');};
  5         30  
972 5         916 eval{$ffi->attach('OGR_Fld_SetNullable' => [qw/opaque int/] => 'void');};
  5         34  
973 5         1135 eval{$ffi->attach('OGR_Fld_GetDefault' => [qw/opaque/] => 'string');};
  5         26  
974 5         910 eval{$ffi->attach('OGR_Fld_SetDefault' => [qw/opaque string/] => 'void');};
  5         30  
975 5         1065 eval{$ffi->attach('OGR_Fld_IsDefaultDriverSpecific' => [qw/opaque/] => 'int');};
  5         46  
976 5         899 eval{$ffi->attach('OGR_GetFieldTypeName' => ['unsigned int'] => 'string');};
  5         49  
977 5         680 eval{$ffi->attach('OGR_GetFieldSubTypeName' => ['unsigned int'] => 'string');};
  5         21  
978 5         692 eval{$ffi->attach('OGR_AreTypeSubTypeCompatible' => ['unsigned int','unsigned int'] => 'int');};
  5         27  
979 5         738 eval{$ffi->attach('OGR_GFld_Create' => ['string','unsigned int'] => 'opaque');};
  5         83  
980 5         994 eval{$ffi->attach('OGR_GFld_Destroy' => [qw/opaque/] => 'void');};
  5         27  
981 5         1057 eval{$ffi->attach('OGR_GFld_SetName' => [qw/opaque string/] => 'void');};
  5         38  
982 5         1109 eval{$ffi->attach('OGR_GFld_GetNameRef' => [qw/opaque/] => 'string');};
  5         61  
983 5         905 eval{$ffi->attach('OGR_GFld_GetType' => [qw/opaque/] => 'unsigned int');};
  5         28  
984 5         889 eval{$ffi->attach('OGR_GFld_SetType' => ['opaque','unsigned int'] => 'void');};
  5         42  
985 5         1090 eval{$ffi->attach('OGR_GFld_GetSpatialRef' => [qw/opaque/] => 'opaque');};
  5         53  
986 5         1109 eval{$ffi->attach('OGR_GFld_SetSpatialRef' => [qw/opaque opaque/] => 'void');};
  5         31  
987 5         1222 eval{$ffi->attach('OGR_GFld_IsNullable' => [qw/opaque/] => 'int');};
  5         43  
988 5         919 eval{$ffi->attach('OGR_GFld_SetNullable' => [qw/opaque int/] => 'void');};
  5         28  
989 5         1134 eval{$ffi->attach('OGR_GFld_IsIgnored' => [qw/opaque/] => 'int');};
  5         30  
990 5         907 eval{$ffi->attach('OGR_GFld_SetIgnored' => [qw/opaque int/] => 'void');};
  5         48  
991 5         1122 eval{$ffi->attach('OGR_FD_Create' => [qw/string/] => 'opaque');};
  5         35  
992 5         994 eval{$ffi->attach('OGR_FD_Destroy' => [qw/opaque/] => 'void');};
  5         29  
993 5         1020 eval{$ffi->attach('OGR_FD_Release' => [qw/opaque/] => 'void');};
  5         26  
994 5         1002 eval{$ffi->attach('OGR_FD_GetName' => [qw/opaque/] => 'string');};
  5         28  
995 5         910 eval{$ffi->attach('OGR_FD_GetFieldCount' => [qw/opaque/] => 'int');};
  5         37  
996 5         955 eval{$ffi->attach('OGR_FD_GetFieldDefn' => [qw/opaque int/] => 'opaque');};
  5         38  
997 5         1105 eval{$ffi->attach('OGR_FD_GetFieldIndex' => [qw/opaque string/] => 'int');};
  5         47  
998 5         1029 eval{$ffi->attach('OGR_FD_AddFieldDefn' => [qw/opaque opaque/] => 'void');};
  5         34  
999 5         1261 eval{$ffi->attach('OGR_FD_DeleteFieldDefn' => [qw/opaque int/] => 'int');};
  5         33  
1000 5         965 eval{$ffi->attach('OGR_FD_ReorderFieldDefns' => [qw/opaque int*/] => 'int');};
  5         41  
1001 5         913 eval{$ffi->attach('OGR_FD_GetGeomType' => [qw/opaque/] => 'unsigned int');};
  5         36  
1002 5         875 eval{$ffi->attach('OGR_FD_SetGeomType' => ['opaque','unsigned int'] => 'void');};
  5         42  
1003 5         1103 eval{$ffi->attach('OGR_FD_IsGeometryIgnored' => [qw/opaque/] => 'int');};
  5         43  
1004 5         926 eval{$ffi->attach('OGR_FD_SetGeometryIgnored' => [qw/opaque int/] => 'void');};
  5         30  
1005 5         1186 eval{$ffi->attach('OGR_FD_IsStyleIgnored' => [qw/opaque/] => 'int');};
  5         40  
1006 5         921 eval{$ffi->attach('OGR_FD_SetStyleIgnored' => [qw/opaque int/] => 'void');};
  5         30  
1007 5         1119 eval{$ffi->attach('OGR_FD_Reference' => [qw/opaque/] => 'int');};
  5         28  
1008 5         907 eval{$ffi->attach('OGR_FD_Dereference' => [qw/opaque/] => 'int');};
  5         40  
1009 5         857 eval{$ffi->attach('OGR_FD_GetReferenceCount' => [qw/opaque/] => 'int');};
  5         39  
1010 5         842 eval{$ffi->attach('OGR_FD_GetGeomFieldCount' => [qw/opaque/] => 'int');};
  5         23  
1011 5         871 eval{$ffi->attach('OGR_FD_GetGeomFieldDefn' => [qw/opaque int/] => 'opaque');};
  5         32  
1012 5         1113 eval{$ffi->attach('OGR_FD_GetGeomFieldIndex' => [qw/opaque string/] => 'int');};
  5         27  
1013 5         922 eval{$ffi->attach('OGR_FD_AddGeomFieldDefn' => [qw/opaque opaque/] => 'void');};
  5         43  
1014 5         1318 eval{$ffi->attach('OGR_FD_DeleteGeomFieldDefn' => [qw/opaque int/] => 'int');};
  5         31  
1015 5         954 eval{$ffi->attach('OGR_FD_IsSame' => [qw/opaque opaque/] => 'int');};
  5         57  
1016 5         1140 eval{$ffi->attach('OGR_F_Create' => [qw/opaque/] => 'opaque');};
  5         25  
1017 5         1116 eval{$ffi->attach('OGR_F_Destroy' => [qw/opaque/] => 'void');};
  5         38  
1018 5         1160 eval{$ffi->attach('OGR_F_GetDefnRef' => [qw/opaque/] => 'opaque');};
  5         43  
1019 5         1037 eval{$ffi->attach('OGR_F_SetGeometryDirectly' => [qw/opaque opaque/] => 'int');};
  5         44  
1020 5         1094 eval{$ffi->attach('OGR_F_SetGeometry' => [qw/opaque opaque/] => 'int');};
  5         33  
1021 5         1409 eval{$ffi->attach('OGR_F_GetGeometryRef' => [qw/opaque/] => 'opaque');};
  5         27  
1022 5         1024 eval{$ffi->attach('OGR_F_StealGeometry' => [qw/opaque/] => 'opaque');};
  5         34  
1023 5         1035 eval{$ffi->attach('OGR_F_Clone' => [qw/opaque/] => 'opaque');};
  5         23  
1024 5         1098 eval{$ffi->attach('OGR_F_Equal' => [qw/opaque opaque/] => 'int');};
  5         38  
1025 5         1110 eval{$ffi->attach('OGR_F_GetFieldCount' => [qw/opaque/] => 'int');};
  5         23  
1026 5         898 eval{$ffi->attach('OGR_F_GetFieldDefnRef' => [qw/opaque int/] => 'opaque');};
  5         27  
1027 5         1131 eval{$ffi->attach('OGR_F_GetFieldIndex' => [qw/opaque string/] => 'int');};
  5         35  
1028 5         920 eval{$ffi->attach('OGR_F_IsFieldSet' => [qw/opaque int/] => 'int');};
  5         60  
1029 5         978 eval{$ffi->attach('OGR_F_UnsetField' => [qw/opaque int/] => 'void');};
  5         34  
1030 5         1104 eval{$ffi->attach('OGR_F_IsFieldNull' => [qw/opaque int/] => 'int');};
  5         36  
1031 5         948 eval{$ffi->attach('OGR_F_IsFieldSetAndNotNull' => [qw/opaque int/] => 'int');};
  5         31  
1032 5         980 eval{$ffi->attach('OGR_F_SetFieldNull' => [qw/opaque int/] => 'void');};
  5         30  
1033 5         1070 eval{$ffi->attach('OGR_F_GetRawFieldRef' => [qw/opaque int/] => 'opaque');};
  5         43  
1034 5         1065 eval{$ffi->attach('OGR_RawField_IsUnset' => [qw/opaque/] => 'int');};
  5         46  
1035 5         894 eval{$ffi->attach('OGR_RawField_IsNull' => [qw/opaque/] => 'int');};
  5         24  
1036 5         930 eval{$ffi->attach('OGR_RawField_SetUnset' => [qw/opaque/] => 'void');};
  5         39  
1037 5         1015 eval{$ffi->attach('OGR_RawField_SetNull' => [qw/opaque/] => 'void');};
  5         24  
1038 5         1031 eval{$ffi->attach('OGR_F_GetFieldAsInteger' => [qw/opaque int/] => 'int');};
  5         45  
1039 5         913 eval{$ffi->attach('OGR_F_GetFieldAsInteger64' => [qw/opaque int/] => 'sint64');};
  5         29  
1040 5         1094 eval{$ffi->attach('OGR_F_GetFieldAsDouble' => [qw/opaque int/] => 'double');};
  5         24  
1041 5         1079 eval{$ffi->attach('OGR_F_GetFieldAsString' => [qw/opaque int/] => 'string');};
  5         44  
1042 5         910 eval{$ffi->attach('OGR_F_GetFieldAsIntegerList' => [qw/opaque int int*/] => 'pointer');};
  5         35  
1043 5         980 eval{$ffi->attach('OGR_F_GetFieldAsInteger64List' => [qw/opaque int int*/] => 'pointer');};
  5         25  
1044 5         964 eval{$ffi->attach('OGR_F_GetFieldAsDoubleList' => [qw/opaque int int*/] => 'pointer');};
  5         26  
1045 5         1009 eval{$ffi->attach('OGR_F_GetFieldAsStringList' => [qw/opaque int/] => 'opaque');};
  5         34  
1046 5         1122 eval{$ffi->attach('OGR_F_GetFieldAsBinary' => [qw/opaque int int*/] => 'pointer');};
  5         41  
1047 5         961 eval{$ffi->attach('OGR_F_GetFieldAsDateTime' => [qw/opaque int int* int* int* int* int* int* int*/] => 'int');};
  5         67  
1048 5         1281 eval{$ffi->attach('OGR_F_GetFieldAsDateTimeEx' => [qw/opaque int int* int* int* int* int* float* int*/] => 'int');};
  5         40  
1049 5         1193 eval{$ffi->attach('OGR_F_SetFieldInteger' => [qw/opaque int int/] => 'void');};
  5         33  
1050 5         1144 eval{$ffi->attach('OGR_F_SetFieldInteger64' => [qw/opaque int sint64/] => 'void');};
  5         28  
1051 5         1252 eval{$ffi->attach('OGR_F_SetFieldDouble' => [qw/opaque int double/] => 'void');};
  5         25  
1052 5         1306 eval{$ffi->attach('OGR_F_SetFieldString' => [qw/opaque int string/] => 'void');};
  5         36  
1053 5         1080 eval{$ffi->attach('OGR_F_SetFieldIntegerList' => [qw/opaque int int int[]/] => 'void');};
  5         37  
1054 5         1737 eval{$ffi->attach('OGR_F_SetFieldInteger64List' => [qw/opaque int int sint64[]/] => 'void');};
  5         41  
1055 5         1610 eval{$ffi->attach('OGR_F_SetFieldDoubleList' => [qw/opaque int int double[]/] => 'void');};
  5         44  
1056 5         1669 eval{$ffi->attach('OGR_F_SetFieldStringList' => [qw/opaque int opaque/] => 'void');};
  5         29  
1057 5         1228 eval{$ffi->attach('OGR_F_SetFieldRaw' => [qw/opaque int opaque/] => 'void');};
  5         54  
1058 5         1312 eval{$ffi->attach('OGR_F_SetFieldBinary' => [qw/opaque int int opaque/] => 'void');};
  5         46  
1059 5         1431 eval{$ffi->attach('OGR_F_SetFieldDateTime' => [qw/opaque int int int int int int int int/] => 'void');};
  5         57  
1060 5         1422 eval{$ffi->attach('OGR_F_SetFieldDateTimeEx' => [qw/opaque int int int int int int float int/] => 'void');};
  5         54  
1061 5         1626 eval{$ffi->attach('OGR_F_GetGeomFieldCount' => [qw/opaque/] => 'int');};
  5         28  
1062 5         863 eval{$ffi->attach('OGR_F_GetGeomFieldDefnRef' => [qw/opaque int/] => 'opaque');};
  5         29  
1063 5         1085 eval{$ffi->attach('OGR_F_GetGeomFieldIndex' => [qw/opaque string/] => 'int');};
  5         33  
1064 5         934 eval{$ffi->attach('OGR_F_GetGeomFieldRef' => [qw/opaque int/] => 'opaque');};
  5         40  
1065 5         1111 eval{$ffi->attach('OGR_F_SetGeomFieldDirectly' => [qw/opaque int opaque/] => 'int');};
  5         33  
1066 5         1194 eval{$ffi->attach('OGR_F_SetGeomField' => [qw/opaque int opaque/] => 'int');};
  5         60  
1067 5         1118 eval{$ffi->attach('OGR_F_GetFID' => [qw/opaque/] => 'sint64');};
  5         41  
1068 5         1037 eval{$ffi->attach('OGR_F_SetFID' => [qw/opaque sint64/] => 'int');};
  5         51  
1069 5         1092 eval{$ffi->attach('OGR_F_DumpReadable' => [qw/opaque opaque/] => 'void');};
  5         54  
1070 5         1275 eval{$ffi->attach('OGR_F_SetFrom' => [qw/opaque opaque int/] => 'int');};
  5         36  
1071 5         1136 eval{$ffi->attach('OGR_F_SetFromWithMap' => [qw/opaque opaque int int*/] => 'int');};
  5         64  
1072 5         1202 eval{$ffi->attach('OGR_F_GetStyleString' => [qw/opaque/] => 'string');};
  5         46  
1073 5         864 eval{$ffi->attach('OGR_F_SetStyleString' => [qw/opaque string/] => 'void');};
  5         28  
1074 5         1063 eval{$ffi->attach('OGR_F_SetStyleStringDirectly' => [qw/opaque string/] => 'void');};
  5         37  
1075 5         1026 eval{$ffi->attach('OGR_F_GetStyleTable' => [qw/opaque/] => 'opaque');};
  5         26  
1076 5         1002 eval{$ffi->attach('OGR_F_SetStyleTableDirectly' => [qw/opaque opaque/] => 'void');};
  5         48  
1077 5         1266 eval{$ffi->attach('OGR_F_SetStyleTable' => [qw/opaque opaque/] => 'void');};
  5         29  
1078 5         1277 eval{$ffi->attach('OGR_F_GetNativeData' => [qw/opaque/] => 'string');};
  5         35  
1079 5         886 eval{$ffi->attach('OGR_F_SetNativeData' => [qw/opaque string/] => 'void');};
  5         53  
1080 5         1114 eval{$ffi->attach('OGR_F_GetNativeMediaType' => [qw/opaque/] => 'string');};
  5         27  
1081 5         962 eval{$ffi->attach('OGR_F_SetNativeMediaType' => [qw/opaque string/] => 'void');};
  5         67  
1082 5         1061 eval{$ffi->attach('OGR_F_FillUnsetWithDefault' => [qw/opaque int string_pointer/] => 'void');};
  5         36  
1083 5         1138 eval{$ffi->attach('OGR_F_Validate' => [qw/opaque int int/] => 'int');};
  5         65  
1084 5         1314 eval{$ffi->attach('OGR_L_GetName' => [qw/opaque/] => 'string');};
  5         54  
1085 5         892 eval{$ffi->attach('OGR_L_GetGeomType' => [qw/opaque/] => 'unsigned int');};
  5         22  
1086 5         890 eval{$ffi->attach('OGR_L_GetSpatialFilter' => [qw/opaque/] => 'opaque');};
  5         53  
1087 5         1088 eval{$ffi->attach('OGR_L_SetSpatialFilter' => [qw/opaque opaque/] => 'void');};
  5         28  
1088 5         1222 eval{$ffi->attach('OGR_L_SetSpatialFilterRect' => [qw/opaque double double double double/] => 'void');};
  5         29  
1089 5         1883 eval{$ffi->attach('OGR_L_SetSpatialFilterEx' => [qw/opaque int opaque/] => 'void');};
  5         73  
1090 5         1284 eval{$ffi->attach('OGR_L_SetSpatialFilterRectEx' => [qw/opaque int double double double double/] => 'void');};
  5         61  
1091 5         1850 eval{$ffi->attach('OGR_L_SetAttributeFilter' => [qw/opaque string/] => 'int');};
  5         33  
1092 5         883 eval{$ffi->attach('OGR_L_ResetReading' => [qw/opaque/] => 'void');};
  5         27  
1093 5         1078 eval{$ffi->attach('OGR_L_GetNextFeature' => [qw/opaque/] => 'opaque');};
  5         28  
1094 5         1237 eval{$ffi->attach('OGR_L_SetNextByIndex' => [qw/opaque sint64/] => 'int');};
  5         40  
1095 5         1111 eval{$ffi->attach('OGR_L_GetFeature' => [qw/opaque sint64/] => 'opaque');};
  5         29  
1096 5         1310 eval{$ffi->attach('OGR_L_SetFeature' => [qw/opaque opaque/] => 'int');};
  5         44  
1097 5         1160 eval{$ffi->attach('OGR_L_CreateFeature' => [qw/opaque opaque/] => 'int');};
  5         43  
1098 5         1110 eval{$ffi->attach('OGR_L_DeleteFeature' => [qw/opaque sint64/] => 'int');};
  5         41  
1099 5         1108 eval{$ffi->attach('OGR_L_GetLayerDefn' => [qw/opaque/] => 'opaque');};
  5         35  
1100 5         1074 eval{$ffi->attach('OGR_L_GetSpatialRef' => [qw/opaque/] => 'opaque');};
  5         28  
1101 5         1107 eval{$ffi->attach('OGR_L_FindFieldIndex' => [qw/opaque string int/] => 'int');};
  5         38  
1102 5         982 eval{$ffi->attach('OGR_L_GetFeatureCount' => [qw/opaque int/] => 'sint64');};
  5         39  
1103 5         1059 eval{$ffi->attach('OGR_L_GetExtent' => [qw/opaque double[4] int/] => 'int');};
  5         28  
1104 5         1121 eval{$ffi->attach('OGR_L_GetExtentEx' => [qw/opaque int double[4] int/] => 'int');};
  5         37  
1105 5         1029 eval{$ffi->attach('OGR_L_TestCapability' => [qw/opaque string/] => 'int');};
  5         36  
1106 5         891 eval{$ffi->attach('OGR_L_CreateField' => [qw/opaque opaque int/] => 'int');};
  5         58  
1107 5         1151 eval{$ffi->attach('OGR_L_CreateGeomField' => [qw/opaque opaque int/] => 'int');};
  5         37  
1108 5         1151 eval{$ffi->attach('OGR_L_DeleteField' => [qw/opaque int/] => 'int');};
  5         36  
1109 5         919 eval{$ffi->attach('OGR_L_ReorderFields' => [qw/opaque int*/] => 'int');};
  5         25  
1110 5         888 eval{$ffi->attach('OGR_L_ReorderField' => [qw/opaque int int/] => 'int');};
  5         44  
1111 5         993 eval{$ffi->attach('OGR_L_AlterFieldDefn' => [qw/opaque int opaque int/] => 'int');};
  5         28  
1112 5         1236 eval{$ffi->attach('OGR_L_StartTransaction' => [qw/opaque/] => 'int');};
  5         29  
1113 5         832 eval{$ffi->attach('OGR_L_CommitTransaction' => [qw/opaque/] => 'int');};
  5         25  
1114 5         831 eval{$ffi->attach('OGR_L_RollbackTransaction' => [qw/opaque/] => 'int');};
  5         27  
1115 5         829 eval{$ffi->attach('OGR_L_Reference' => [qw/opaque/] => 'int');};
  5         22  
1116 5         961 eval{$ffi->attach('OGR_L_Dereference' => [qw/opaque/] => 'int');};
  5         37  
1117 5         854 eval{$ffi->attach('OGR_L_GetRefCount' => [qw/opaque/] => 'int');};
  5         27  
1118 5         899 eval{$ffi->attach('OGR_L_SyncToDisk' => [qw/opaque/] => 'int');};
  5         42  
1119 5         939 eval{$ffi->attach('OGR_L_GetFeaturesRead' => [qw/opaque/] => 'sint64');};
  5         41  
1120 5         1037 eval{$ffi->attach('OGR_L_GetFIDColumn' => [qw/opaque/] => 'string');};
  5         35  
1121 5         899 eval{$ffi->attach('OGR_L_GetGeometryColumn' => [qw/opaque/] => 'string');};
  5         55  
1122 5         974 eval{$ffi->attach('OGR_L_GetStyleTable' => [qw/opaque/] => 'opaque');};
  5         28  
1123 5         1135 eval{$ffi->attach('OGR_L_SetStyleTableDirectly' => [qw/opaque opaque/] => 'void');};
  5         28  
1124 5         1230 eval{$ffi->attach('OGR_L_SetStyleTable' => [qw/opaque opaque/] => 'void');};
  5         34  
1125 5         1232 eval{$ffi->attach('OGR_L_SetIgnoredFields' => [qw/opaque string/] => 'int');};
  5         26  
1126 5         881 eval{$ffi->attach('OGR_L_Intersection' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         31  
1127 5         1696 eval{$ffi->attach('OGR_L_Union' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         29  
1128 5         1727 eval{$ffi->attach('OGR_L_SymDifference' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         48  
1129 5         1755 eval{$ffi->attach('OGR_L_Identity' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         30  
1130 5         1764 eval{$ffi->attach('OGR_L_Update' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         31  
1131 5         1736 eval{$ffi->attach('OGR_L_Clip' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         62  
1132 5         1748 eval{$ffi->attach('OGR_L_Erase' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         55  
1133 5         1723 eval{$ffi->attach('OGR_DS_Destroy' => [qw/opaque/] => 'void');};
  5         34  
1134 5         1021 eval{$ffi->attach('OGR_DS_GetName' => [qw/opaque/] => 'string');};
  5         36  
1135 5         873 eval{$ffi->attach('OGR_DS_GetLayerCount' => [qw/opaque/] => 'int');};
  5         61  
1136 5         912 eval{$ffi->attach('OGR_DS_GetLayer' => [qw/opaque int/] => 'opaque');};
  5         54  
1137 5         1105 eval{$ffi->attach('OGR_DS_GetLayerByName' => [qw/opaque string/] => 'opaque');};
  5         25  
1138 5         1145 eval{$ffi->attach('OGR_DS_DeleteLayer' => [qw/opaque int/] => 'int');};
  5         39  
1139 5         930 eval{$ffi->attach('OGR_DS_GetDriver' => [qw/opaque/] => 'opaque');};
  5         42  
1140 5         1050 eval{$ffi->attach('OGR_DS_CreateLayer' => ['opaque','string','opaque','unsigned int','opaque'] => 'opaque');};
  5         62  
1141 5         1549 eval{$ffi->attach('OGR_DS_CopyLayer' => [qw/opaque opaque string opaque/] => 'opaque');};
  5         42  
1142 5         1440 eval{$ffi->attach('OGR_DS_TestCapability' => [qw/opaque string/] => 'int');};
  5         54  
1143 5         900 eval{$ffi->attach('OGR_DS_ExecuteSQL' => [qw/opaque string opaque string/] => 'opaque');};
  5         40  
1144 5         1309 eval{$ffi->attach('OGR_DS_ReleaseResultSet' => [qw/opaque opaque/] => 'void');};
  5         40  
1145 5         1276 eval{$ffi->attach('OGR_DS_Reference' => [qw/opaque/] => 'int');};
  5         32  
1146 5         895 eval{$ffi->attach('OGR_DS_Dereference' => [qw/opaque/] => 'int');};
  5         38  
1147 5         916 eval{$ffi->attach('OGR_DS_GetRefCount' => [qw/opaque/] => 'int');};
  5         38  
1148 5         894 eval{$ffi->attach('OGR_DS_GetSummaryRefCount' => [qw/opaque/] => 'int');};
  5         23  
1149 5         872 eval{$ffi->attach('OGR_DS_SyncToDisk' => [qw/opaque/] => 'int');};
  5         28  
1150 5         832 eval{$ffi->attach('OGR_DS_GetStyleTable' => [qw/opaque/] => 'opaque');};
  5         42  
1151 5         1014 eval{$ffi->attach('OGR_DS_SetStyleTableDirectly' => [qw/opaque opaque/] => 'void');};
  5         24  
1152 5         1232 eval{$ffi->attach('OGR_DS_SetStyleTable' => [qw/opaque opaque/] => 'void');};
  5         40  
1153 5         1225 eval{$ffi->attach('OGR_Dr_GetName' => [qw/opaque/] => 'string');};
  5         46  
1154 5         872 eval{$ffi->attach('OGR_Dr_Open' => [qw/opaque string int/] => 'opaque');};
  5         43  
1155 5         1226 eval{$ffi->attach('OGR_Dr_TestCapability' => [qw/opaque string/] => 'int');};
  5         24  
1156 5         891 eval{$ffi->attach('OGR_Dr_CreateDataSource' => [qw/opaque string string_pointer/] => 'opaque');};
  5         36  
1157 5         1138 eval{$ffi->attach('OGR_Dr_CopyDataSource' => [qw/opaque opaque string string_pointer/] => 'opaque');};
  5         30  
1158 5         1322 eval{$ffi->attach('OGR_Dr_DeleteDataSource' => [qw/opaque string/] => 'int');};
  5         24  
1159 5         910 eval{$ffi->attach('OGROpen' => [qw/string int uint64*/] => 'opaque');};
  5         39  
1160 5         929 eval{$ffi->attach('OGROpenShared' => [qw/string int uint64*/] => 'opaque');};
  5         36  
1161 5         1021 eval{$ffi->attach('OGRReleaseDataSource' => [qw/opaque/] => 'int');};
  5         26  
1162 5         877 eval{$ffi->attach('OGRRegisterDriver' => [qw/opaque/] => 'void');};
  5         26  
1163 5         1084 eval{$ffi->attach('OGRDeregisterDriver' => [qw/opaque/] => 'void');};
  5         65  
1164 5         1126 eval{$ffi->attach('OGRGetDriverCount' => [] => 'int');};
  5         33  
1165 5         636 eval{$ffi->attach('OGRGetDriver' => [qw/int/] => 'opaque');};
  5         32  
1166 5         934 eval{$ffi->attach('OGRGetDriverByName' => [qw/string/] => 'opaque');};
  5         30  
1167 5         840 eval{$ffi->attach('OGRGetOpenDSCount' => [] => 'int');};
  5         29  
1168 5         618 eval{$ffi->attach('OGRGetOpenDS' => [qw/int/] => 'opaque');};
  5         51  
1169 5         926 eval{$ffi->attach('OGRRegisterAll' => [] => 'void');};
  5         31  
1170 5         814 eval{$ffi->attach('OGRCleanupAll' => [] => 'void');};
  5         28  
1171 5         775 eval{$ffi->attach('OGR_SM_Create' => [qw/opaque/] => 'opaque');};
  5         51  
1172 5         1101 eval{$ffi->attach('OGR_SM_Destroy' => [qw/opaque/] => 'void');};
  5         37  
1173 5         1055 eval{$ffi->attach('OGR_SM_InitFromFeature' => [qw/opaque opaque/] => 'string');};
  5         26  
1174 5         1037 eval{$ffi->attach('OGR_SM_InitStyleString' => [qw/opaque string/] => 'int');};
  5         37  
1175 5         949 eval{$ffi->attach('OGR_SM_GetPartCount' => [qw/opaque string/] => 'int');};
  5         30  
1176 5         917 eval{$ffi->attach('OGR_SM_GetPart' => [qw/opaque int string/] => 'opaque');};
  5         31  
1177 5         1101 eval{$ffi->attach('OGR_SM_AddPart' => [qw/opaque opaque/] => 'int');};
  5         45  
1178 5         1053 eval{$ffi->attach('OGR_SM_AddStyle' => [qw/opaque string string/] => 'int');};
  5         26  
1179 5         913 eval{$ffi->attach('OGR_ST_Create' => ['unsigned int'] => 'opaque');};
  5         31  
1180 5         839 eval{$ffi->attach('OGR_ST_Destroy' => [qw/opaque/] => 'void');};
  5         48  
1181 5         1024 eval{$ffi->attach('OGR_ST_GetType' => [qw/opaque/] => 'unsigned int');};
  5         27  
1182 5         873 eval{$ffi->attach('OGR_ST_GetUnit' => [qw/opaque/] => 'unsigned int');};
  5         33  
1183 5         900 eval{$ffi->attach('OGR_ST_SetUnit' => ['opaque','unsigned int','double'] => 'void');};
  5         36  
1184 5         1267 eval{$ffi->attach('OGR_ST_GetParamStr' => [qw/opaque int int*/] => 'string');};
  5         27  
1185 5         919 eval{$ffi->attach('OGR_ST_GetParamNum' => [qw/opaque int int*/] => 'int');};
  5         87  
1186 5         996 eval{$ffi->attach('OGR_ST_GetParamDbl' => [qw/opaque int int*/] => 'double');};
  5         41  
1187 5         1126 eval{$ffi->attach('OGR_ST_SetParamStr' => [qw/opaque int string/] => 'void');};
  5         55  
1188 5         1185 eval{$ffi->attach('OGR_ST_SetParamNum' => [qw/opaque int int/] => 'void');};
  5         26  
1189 5         1179 eval{$ffi->attach('OGR_ST_SetParamDbl' => [qw/opaque int double/] => 'void');};
  5         55  
1190 5         1592 eval{$ffi->attach('OGR_ST_GetStyleString' => [qw/opaque/] => 'string');};
  5         44  
1191 5         866 eval{$ffi->attach('OGR_ST_GetRGBFromString' => [qw/opaque string int* int* int* int*/] => 'int');};
  5         29  
1192 5         1123 eval{$ffi->attach('OGR_STBL_Create' => [] => 'opaque');};
  5         43  
1193 5         821 eval{$ffi->attach('OGR_STBL_Destroy' => [qw/opaque/] => 'void');};
  5         28  
1194 5         1060 eval{$ffi->attach('OGR_STBL_AddStyle' => [qw/opaque string string/] => 'int');};
  5         37  
1195 5         945 eval{$ffi->attach('OGR_STBL_SaveStyleTable' => [qw/opaque string/] => 'int');};
  5         39  
1196 5         888 eval{$ffi->attach('OGR_STBL_LoadStyleTable' => [qw/opaque string/] => 'int');};
  5         31  
1197 5         904 eval{$ffi->attach('OGR_STBL_Find' => [qw/opaque string/] => 'string');};
  5         27  
1198 5         889 eval{$ffi->attach('OGR_STBL_ResetStyleStringReading' => [qw/opaque/] => 'void');};
  5         30  
1199 5         1026 eval{$ffi->attach('OGR_STBL_GetNextStyle' => [qw/opaque/] => 'string');};
  5         41  
1200 5         918 eval{$ffi->attach('OGR_STBL_GetLastStyleName' => [qw/opaque/] => 'string');};
  5         34  
1201             # from ogr/ogr_srs_api.h
1202 5         905 eval{$ffi->attach('OSRAxisEnumToName' => ['unsigned int'] => 'string');};
  5         34  
1203 5         722 eval{$ffi->attach('OSRSetPROJSearchPaths' => [qw/string_pointer/] => 'void');};
  5         69  
1204 5         937 eval{$ffi->attach('OSRGetPROJSearchPaths' => [] => 'string_pointer');};
  5         24  
1205 5         605 eval{$ffi->attach('OSRGetPROJVersion' => [qw/int* int* int*/] => 'void');};
  5         49  
1206 5         979 eval{$ffi->attach('OSRNewSpatialReference' => [qw/string/] => 'opaque');};
  5         31  
1207 5         1003 eval{$ffi->attach('OSRCloneGeogCS' => [qw/opaque/] => 'opaque');};
  5         42  
1208 5         1052 eval{$ffi->attach('OSRClone' => [qw/opaque/] => 'opaque');};
  5         24  
1209 5         1049 eval{$ffi->attach('OSRDestroySpatialReference' => [qw/opaque/] => 'void');};
  5         28  
1210 5         1122 eval{$ffi->attach('OSRReference' => [qw/opaque/] => 'int');};
  5         26  
1211 5         861 eval{$ffi->attach('OSRDereference' => [qw/opaque/] => 'int');};
  5         26  
1212 5         882 eval{$ffi->attach('OSRRelease' => [qw/opaque/] => 'void');};
  5         35  
1213 5         1078 eval{$ffi->attach('OSRValidate' => [qw/opaque/] => 'int');};
  5         51  
1214 5         882 eval{$ffi->attach('OSRImportFromEPSG' => [qw/opaque int/] => 'int');};
  5         46  
1215 5         923 eval{$ffi->attach('OSRImportFromEPSGA' => [qw/opaque int/] => 'int');};
  5         46  
1216 5         955 eval{$ffi->attach('OSRImportFromWkt' => [qw/opaque string_pointer/] => 'int');};
  5         41  
1217 5         907 eval{$ffi->attach('OSRImportFromProj4' => [qw/opaque string/] => 'int');};
  5         30  
1218 5         878 eval{$ffi->attach('OSRImportFromESRI' => [qw/opaque string_pointer/] => 'int');};
  5         32  
1219 5         915 eval{$ffi->attach('OSRImportFromPCI' => [qw/opaque string string double*/] => 'int');};
  5         40  
1220 5         990 eval{$ffi->attach('OSRImportFromUSGS' => [qw/opaque long long double* long/] => 'int');};
  5         72  
1221 5         1376 eval{$ffi->attach('OSRImportFromXML' => [qw/opaque string/] => 'int');};
  5         31  
1222 5         930 eval{$ffi->attach('OSRImportFromDict' => [qw/opaque string string/] => 'int');};
  5         55  
1223 5         987 eval{$ffi->attach('OSRImportFromPanorama' => [qw/opaque long long long double*/] => 'int');};
  5         46  
1224 5         1091 eval{$ffi->attach('OSRImportFromOzi' => [qw/opaque string_pointer/] => 'int');};
  5         38  
1225 5         892 eval{$ffi->attach('OSRImportFromMICoordSys' => [qw/opaque string/] => 'int');};
  5         29  
1226 5         929 eval{$ffi->attach('OSRImportFromERM' => [qw/opaque string string string/] => 'int');};
  5         43  
1227 5         1040 eval{$ffi->attach('OSRImportFromUrl' => [qw/opaque string/] => 'int');};
  5         43  
1228 5         923 eval{$ffi->attach('OSRExportToWkt' => [qw/opaque string_pointer/] => 'int');};
  5         36  
1229 5         906 eval{$ffi->attach('OSRExportToWktEx' => [qw/opaque string_pointer string_pointer/] => 'int');};
  5         32  
1230 5         1006 eval{$ffi->attach('OSRExportToPrettyWkt' => [qw/opaque string_pointer int/] => 'int');};
  5         46  
1231 5         960 eval{$ffi->attach('OSRExportToPROJJSON' => [qw/opaque string_pointer string_pointer/] => 'int');};
  5         28  
1232 5         1048 eval{$ffi->attach('OSRExportToProj4' => [qw/opaque string_pointer/] => 'int');};
  5         28  
1233 5         951 eval{$ffi->attach('OSRExportToPCI' => [qw/opaque string_pointer string_pointer double*/] => 'int');};
  5         70  
1234 5         999 eval{$ffi->attach('OSRExportToUSGS' => [qw/opaque long* long* double* long*/] => 'int');};
  5         29  
1235 5         1451 eval{$ffi->attach('OSRExportToXML' => [qw/opaque string_pointer string/] => 'int');};
  5         23  
1236 5         933 eval{$ffi->attach('OSRExportToPanorama' => [qw/opaque long* long* long* long* double*/] => 'int');};
  5         34  
1237 5         1067 eval{$ffi->attach('OSRExportToMICoordSys' => [qw/opaque string_pointer/] => 'int');};
  5         61  
1238 5         938 eval{$ffi->attach('OSRExportToERM' => [qw/opaque string string string/] => 'int');};
  5         28  
1239 5         978 eval{$ffi->attach('OSRMorphToESRI' => [qw/opaque/] => 'int');};
  5         23  
1240 5         893 eval{$ffi->attach('OSRMorphFromESRI' => [qw/opaque/] => 'int');};
  5         28  
1241 5         936 eval{$ffi->attach('OSRConvertToOtherProjection' => [qw/opaque string string_pointer/] => 'opaque');};
  5         29  
1242 5         1235 eval{$ffi->attach('OSRGetName' => [qw/opaque/] => 'string');};
  5         25  
1243 5         881 eval{$ffi->attach('OSRSetAttrValue' => [qw/opaque string string/] => 'int');};
  5         34  
1244 5         954 eval{$ffi->attach('OSRGetAttrValue' => [qw/opaque string int/] => 'string');};
  5         33  
1245 5         994 eval{$ffi->attach('OSRSetAngularUnits' => [qw/opaque string double/] => 'int');};
  5         34  
1246 5         1169 eval{$ffi->attach('OSRGetAngularUnits' => [qw/opaque string_pointer/] => 'double');};
  5         29  
1247 5         1031 eval{$ffi->attach('OSRSetLinearUnits' => [qw/opaque string double/] => 'int');};
  5         62  
1248 5         1165 eval{$ffi->attach('OSRSetTargetLinearUnits' => [qw/opaque string string double/] => 'int');};
  5         30  
1249 5         1166 eval{$ffi->attach('OSRSetLinearUnitsAndUpdateParameters' => [qw/opaque string double/] => 'int');};
  5         30  
1250 5         1140 eval{$ffi->attach('OSRGetLinearUnits' => [qw/opaque string_pointer/] => 'double');};
  5         59  
1251 5         1133 eval{$ffi->attach('OSRGetTargetLinearUnits' => [qw/opaque string string_pointer/] => 'double');};
  5         42  
1252 5         1099 eval{$ffi->attach('OSRGetPrimeMeridian' => [qw/opaque string_pointer/] => 'double');};
  5         46  
1253 5         1088 eval{$ffi->attach('OSRIsGeographic' => [qw/opaque/] => 'int');};
  5         22  
1254 5         860 eval{$ffi->attach('OSRIsDerivedGeographic' => [qw/opaque/] => 'int');};
  5         32  
1255 5         836 eval{$ffi->attach('OSRIsLocal' => [qw/opaque/] => 'int');};
  5         32  
1256 5         845 eval{$ffi->attach('OSRIsProjected' => [qw/opaque/] => 'int');};
  5         21  
1257 5         850 eval{$ffi->attach('OSRIsCompound' => [qw/opaque/] => 'int');};
  5         24  
1258 5         896 eval{$ffi->attach('OSRIsGeocentric' => [qw/opaque/] => 'int');};
  5         24  
1259 5         828 eval{$ffi->attach('OSRIsVertical' => [qw/opaque/] => 'int');};
  5         24  
1260 5         826 eval{$ffi->attach('OSRIsSameGeogCS' => [qw/opaque opaque/] => 'int');};
  5         25  
1261 5         1062 eval{$ffi->attach('OSRIsSameVertCS' => [qw/opaque opaque/] => 'int');};
  5         35  
1262 5         1090 eval{$ffi->attach('OSRIsSame' => [qw/opaque opaque/] => 'int');};
  5         22  
1263 5         1042 eval{$ffi->attach('OSRIsSameEx' => [qw/opaque opaque string_pointer/] => 'int');};
  5         46  
1264 5         1096 eval{$ffi->attach('OSRSetLocalCS' => [qw/opaque string/] => 'int');};
  5         23  
1265 5         951 eval{$ffi->attach('OSRSetProjCS' => [qw/opaque string/] => 'int');};
  5         26  
1266 5         906 eval{$ffi->attach('OSRSetGeocCS' => [qw/opaque string/] => 'int');};
  5         22  
1267 5         914 eval{$ffi->attach('OSRSetWellKnownGeogCS' => [qw/opaque string/] => 'int');};
  5         717  
1268 5         987 eval{$ffi->attach('OSRSetFromUserInput' => [qw/opaque string/] => 'int');};
  5         67  
1269 5         949 eval{$ffi->attach('OSRCopyGeogCSFrom' => [qw/opaque opaque/] => 'int');};
  5         47  
1270 5         1072 eval{$ffi->attach('OSRSetTOWGS84' => [qw/opaque double double double double double double double/] => 'int');};
  5         31  
1271 5         2278 eval{$ffi->attach('OSRGetTOWGS84' => [qw/opaque double* int/] => 'int');};
  5         29  
1272 5         955 eval{$ffi->attach('OSRAddGuessedTOWGS84' => [qw/opaque/] => 'int');};
  5         24  
1273 5         894 eval{$ffi->attach('OSRSetCompoundCS' => [qw/opaque string opaque opaque/] => 'int');};
  5         37  
1274 5         1297 eval{$ffi->attach('OSRPromoteTo3D' => [qw/opaque string/] => 'int');};
  5         33  
1275 5         882 eval{$ffi->attach('OSRSetGeogCS' => [qw/opaque string string string double double string double string double/] => 'int');};
  5         33  
1276 5         1886 eval{$ffi->attach('OSRSetVertCS' => [qw/opaque string string int/] => 'int');};
  5         27  
1277 5         966 eval{$ffi->attach('OSRGetSemiMajor' => [qw/opaque int*/] => 'double');};
  5         27  
1278 5         1077 eval{$ffi->attach('OSRGetSemiMinor' => [qw/opaque int*/] => 'double');};
  5         25  
1279 5         1096 eval{$ffi->attach('OSRGetInvFlattening' => [qw/opaque int*/] => 'double');};
  5         39  
1280 5         1207 eval{$ffi->attach('OSRSetAuthority' => [qw/opaque string string int/] => 'int');};
  5         216  
1281 5         1091 eval{$ffi->attach('OSRGetAuthorityCode' => [qw/opaque string/] => 'string');};
  5         26  
1282 5         881 eval{$ffi->attach('OSRGetAuthorityName' => [qw/opaque string/] => 'string');};
  5         29  
1283 5         877 eval{$ffi->attach('OSRGetAreaOfUse' => [qw/opaque double* double* double* double* string/] => 'int');};
  5         67  
1284 5         1153 eval{$ffi->attach('OSRSetProjection' => [qw/opaque string/] => 'int');};
  5         35  
1285 5         1391 eval{$ffi->attach('OSRSetProjParm' => [qw/opaque string double/] => 'int');};
  5         53  
1286 5         1154 eval{$ffi->attach('OSRGetProjParm' => [qw/opaque string double int*/] => 'double');};
  5         28  
1287 5         1324 eval{$ffi->attach('OSRSetNormProjParm' => [qw/opaque string double/] => 'int');};
  5         25  
1288 5         1100 eval{$ffi->attach('OSRGetNormProjParm' => [qw/opaque string double int*/] => 'double');};
  5         50  
1289 5         1323 eval{$ffi->attach('OSRSetUTM' => [qw/opaque int int/] => 'int');};
  5         33  
1290 5         955 eval{$ffi->attach('OSRGetUTMZone' => [qw/opaque int*/] => 'int');};
  5         23  
1291 5         870 eval{$ffi->attach('OSRSetStatePlane' => [qw/opaque int int/] => 'int');};
  5         35  
1292 5         923 eval{$ffi->attach('OSRSetStatePlaneWithUnits' => [qw/opaque int int string double/] => 'int');};
  5         31  
1293 5         1187 eval{$ffi->attach('OSRAutoIdentifyEPSG' => [qw/opaque/] => 'int');};
  5         23  
1294 5         823 eval{$ffi->attach('OSRFindMatches' => [qw/opaque string_pointer int* int*/] => 'uint64*');};
  5         30  
1295 5         969 eval{$ffi->attach('OSRFreeSRSArray' => [qw/uint64*/] => 'void');};
  5         21  
1296 5         869 eval{$ffi->attach('OSREPSGTreatsAsLatLong' => [qw/opaque/] => 'int');};
  5         22  
1297 5         827 eval{$ffi->attach('OSREPSGTreatsAsNorthingEasting' => [qw/opaque/] => 'int');};
  5         35  
1298 5         957 eval{$ffi->attach('OSRGetAxis' => ['opaque','string','int','unsigned int'] => 'string');};
  5         32  
1299 5         1040 eval{$ffi->attach('OSRGetAxesCount' => [qw/opaque/] => 'int');};
  5         61  
1300 5         908 eval{$ffi->attach('OSRSetAxes' => ['opaque','string','string','unsigned int','string','unsigned int'] => 'int');};
  5         38  
1301 5         1058 eval{$ffi->attach('OSRGetAxisMappingStrategy' => [qw/opaque/] => 'int');};
  5         47  
1302 5         882 eval{$ffi->attach('OSRSetAxisMappingStrategy' => [qw/opaque int/] => 'void');};
  5         22  
1303 5         1078 eval{$ffi->attach('OSRGetDataAxisToSRSAxisMapping' => [qw/opaque int*/] => 'int*');};
  5         26  
1304 5         884 eval{$ffi->attach('OSRSetDataAxisToSRSAxisMapping' => [qw/opaque int int*/] => 'int');};
  5         27  
1305 5         935 eval{$ffi->attach('OSRSetACEA' => [qw/opaque double double double double double double/] => 'int');};
  5         37  
1306 5         2095 eval{$ffi->attach('OSRSetAE' => [qw/opaque double double double double/] => 'int');};
  5         37  
1307 5         1721 eval{$ffi->attach('OSRSetBonne' => [qw/opaque double double double double/] => 'int');};
  5         59  
1308 5         1736 eval{$ffi->attach('OSRSetCEA' => [qw/opaque double double double double/] => 'int');};
  5         40  
1309 5         1670 eval{$ffi->attach('OSRSetCS' => [qw/opaque double double double double/] => 'int');};
  5         40  
1310 5         1649 eval{$ffi->attach('OSRSetEC' => [qw/opaque double double double double double double/] => 'int');};
  5         55  
1311 5         2505 eval{$ffi->attach('OSRSetEckert' => [qw/opaque int double double double/] => 'int');};
  5         39  
1312 5         1581 eval{$ffi->attach('OSRSetEckertIV' => [qw/opaque double double double/] => 'int');};
  5         32  
1313 5         1547 eval{$ffi->attach('OSRSetEckertVI' => [qw/opaque double double double/] => 'int');};
  5         35  
1314 5         1450 eval{$ffi->attach('OSRSetEquirectangular' => [qw/opaque double double double double/] => 'int');};
  5         65  
1315 5         1715 eval{$ffi->attach('OSRSetEquirectangular2' => [qw/opaque double double double double double/] => 'int');};
  5         44  
1316 5         1949 eval{$ffi->attach('OSRSetGS' => [qw/opaque double double double/] => 'int');};
  5         42  
1317 5         1554 eval{$ffi->attach('OSRSetGH' => [qw/opaque double double double/] => 'int');};
  5         29  
1318 5         1590 eval{$ffi->attach('OSRSetIGH' => [qw/opaque/] => 'int');};
  5         37  
1319 5         896 eval{$ffi->attach('OSRSetGEOS' => [qw/opaque double double double double/] => 'int');};
  5         34  
1320 5         1654 eval{$ffi->attach('OSRSetGaussSchreiberTMercator' => [qw/opaque double double double double double/] => 'int');};
  5         42  
1321 5         1859 eval{$ffi->attach('OSRSetGnomonic' => [qw/opaque double double double double/] => 'int');};
  5         37  
1322 5         1687 eval{$ffi->attach('OSRSetHOM' => [qw/opaque double double double double double double double/] => 'int');};
  5         53  
1323 5         2336 eval{$ffi->attach('OSRSetHOMAC' => [qw/opaque double double double double double double double/] => 'int');};
  5         56  
1324 5         2438 eval{$ffi->attach('OSRSetHOM2PNO' => [qw/opaque double double double double double double double double/] => 'int');};
  5         35  
1325 5         2445 eval{$ffi->attach('OSRSetIWMPolyconic' => [qw/opaque double double double double double/] => 'int');};
  5         32  
1326 5         1879 eval{$ffi->attach('OSRSetKrovak' => [qw/opaque double double double double double double double/] => 'int');};
  5         52  
1327 5         2323 eval{$ffi->attach('OSRSetLAEA' => [qw/opaque double double double double/] => 'int');};
  5         54  
1328 5         1763 eval{$ffi->attach('OSRSetLCC' => [qw/opaque double double double double double double/] => 'int');};
  5         53  
1329 5         2076 eval{$ffi->attach('OSRSetLCC1SP' => [qw/opaque double double double double double/] => 'int');};
  5         59  
1330 5         1897 eval{$ffi->attach('OSRSetLCCB' => [qw/opaque double double double double double double/] => 'int');};
  5         52  
1331 5         2082 eval{$ffi->attach('OSRSetMC' => [qw/opaque double double double double/] => 'int');};
  5         37  
1332 5         1764 eval{$ffi->attach('OSRSetMercator' => [qw/opaque double double double double double/] => 'int');};
  5         33  
1333 5         1926 eval{$ffi->attach('OSRSetMercator2SP' => [qw/opaque double double double double double/] => 'int');};
  5         62  
1334 5         1945 eval{$ffi->attach('OSRSetMollweide' => [qw/opaque double double double/] => 'int');};
  5         29  
1335 5         1485 eval{$ffi->attach('OSRSetNZMG' => [qw/opaque double double double double/] => 'int');};
  5         69  
1336 5         1709 eval{$ffi->attach('OSRSetOS' => [qw/opaque double double double double double/] => 'int');};
  5         68  
1337 5         2318 eval{$ffi->attach('OSRSetOrthographic' => [qw/opaque double double double double/] => 'int');};
  5         41  
1338 5         1704 eval{$ffi->attach('OSRSetPolyconic' => [qw/opaque double double double double/] => 'int');};
  5         46  
1339 5         1689 eval{$ffi->attach('OSRSetPS' => [qw/opaque double double double double double/] => 'int');};
  5         41  
1340 5         1873 eval{$ffi->attach('OSRSetRobinson' => [qw/opaque double double double/] => 'int');};
  5         58  
1341 5         1466 eval{$ffi->attach('OSRSetSinusoidal' => [qw/opaque double double double/] => 'int');};
  5         49  
1342 5         1555 eval{$ffi->attach('OSRSetStereographic' => [qw/opaque double double double double double/] => 'int');};
  5         40  
1343 5         1998 eval{$ffi->attach('OSRSetSOC' => [qw/opaque double double double double/] => 'int');};
  5         31  
1344 5         1676 eval{$ffi->attach('OSRSetTM' => [qw/opaque double double double double double/] => 'int');};
  5         42  
1345 5         1926 eval{$ffi->attach('OSRSetTMVariant' => [qw/opaque string double double double double double/] => 'int');};
  5         40  
1346 5         1908 eval{$ffi->attach('OSRSetTMG' => [qw/opaque double double double double/] => 'int');};
  5         40  
1347 5         1634 eval{$ffi->attach('OSRSetTMSO' => [qw/opaque double double double double double/] => 'int');};
  5         39  
1348 5         1994 eval{$ffi->attach('OSRSetTPED' => [qw/opaque double double double double double double/] => 'int');};
  5         29  
1349 5         2136 eval{$ffi->attach('OSRSetVDG' => [qw/opaque double double double/] => 'int');};
  5         37  
1350 5         1478 eval{$ffi->attach('OSRSetWagner' => [qw/opaque int double double double/] => 'int');};
  5         35  
1351 5         1503 eval{$ffi->attach('OSRSetQSC' => [qw/opaque double double/] => 'int');};
  5         41  
1352 5         1253 eval{$ffi->attach('OSRSetSCH' => [qw/opaque double double double double/] => 'int');};
  5         27  
1353 5         1636 eval{$ffi->attach('OSRSetVerticalPerspective' => [qw/opaque double double double double double double/] => 'int');};
  5         29  
1354 5         2182 eval{$ffi->attach('OSRCalcInvFlattening' => [qw/double double/] => 'double');};
  5         55  
1355 5         1237 eval{$ffi->attach('OSRCalcSemiMinorFromInvFlattening' => [qw/double double/] => 'double');};
  5         51  
1356 5         1212 eval{$ffi->attach('OSRCleanup' => [] => 'void');};
  5         24  
1357 5         868 eval{$ffi->attach('OSRGetCRSInfoListFromDatabase' => [qw/string opaque int*/] => 'opaque');};
  5         48  
1358 5         1165 eval{$ffi->attach('OSRDestroyCRSInfoList' => [qw/opaque/] => 'void');};
  5         22  
1359 5         1011 eval{$ffi->attach('OCTNewCoordinateTransformation' => [qw/opaque opaque/] => 'opaque');};
  5         68  
1360 5         1263 eval{$ffi->attach('OCTNewCoordinateTransformationOptions' => [] => 'opaque');};
  5         32  
1361 5         803 eval{$ffi->attach('OCTCoordinateTransformationOptionsSetOperation' => [qw/opaque string int/] => 'int');};
  5         43  
1362 5         1051 eval{$ffi->attach('OCTCoordinateTransformationOptionsSetAreaOfInterest' => [qw/opaque double double double double/] => 'int');};
  5         29  
1363 5         8732 eval{$ffi->attach('OCTDestroyCoordinateTransformationOptions' => [qw/opaque/] => 'void');};
  5         13173  
1364 5         7238 eval{$ffi->attach('OCTNewCoordinateTransformationEx' => [qw/opaque opaque opaque/] => 'opaque');};
  5         31  
1365 5         1471 eval{$ffi->attach('OCTDestroyCoordinateTransformation' => [qw/opaque/] => 'void');};
  5         62  
1366 5         1056 eval{$ffi->attach('OCTTransform' => [qw/opaque int double* double* double*/] => 'int');};
  5         33  
1367 5         1083 eval{$ffi->attach('OCTTransformEx' => [qw/opaque int double* double* double* int*/] => 'int');};
  5         44  
1368 5         1103 eval{$ffi->attach('OCTTransform4D' => [qw/opaque int double* double* double* double* int*/] => 'int');};
  5         39  
1369             # from apps/gdal_utils.h
1370 5         1152 eval{$ffi->attach('GDALInfoOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         27  
1371 5         1252 eval{$ffi->attach('GDALInfoOptionsFree' => [qw/opaque/] => 'void');};
  5         22  
1372 5         1005 eval{$ffi->attach('GDALInfo' => [qw/opaque opaque/] => 'string');};
  5         32  
1373 5         1044 eval{$ffi->attach('GDALTranslateOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         341  
1374 5         1289 eval{$ffi->attach('GDALTranslateOptionsFree' => [qw/opaque/] => 'void');};
  5         28  
1375 5         1029 eval{$ffi->attach('GDALTranslateOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         39  
1376 5         1331 eval{$ffi->attach('GDALTranslate' => [qw/string opaque opaque int*/] => 'opaque');};
  5         40  
1377 5         1434 eval{$ffi->attach('GDALWarpAppOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         52  
1378 5         1278 eval{$ffi->attach('GDALWarpAppOptionsFree' => [qw/opaque/] => 'void');};
  5         27  
1379 5         1006 eval{$ffi->attach('GDALWarpAppOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         23  
1380 5         1291 eval{$ffi->attach('GDALWarpAppOptionsSetQuiet' => [qw/opaque int/] => 'void');};
  5         123  
1381 5         1054 eval{$ffi->attach('GDALWarpAppOptionsSetWarpOption' => [qw/opaque string string/] => 'void');};
  5         43  
1382 5         1109 eval{$ffi->attach('GDALWarp' => [qw/string opaque int opaque[] opaque int*/] => 'opaque');};
  5         43  
1383 5         1963 eval{$ffi->attach('GDALVectorTranslateOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         29  
1384 5         1313 eval{$ffi->attach('GDALVectorTranslateOptionsFree' => [qw/opaque/] => 'void');};
  5         23  
1385 5         1037 eval{$ffi->attach('GDALVectorTranslateOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         28  
1386 5         1295 eval{$ffi->attach('GDALVectorTranslate' => [qw/string opaque int opaque[] opaque int*/] => 'opaque');};
  5         39  
1387 5         1368 eval{$ffi->attach('GDALDEMProcessingOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         31  
1388 5         1249 eval{$ffi->attach('GDALDEMProcessingOptionsFree' => [qw/opaque/] => 'void');};
  5         31  
1389 5         1025 eval{$ffi->attach('GDALDEMProcessingOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         37  
1390 5         1276 eval{$ffi->attach('GDALDEMProcessing' => [qw/string opaque string string opaque int*/] => 'opaque');};
  5         33  
1391 5         1413 eval{$ffi->attach('GDALNearblackOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         21  
1392 5         1230 eval{$ffi->attach('GDALNearblackOptionsFree' => [qw/opaque/] => 'void');};
  5         32  
1393 5         1063 eval{$ffi->attach('GDALNearblackOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         24  
1394 5         1248 eval{$ffi->attach('GDALNearblack' => [qw/string opaque opaque opaque int*/] => 'opaque');};
  5         40  
1395 5         1615 eval{$ffi->attach('GDALGridOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         37  
1396 5         1232 eval{$ffi->attach('GDALGridOptionsFree' => [qw/opaque/] => 'void');};
  5         54  
1397 5         1120 eval{$ffi->attach('GDALGridOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         33  
1398 5         1297 eval{$ffi->attach('GDALGrid' => [qw/string opaque opaque int*/] => 'opaque');};
  5         30  
1399 5         1369 eval{$ffi->attach('GDALRasterizeOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         22  
1400 5         1181 eval{$ffi->attach('GDALRasterizeOptionsFree' => [qw/opaque/] => 'void');};
  5         19  
1401 5         1056 eval{$ffi->attach('GDALRasterizeOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         27  
1402 5         1246 eval{$ffi->attach('GDALRasterize' => [qw/string opaque opaque opaque int*/] => 'opaque');};
  5         56  
1403 5         1554 eval{$ffi->attach('GDALBuildVRTOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         25  
1404 5         1252 eval{$ffi->attach('GDALBuildVRTOptionsFree' => [qw/opaque/] => 'void');};
  5         41  
1405 5         1015 eval{$ffi->attach('GDALBuildVRTOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         27  
1406 5         1291 eval{$ffi->attach('GDALBuildVRT' => [qw/string int opaque[] opaque opaque int*/] => 'opaque');};
  5         40  
1407 5         1369 eval{$ffi->attach('GDALMultiDimInfoOptionsNew' => [qw/string_pointer opaque/] => 'opaque');};
  5         20  
1408 5         1075 eval{$ffi->attach('GDALMultiDimInfoOptionsFree' => [qw/opaque/] => 'void');};
  5         19  
1409 5         973 eval{$ffi->attach('GDALMultiDimInfo' => [qw/opaque opaque/] => 'string');};
  5         32  
1410 5         1035 eval{$ffi->attach('GDALMultiDimTranslateOptionsNew' => [qw/string_pointer opaque/] => 'opaque');};
  5         23  
1411 5         1089 eval{$ffi->attach('GDALMultiDimTranslateOptionsFree' => [qw/opaque/] => 'void');};
  5         22  
1412 5         985 eval{$ffi->attach('GDALMultiDimTranslateOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         35  
1413 5         1232 eval{$ffi->attach('GDALMultiDimTranslate' => [qw/string opaque int uint64* opaque int*/] => 'opaque');};
  5         29  
1414             # end of generated code
1415              
1416             # we do not use Alien::gdal->data_dir since it issues warnings due to GDAL bug
1417 5         1548 my $pc = PkgConfig->find('gdal');
1418 5 50       4495 if ($pc->errmsg) {
1419 5         97 my $dir = Alien::gdal->dist_dir;
1420 5         3216 my %options = (search_path_override => [$dir . '/lib/pkgconfig']);
1421 5         42 $pc = PkgConfig->find('gdal', %options);
1422             }
1423 5 50       39884 if ($pc->errmsg) {
1424 0         0 warn $pc->errmsg;
1425             } else {
1426 5         77 my $dir = $pc->get_var('datadir');
1427             # this gdal.pc bug was fixed in GDAL 2.3.1
1428             # we just hope the one configuring GDAL did not change it to something that ends '/data'
1429 5         202 $dir =~ s/\/data$//;
1430 5 50       285 if (opendir(my $dh, $dir)) {
1431 5         2181 CPLSetConfigOption(GDAL_DATA => $dir);
1432             } else {
1433 0         0 my $dist_data_dir = Alien::gdal->dist_dir . '/share/gdal';
1434 0 0       0 if (-d $dist_data_dir) {
1435 0         0 CPLSetConfigOption(GDAL_DATA => $dist_data_dir);
1436             }
1437             else {
1438 0         0 warn "GDAL data directory ($dir) doesn't exist. Maybe Alien::gdal is not installed?";
1439             }
1440             }
1441             }
1442              
1443 5         28 $instance = {};
1444 5         23 $instance->{ffi} = $ffi;
1445 5         53 SetErrorHandling();
1446 5         77814 GDALAllRegister();
1447 5         1314 return bless $instance, $class;
1448             }
1449              
1450             sub get_instance {
1451 6     6 1 485 my $class = shift;
1452 6 50       36 $instance = $class->new() unless $instance;
1453 6         17 return $instance;
1454             }
1455              
1456             sub DESTROY {
1457 0     0   0 UnsetErrorHandling();
1458             }
1459              
1460             sub GetVersionInfo {
1461 1   50 1 1 381 my $request = shift // 'VERSION_NUM';
1462 1         19 return GDALVersionInfo($request);
1463             }
1464              
1465             sub GetDriver {
1466 190     190 1 1002 my ($i) = @_;
1467 190 100       291 my $d = isint($i) ? GDALGetDriver($i) : GDALGetDriverByName($i);
1468 190 50 0     431 confess error_msg() // "Driver '$i' not found." unless $d;
1469 190         431 return bless \$d, 'Geo::GDAL::FFI::Driver';
1470             }
1471              
1472             sub GetDrivers {
1473 1     1 1 297 my @drivers;
1474 1         9 for my $i (0..GDALGetDriverCount()-1) {
1475 178         271 push @drivers, GetDriver($i);
1476             }
1477 1         24 return @drivers;
1478             }
1479              
1480             sub IdentifyDriver {
1481 0     0 0 0 my ($filename, $args) = @_;
1482 0         0 my $flags = 0;
1483 0   0     0 my $a = $args->{Flags} // [];
1484 0         0 for my $f (@$a) {
1485 0         0 print "$f\n";
1486 0         0 $flags |= $open_flags{$f};
1487             }
1488 0         0 print "$flags\n";
1489 0         0 my $drivers = 0;
1490 0         0 for my $o (@{$args->{AllowedDrivers}}) {
  0         0  
1491 0         0 $drivers = Geo::GDAL::FFI::CSLAddString($drivers, $o);
1492             }
1493 0         0 my $list = 0;
1494 0         0 for my $o (@{$args->{FileList}}) {
  0         0  
1495 0         0 $list = Geo::GDAL::FFI::CSLAddString($list, $o);
1496             }
1497 0         0 my $d;
1498 0 0 0     0 if ($flags or $drivers) {
1499 0         0 $d = GDALIdentifyDriverEx($filename, $flags, $drivers, $list);
1500             } else {
1501 0         0 $d = GDALIdentifyDriver($filename, $list);
1502             }
1503 0         0 Geo::GDAL::FFI::CSLDestroy($drivers);
1504 0         0 Geo::GDAL::FFI::CSLDestroy($list);
1505 0         0 return bless \$d, 'Geo::GDAL::FFI::Driver';
1506             }
1507              
1508             sub Open {
1509 2     2 1 308 my ($name, $args) = @_;
1510 2   50     9 $name //= '';
1511 2   50     15 $args //= {};
1512 2         5 my $flags = 0;
1513 2   50     14 my $a = $args->{Flags} // [];
1514 2         8 for my $f (@$a) {
1515 0         0 $flags |= $open_flags{$f};
1516             }
1517 2         5 my $drivers = 0;
1518 2         49 for my $o (@{$args->{AllowedDrivers}}) {
  2         14  
1519 0         0 $drivers = Geo::GDAL::FFI::CSLAddString($drivers, $o);
1520             }
1521 2         6 my $options = 0;
1522 2         5 for my $o (@{$args->{Options}}) {
  2         7  
1523 0         0 $options = Geo::GDAL::FFI::CSLAddString($options, $o);
1524             }
1525 2         5 my $files = 0;
1526 2         5 for my $o (@{$args->{SiblingFiles}}) {
  2         9  
1527 0         0 $files = Geo::GDAL::FFI::CSLAddString($files, $o);
1528             }
1529 2         5266 my $ds = GDALOpenEx($name, $flags, $drivers, $options, $files);
1530 2         20 Geo::GDAL::FFI::CSLDestroy($drivers);
1531 2         8 Geo::GDAL::FFI::CSLDestroy($options);
1532 2         7 Geo::GDAL::FFI::CSLDestroy($files);
1533 2 100       12 if (@errors) {
1534 1         6 my $msg = join("\n", @errors);
1535 1         4 @errors = ();
1536 1         245 confess $msg;
1537             }
1538 1 50       6 unless ($ds) { # no VERBOSE_ERROR in options and fail
1539 0         0 confess "Open failed for '$name'. Hint: add VERBOSE_ERROR to open_flags.";
1540             }
1541 1         10 return bless \$ds, 'Geo::GDAL::FFI::Dataset';
1542             }
1543              
1544             sub write {
1545 0     0 0 0 print STDOUT $_[0];
1546             }
1547              
1548       0 0   sub close {
1549             }
1550              
1551             sub SetWriter {
1552 2     2 0 10 my ($self, $writer) = @_;
1553 2 100       9 $writer = $self unless $writer;
1554 2         15 my $w = $writer->can('write');
1555 2         8 my $c = $writer->can('close');
1556 2 50 33     16 confess "$writer must be able to write and close." unless $w && $c;
1557             #$self->{write} = $w;
1558 2         7 $self->{close} = $c;
1559             $self->{writer} = $self->{ffi}->closure(sub {
1560 5     5   474 my ($buf, $size, $count, $stream) = @_;
1561 5         17 $w->(buffer_to_scalar($buf, $size*$count));
1562 2         20 });
1563 2         82 VSIStdoutSetRedirection($self->{writer}, 0);
1564             }
1565              
1566             sub CloseWriter {
1567 1     1 0 121 my $self = shift;
1568 1 50       8 $self->{close}->() if $self->{close};
1569 1         7 $self->SetWriter;
1570             }
1571              
1572             sub get_importer {
1573 1     1 0 4 my ($self, $format) = @_;
1574 1         10 my $importer = $self->can('OSRImportFrom' . $format);
1575 1 50       5 confess "Spatial reference importer for format '$format' not found!" unless $importer;
1576 1         3 return $importer;
1577             }
1578              
1579             sub get_exporter {
1580 0     0 0 0 my ($self, $format) = @_;
1581 0         0 my $exporter = $self->can('OSRExportTo' . $format);
1582 0 0       0 confess "Spatial reference exporter for format '$format' not found!" unless $exporter;
1583 0         0 return $exporter;
1584             }
1585              
1586             sub get_setter {
1587 0     0 0 0 my ($self, $proj) = @_;
1588 0         0 my $setter = $self->can('OSRSet' . $proj);
1589 0 0       0 confess "Parameter setter for projection '$proj' not found!" unless $setter;
1590 0         0 return $setter;
1591             }
1592              
1593             sub HaveGEOS {
1594 1     1 0 124 my $t = $geometry_types{Point};
1595 1         55 my $g = OGR_G_CreateGeometry($t);
1596 1         25 OGR_G_SetPoint($g, 0, 0, 0, 0);
1597 1         4 my $c = OGR_G_CreateGeometry($t);
1598 1         3 my $n = @errors;
1599 1         1882 OGR_G_Centroid($g, $c);
1600 1 50       11 if (@errors > $n) {
1601 0         0 pop @errors;
1602 0         0 return undef;
1603             } else {
1604 1         6 return 1;
1605             }
1606             }
1607              
1608             sub SetConfigOption {
1609 0     0 0 0 my ($key, $default) = @_;
1610 0         0 CPLSetConfigOption($key, $default);
1611             }
1612              
1613             sub GetConfigOption {
1614 1     1 0 1363 my ($key, $default) = @_;
1615 1         12 return CPLGetConfigOption($key, $default);
1616             }
1617              
1618             sub FindFile {
1619 6 100   6 0 68 my ($class, $basename) = @_ == 2 ? @_ : ('', @_);
1620 6   50     27 $class //= '';
1621 6   50     21 $basename //= '';
1622 6         402 return CPLFindFile($class, $basename);
1623             }
1624              
1625             sub PushFinderLocation {
1626 1     1 0 307 my ($location) = @_;
1627 1   50     5 $location //= '';
1628 1         11 CPLPushFinderLocation($location);
1629             }
1630              
1631             sub PopFinderLocation {
1632 1     1 0 317 CPLPopFinderLocation();
1633             }
1634              
1635             sub FinderClean {
1636 0     0 0   CPLFinderClean();
1637             }
1638              
1639             BEGIN {
1640 5     5   3816 require PkgConfig;
1641 5         706900 PkgConfig->import;
1642 5         4601 require Alien::gdal;
1643 5         432807 $instance = Geo::GDAL::FFI->new();
1644             }
1645              
1646             1;
1647              
1648             =pod
1649              
1650             =encoding UTF-8
1651              
1652             =head1 NAME
1653              
1654             Geo::GDAL::FFI - A foreign function interface to GDAL
1655              
1656             =head1 VERSION
1657              
1658             Version 0.06
1659              
1660             =head1 SYNOPSIS
1661              
1662             This is an example of creating a vector dataset.
1663              
1664             use Geo::GDAL::FFI qw/GetDriver/;
1665              
1666             my $sr = Geo::GDAL::FFI::SpatialReference->new(EPSG => 3067);
1667             my $layer = GetDriver('ESRI Shapefile')
1668             ->Create('test.shp')
1669             ->CreateLayer({
1670             Name => 'test',
1671             SpatialReference => $sr,
1672             GeometryType => 'Point',
1673             Fields => [
1674             {
1675             Name => 'name',
1676             Type => 'String'
1677             }
1678             ]
1679             });
1680             my $f = Geo::GDAL::FFI::Feature->new($layer->GetDefn);
1681             $f->SetField(name => 'a');
1682             my $g = Geo::GDAL::FFI::Geometry->new('Point');
1683             $g->SetPoint(1, 2);
1684             $f->SetGeomField($g);
1685             $layer->CreateFeature($f);
1686              
1687             This is an example of reading a vector dataset.
1688              
1689             use Geo::GDAL::FFI qw/Open/;
1690              
1691             my $layer = Open('test.shp')->GetLayer;
1692             $layer->ResetReading;
1693             while (my $feature = $layer->GetNextFeature) {
1694             my $value = $feature->GetField('name');
1695             my $geom = $feature->GetGeomField;
1696             say $value, ' ', $geom->AsText;
1697             }
1698              
1699             This is an example of creating a raster dataset.
1700              
1701             use Geo::GDAL::FFI qw/GetDriver/;
1702              
1703             my $tiff = GetDriver('GTiff')->Create('test.tiff', 3, 2);
1704             my $ogc_wkt =
1705             'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS84",6378137,298.257223563,'.
1706             'AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,'.
1707             'AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,'.
1708             'AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]';
1709             $tiff->SetProjectionString($ogc_wkt);
1710             my $transform = [10,2,0,20,0,3];
1711             $tiff->SetGeoTransform($transform);
1712             my $data = [[0,1,2],[3,4,5]];
1713             $tiff->GetBand->Write($data);
1714              
1715             This is an example of reading a raster dataset. Note that using L
1716             and L can greatly reduce the time needed to process large
1717             raster datasets.
1718              
1719             use Geo::GDAL::FFI qw/Open/;
1720              
1721             my $band = Open($ARGV[0])->GetBand;
1722             my ($w_band, $h_band) = $band->GetSize;
1723             my ($w_block, $h_block) = $band->GetBlockSize;
1724             my $nodata = $band->GetNoDataValue;
1725             my ($xoff, $yoff) = (0,0);
1726             my ($min, $max);
1727              
1728             while (1) {
1729             if ($xoff >= $w_band) {
1730             $xoff = 0;
1731             $yoff += $h_block;
1732             last if $yoff >= $h_band;
1733             }
1734             my $w_real = $w_band - $xoff;
1735             $w_real = $w_block if $w_real > $w_block;
1736             my $h_real = $h_band - $yoff;
1737             $h_real = $h_block if $h_real > $h_block;
1738              
1739             my $data = $band->Read($xoff, $yoff, $w_real, $h_real);
1740              
1741             for my $y (0..$#$data) {
1742             my $row = $data->[$y];
1743             for my $x (0..$#$row) {
1744             my $value = $row->[$x];
1745             next if defined $nodata && $value == $nodata;
1746             $min = $value if !defined $min || $value < $min;
1747             $max = $value if !defined $max || $value > $max;
1748             }
1749             }
1750            
1751             $xoff += $w_block;
1752             }
1753              
1754             say "min = $min, max = $max";
1755              
1756             =head1 DESCRIPTION
1757              
1758             This is a foreign function interface to the GDAL geospatial data
1759             access library.
1760              
1761             =head1 IMPORTABLE FUNCTIONS
1762              
1763             The most important importable functions are GetDriver and Open, which
1764             return a driver and a dataset objects respectively. GetDrivers returns
1765             all available drivers as objects.
1766              
1767             Other importable functions include error handling configuration
1768             (SetErrorHandling and UnsetErrorHandling), functions that return lists
1769             of strings that are used in methods (Capabilities, OpenFlags,
1770             DataTypes, ResamplingMethods, FieldTypes, FieldSubtypes,
1771             Justifications, ColorInterpretations, GeometryTypes, GeometryFormats,
1772             GridAlgorithms), also functions GetVersionInfo, HaveGEOS,
1773             SetConfigOption, GetConfigOption, FindFile, PushFinderLocation,
1774             PopFinderLocation, and FinderClean can be imported.
1775              
1776             :all imports all above functions.
1777              
1778             =head2 GetVersionInfo
1779              
1780             my $info = GetVersionInfo($request);
1781              
1782             Returns the version information from the underlying GDAL
1783             library. $request is optional and by default 'VERSION_NUM'.
1784              
1785             =head2 GetDriver
1786              
1787             my $driver = GetDriver($name);
1788              
1789             Returns the specific driver object.
1790              
1791             =head2 GetDrivers
1792              
1793             Returns a list of all available driver objects.
1794              
1795             =head2 Open
1796              
1797             my $dataset = Open($name, {Flags => [qw/READONLY/], ...});
1798              
1799             Open a dataset. $name is the name of the dataset. Named arguments are
1800             the following.
1801              
1802             =over 4
1803              
1804             =item C
1805              
1806             Optional, default is a reference to an empty array. Note that some
1807             drivers can open both raster and vector datasets.
1808              
1809             =item C
1810              
1811             Optional, default is all drivers. Use a reference to an array of
1812             driver names to limit which drivers to test.
1813              
1814             =item C
1815              
1816             Optional, default is to probe the file system. You may use a reference
1817             to an array of auxiliary file names.
1818              
1819             =item C
1820              
1821             Optional, a reference to an array of driver specific open
1822             options. Consult the main GDAL documentation for open options.
1823              
1824             =back
1825              
1826             =head2 Capabilities
1827              
1828             Returns the list of capabilities (strings) a GDAL major object
1829             (Driver, Dataset, Band, or Layer in Geo::GDAL::FFI) can have.
1830              
1831             =head2 OpenFlags
1832              
1833             Returns the list of opening flags to be used in the Open method.
1834              
1835             =head2 DataTypes
1836              
1837             Returns the list of raster cell data types to be used in e.g. the
1838             CreateDataset method of the Driver class.
1839              
1840             =head2 FieldTypes
1841              
1842             Returns the list of field types.
1843              
1844             =head2 FieldSubtypes
1845              
1846             Returns the list of field subtypes.
1847              
1848             =head2 Justifications
1849              
1850             Returns the list of field justifications.
1851              
1852             =head2 ColorInterpretations
1853              
1854             Returns the list of color interpretations.
1855              
1856             =head2 GeometryTypes
1857              
1858             Returns the list of geometry types.
1859              
1860             =head2 SetErrorHandling
1861              
1862             Set a Perl function to catch errors reported within GDAL with
1863             CPLError. The errors are collected into @Geo::GDAL::FFI::errors and
1864             confessed if a method fails. This is the default.
1865              
1866             =head2 UnsetErrorHandling
1867              
1868             Unset the Perl function to catch GDAL errors. If no other error
1869             handler is set, GDAL prints the errors into stderr.
1870              
1871             =head1 METHODS
1872              
1873             =head2 get_instance
1874              
1875             my $gdal = Geo::GDAL::FFI->get_instance;
1876              
1877             Obtain the Geo::GDAL::FFI singleton object. The object is usually not needed.
1878              
1879             =head1 LICENSE
1880              
1881             This software is released under the Artistic License. See
1882             L.
1883              
1884             =head1 AUTHOR
1885              
1886             Ari Jolma - Ari.Jolma at gmail.com
1887              
1888             =head1 SEE ALSO
1889              
1890             L
1891              
1892             L
1893              
1894             L
1895              
1896             L
1897              
1898             L
1899              
1900             L
1901              
1902             L
1903              
1904             L
1905              
1906             L
1907              
1908             L
1909              
1910             L
1911              
1912             L
1913              
1914             L
1915              
1916             L, L, L
1917              
1918             =cut
1919              
1920             __END__;