C-DynaLib
view release on metacpan or search on metacpan
lib/C/DynaLib/Struct.pm view on Meta::CPAN
sub Define {
my ($class, $new_class) = splice(@_, 0, 2);
if (defined (${"${new_class}::template"})) {
carp "Redefinition of Struct $new_class";
}
*{"${new_class}::TIESCALAR"} = \&C::DynaLib::Struct::Imp::TIESCALAR;
*{"${new_class}::AUTOLOAD"} = \&C::DynaLib::Struct::Imp::AUTOLOAD;
@{"${new_class}::ISA"} = qw (C::DynaLib::Struct::Imp);
my ($template, %fieldno) = ("");
my ($index, $template_fragment, $fields) = (0);
while (1) {
($template_fragment, $fields) = splice(@_, 0, 2);
last unless defined ($template_fragment);
ref ($fields) eq 'ARRAY'
or die 'Usage: Define C::DynaLib::Struct( $struct_name, $template, \@field_names )';
$template .= $template_fragment;
my $i;
for $i (0 .. $#$fields) {
defined (&{"C::DynaLib::Struct::Imp::$fields->[$i]"})
and croak "Illegal Struct member name: \"$fields->[$i]\"";
$fieldno{$fields->[$i]} = $index;
++ $index;
}
}
*{"${new_class}::fieldno"} = \%fieldno;
*{"${new_class}::template"} = \$template;
( run in 1.783 second using v1.01-cache-2.11-cpan-b16cb0d3907 )