Provided by: libffi-c-perl_0.15-2_all bug

NAME

       FFI::C::ArrayDef - Array data definition for FFI

VERSION

       version 0.15

SYNOPSIS

       In your C code:

        #include <stdio.h>

        typedef struct {
          double x, y;
        } point_t;

        void
        print_rectangle(point_t rec[2])
        {
          printf("[[%g %g] [%g %g]]\n",
            rec[0].x, rec[0].y,
            rec[1].x, rec[1].y
          );
        }

       In your Perl code:

        use FFI::Platypus 1.00;
        use FFI::C::ArrayDef;
        use FFI::C::StructDef;

        my $ffi = FFI::Platypus->new( api => 1 );
        # See FFI::Platypus::Bundle for how bundle works.
        $ffi->bundle;

        my $point_def = FFI::C::StructDef->new(
          $ffi,
          name  => 'point_t',
          class => 'Point',
          members => [
            x => 'double',
            y => 'double',
          ],
        );

        my $rect_def = FFI::C::ArrayDef->new(
          $ffi,
          name    => 'rectangle_t',
          class   => 'Rectangle',
          members => [
            $point_def, 2,
          ]
        );

        $ffi->attach( print_rectangle => ['rectangle_t'] );

        my $rect = Rectangle->new([
          { x => 1.5,  y => 2.0  },
          { x => 3.14, y => 11.0 },
        ]);

        print_rectangle($rect);  # [[1.5 2] [3.14 11]]

        # move rectangle on the y axis
        $rect->[$_]->y( $rect->[$_]->y + 1.0 ) for 0..1;

        print_rectangle($rect);  # [[1.5 3] [3.14 12]]

DESCRIPTION

       This class creates a def for a C array of structured data.  Usually the def contains a FFI::C::StructDef
       or FFI::C::UnionDef and optionally a number of elements.

CONSTRUCTOR

   new
        my $def = FFI::C::ArrayDef->new(%opts);
        my $def = FFI::C::ArrayDef->new($ffi, %opts);

       For standard def options, see FFI::C::Def.

       members
           This should be an array reference the member type, and optionally the number of elements.  Examples:

            my $struct = FFI::C::StructDef->new(...);

            my $fixed = FFI::C::ArrayDef->new(
              members => [ $struct, 10 ],
            );

            my $var = FFI::C::ArrayDef->new(
              members => [ $struct ],
            );

METHODS

   create
        my $instance = $def->create;
        my $instance = $def->class->new;          # if class was specified
        my $instance = $def->create($count);
        my $instance = $def->class->new($count);  # if class was specified
        my $instance = $def->create(\@init);
        my $instance = $def->class->new(\@init);  # if class was specified

       This creates an instance of the array.  If $count is given, this is used for the element count, possibly
       overriding what was specified when the def was created.  If the def doesn't have an element count
       specified, then you MUST provide it here.  Returns a FFI::C::Array.

       You can optionally initialize member values using @init.

SEE ALSO

       FFI::C
       FFI::C::Array
       FFI::C::ArrayDef
       FFI::C::Def
       FFI::C::File
       FFI::C::PosixFile
       FFI::C::Struct
       FFI::C::StructDef
       FFI::C::Union
       FFI::C::UnionDef
       FFI::C::Util
       FFI::Platypus::Record

AUTHOR

       Graham Ollis <plicease@cpan.org>

COPYRIGHT AND LICENSE

       This software is copyright (c) 2020-2022 by Graham Ollis.

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