File Coverage

blib/lib/Geo/GDAL/FFI.pm
Criterion Covered Total %
statement 2139 2217 96.4
branch 37 72 51.3
condition 13 34 38.2
subroutine 44 64 68.7
pod 15 36 41.6
total 2248 2423 92.7


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