C::DynaLib::Struct 0.55 review

Download
by rbytes.net on

C::DynaLib::Struct is a tool for handling the C `struct' data type. SYNOPSIS use C::DynaLib::Struct; Define C::DynaLib::

License: Perl Artistic License
File size: 35K
Developer: John Tobey
0 stars award from rbytes.net

C::DynaLib::Struct is a tool for handling the C `struct' data type.

SYNOPSIS

use C::DynaLib::Struct;

Define C::DynaLib::Struct(
$struct_tag,
$template0, @field_names0,
[$template1, @field_names1,]
... );

$rstruct = tie( $struct, $struct_tag [, @initializer_list] );
$value = $rstruct->my_field();
$rstruct->my_field( $new_value );

$pointer_to_struct = pack( 'p', $struct );
$struct = $new_struct; # assigns all fields at once

# after passing pointer-to-struct to a C function:
$rstruct->Unpack();
$returned_value = $rstruct->my_field();

When mixing Perl and C, the conversion of data types can be rather tedious and error-prone. This module provides an abstraction from Perl's pack and unpack operators for using structures whose member data types and positions do not change.

Here are some examples of C code that deals with a struct. On the right are some possible Perl equivalents.

C Perl
- ----
typedef struct { use C::DynaLib::Struct;
int m_int; Define C::DynaLib::Struct(
double m_double; 'Foo',
char * m_string; 'i' => ['m_int'],
} Foo; 'd' => ['m_double'],
'p' => ['m_string'] );
# or, equivalently,
Define C::DynaLib::Struct('Foo',
'idp', [qw(m_int m_double m_string)]);

Foo foo;
Foo *pfoo = &foo; $rfoo = tie ($foo, 'Foo');

i = pfoo->m_int; $i = $rfoo->m_int;

d = foo.m_double; $d = (tied $foo)->m_double;

pfoo->m_string = "hi"; $rfoo->m_string("hi");

Foo bar; tie ($bar, 'Foo');
bar = foo; $bar = $foo;

void do_foo(Foo *arg); use C::DynaLib;
$lib = new C::DynaLib("-lfoo");
$do_foo = $lib->DeclareSub("do_foo","","P");
# or you could write an XSUB.

do_foo(&foo); &$do_foo($foo);

returned_i = foo.m_int; $rfoo->Unpack();
$returned_i = $rfoo->m_int;

Requirements:
Perl

C::DynaLib::Struct 0.55 keywords