NAME

    FFI::Util - Some useful pointer utilities when writing FFI modules

VERSION

    version 0.12

SYNOPSIS

     use FFI::Util;

DESCRIPTION

    Note: This module has largely been obsoleted by FFI::Platypus, which I
    recommend that you use instead of this module. This module may be
    removed from CPAN at a future date, but not before 31 January 2017.

    This module provides some useful memory manipulation that is either
    difficult or impossible in pure Perl. It was originally intended to be
    used by Archive::Libarchive::FFI, but it may be useful in other
    projects.

FUNCTIONS

 locate_module_share_lib

     my $path = locate_module_share_lib();
     my $path = locate_module_share_lib($module_name, $module_filename);

    Returns the path to the shared library for the current module, or the
    module specified by $module_name (example: Foo::Bar)
    $module_filename(example /full/path/Foo/Bar.pm).

 scalar_to_buffer

     my($ptr, $size) = scalar_to_buffer $scalar;

    Given a scalar string value, return a pointer to where the data is
    stored and the size of the scalar in bytes.

 buffer_to_scalar

     my $scalar = buffer_to_scalar($ptr, $size);

    Given a pointer to a memory location and a size, construct a new scalar
    with the same content and size.

 deref_ptr_get

     my $ptr2 = deref_ptr_get($ptr1);

    equivalent to

     void *ptr1;
     void *ptr2;
     *ptr2 = *ptr1;

 deref_ptr_set

     deref_ptr_set($ptr1, $ptr2);

    equivalent to

     void **ptr1;
     void *ptr2;
     *ptr1 = ptr2;

 deref_str_get

     my $string = deref_str_get($ptr);

    equivalent to

     const char *string;
     const char **ptr;
     string = *ptr;

 deref_str_set

     deref_str_set($ptr, $string);

    equivalent to

     const char **ptr;
     const char *string;
     *ptr = string;

 deref_int_get

     my $integer = deref_int_get($ptr);

    equivalent to

     int *ptr;
     int integer;
     integer = *ptr;

 deref_int_set

     deref_int_set($ptr, $integer);

    equivalent to

     int *ptr;
     int integer;
     *ptr = integer;

 deref_uint_get

     my $unsigned_integer = deref_uint_get($ptr);

    equivalent to

     unsigned int unsigned_integer;
     unsigned int *ptr;
     unsigned_integer = *ptr;

 deref_uint_set

     deref_uint_set($ptr, $unsigned_integer);

    equivalent to

     unsigned int *ptr;
     unsigned int unsigned_integer;
     *ptr = unsigned_integer;

 deref_short_get

     my $short_integer = deref_short_get($ptr);

    equivalent to

     short short_integer;
     short *ptr;
     short_integer = *ptr;

 deref_short_set

     deref_short_set($ptr, $short_integer);

    equivalent to

     short *ptr;
     short short_integer;
     *ptr = short_integer;

 deref_ushort_get

     my $unsigned_short_integer = deref_ushort_get($ptr);

    equivalent to

     unsigned short unsigned_short_integer;
     unsigned short *ptr;
     unsigned unsigned_short_integer = *ptr;

 deref_ushort_set

     deref_ushort_set($ptr, $unsigned_short_integer);

    equivalent to

     unsigned short *ptr;
     unsigned short unsigned_short_integer;
     *ptr = unsigned_short_integer;

 deref_long_get

     my $long_integer = deref_long_get($ptr);

    equivalent to

     long long_integer;
     long *ptr;
     long_integer = *ptr;

 deref_long_set

     deref_long_set($ptr, $long_integer);

    equivalent to

     long *ptr;
     long long_integer;
     *ptr = long_integer;

 deref_ulong_get

     my $unsigned_long_integer = deref_ulong_get($ptr);

    equivalent to

     unsigned long unsigned_long_integer;
     unsigned long *ptr;
     unsigned unsigned_long_integer = *ptr;

 deref_ulong_set

     deref_ulong_set($ptr, $unsigned_long_integer);

    equivalent to

     unsigned long *ptr;
     unsigned long unsigned_long_integer;
     *ptr = unsigned_long_integer;

 deref_char_get

     my $char_integer = deref_char_get($ptr);

    equivalent to

     char char_integer;
     char *ptr;
     char_integer = *ptr;

 deref_char_set

     deref_char_set($ptr, $char_integer);

    equivalent to

     char *ptr;
     char char_integer;
     *ptr = char_integer;

 deref_uchar_get

     my $unsigned_char_integer = deref_uchar_get($ptr);

    equivalent to

     unsigned char unsigned char_integer;
     unsigned char *ptr;
     unsigned_char_integer = *ptr;

 deref_uchar_set

     deref_uchar_set($ptr, $unsigned_char_integer);

    equivalent to

     unsigned char *ptr;
     unsigned char unsigned_char_integer;
     *ptr = unsigned_char_integer;

 deref_float_get

     my $single_float = deref_float_get($ptr);

    equivalent to

     float single_float;
     float *ptr;
     single_float = *ptr;

 deref_float_set

     deref_float_set($ptr, $single_float);

    equivalent to

     float *ptr;
     float single_float;
     *ptr = single_float;

 deref_double_get

     my $double_float = deref_double_get($ptr);

    equivalent to

     double double_float;
     double *ptr;
     double_float = *ptr;

 deref_double_set

     deref_double_set($ptr, $double_float);

    equivalent to

     double *ptr;
     double double_float;
     *ptr = double_float;

 deref_int64_get

     my $int64 = deref_int64_get($ptr);

    equivalent to

     int64_t int64;
     int64_t *ptr;
     int64 = *ptr;

 deref_int64_set

     deref_int64_set($ptr, $int64);

    equivalent to

     int64_t *ptr;
     int64_t int64;
     *ptr = int64;

 deref_uint64_get

     my $uint64 = deref_uint64_get($ptr);

    equivalent to

     uint64_t uint64;
     uint64_t *ptr;
     uint64 = *ptr;

 deref_uint64_set

     deref_uint64_set($ptr, $uint64);

    equivalent to

     uint64_t *ptr;
     uint64_t uint64;
     *ptr = uint64;

 deref_dev_t_get

    Alias for appropriate derf_..._get if dev_t is provided by your
    compiler.

 deref_dev_t_set

    Alias for appropriate derf_..._set if dev_t is provided by your
    compiler.

 deref_gid_t_get

    Alias for appropriate derf_..._get if gid_t is provided by your
    compiler.

 deref_gid_t_set

    Alias for appropriate derf_..._set if gid_t is provided by your
    compiler.

 deref_size_t_get

    Alias for appropriate derf_..._get if size_t is provided by your
    compiler.

 deref_size_t_set

    Alias for appropriate derf_..._set if size_t is provided by your
    compiler.

 deref_time_t_get

    Alias for appropriate derf_..._get if time_t is provided by your
    compiler.

 deref_time_t_set

    Alias for appropriate derf_..._set if time_t is provided by your
    compiler.

 deref_uid_t_get

    Alias for appropriate derf_..._get if uid_t is provided by your
    compiler.

 deref_uid_t_set

    Alias for appropriate derf_..._set if uid_t is provided by your
    compiler.

SEE ALSO

    Module::Build::FFI

    FFI::Platypus

AUTHOR

    Graham Ollis <plicease@cpan.org>

COPYRIGHT AND LICENSE

    This software is copyright (c) 2013 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.

