NAME

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

VERSION

    version 0.07

SYNOPSIS

     use FFI::Util;

DESCRIPTION

    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::Raw

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.

