On Tue, Dec 14, 2004 at 06:16:01AM -0500, Ed Allen Smith wrote:
> No problem (assuming you mean me to run this in
> /.cpanplus/5.8.0/build/Tie-VecArray-0.01); see below for results:
Did all those cc errors wind up in the file itself or were they on STDERR?
Could I see just the resulting file without the cpp errors?
> cppstdin < lib/Tie/VecArray.pm
> #line 1 ".6696.c"
> package Tie::VecArray;
>
> use strict;
> use vars qw($VERSION);
> $VERSION = '0.01';
>
> use POSIX qw(ceil);
>
> cc-1011 cc: ERROR File = .6696.c, Line = 9
> The indicated directive is not a recognized preprocessing directive.
>
> # These are protected data members.
> ^
>
>
> use fields qw(bits vec size);
>
> use base qw(Tie::Array);
>
> =pod
>
> =head1 NAME
>
> Tie::VecArray - An array interface to a bit vector.
>
>
> =head1 SYNOPSIS
>
> require Tie::VecArray;
>
> $vector = '';
> vec($vector, 0, 32) = 33488897;
>
> cc-1011 cc: ERROR File = .6696.c, Line = 28
> The indicated directive is not a recognized preprocessing directive.
>
> # Tie the vector to an array as 8 bits.
> ^
>
>
> $obj = tie @array, 'Tie::VecArray', 8, $vector;
>
> @array[0..3] = qw(1 255 256 -1);
>
> cc-1011 cc: ERROR File = .6696.c, Line = 33
> The indicated directive is not a recognized preprocessing directive.
>
> # SURPRISE! Its 1, 255, 0, 255!
> ^
>
>
> print @array[0..3];
>
> cc-1011 cc: ERROR File = .6696.c, Line = 36
> The indicated directive is not a recognized preprocessing directive.
>
> # Look at the same vector as a 32 bit vector.
> ^
>
>
> $obj->bits(32);
>
> cc-1011 cc: ERROR File = .6696.c, Line = 39
> The indicated directive is not a recognized preprocessing directive.
>
> # Back to 33488897
> ^
>
>
> print $array[0];
>
>
> =head1 DESCRIPTION
>
> This module implements an array interface to a bit vector.
>
> =head2 Method
>
> =over 4
>
> =item B<tie>
>
> $vec_obj = tie(@array, 'Tie::VecArray', $bits);
> $vec_obj = tie(@array, 'Tie::VecArray', $bits, $vec);
>
> Creates a new @array tied to a bit vector. $bits is the number of
> bits which will be passed to C<vec()> to interpret the vector.
>
> If $vec is given that will be used as the bit vector, otherwise the
> vector will start out empty.
>
>
> =item B<bits>
>
> $bits = $vec_obj->bits;
> $vec_obj->bits($bits);
>
> Get/set the bit size we'll use to interpret the vector.
>
> When setting the bit size the length of the array might be ambiguous.
> (For instance, going from a one bit vector with five entries to a two
> bit vector... do you have two or three entries?) The length of the
> array will always round up. This can cause odd things to happen.
> Consider:
>
> $vec_obj = tie @vec, 'Tie::VecArray', 1;
>
> cc-1011 cc: ERROR File = .6696.c, Line = 78
> The indicated directive is not a recognized preprocessing directive.
>
> # A one bit vector with 5 entries.
> ^
>
>
> @vec[0..4] = (1) x 5;
>
> cc-1011 cc: ERROR File = .6696.c, Line = 81
> The indicated directive is not a recognized preprocessing directive.
>
> # prints a size of 5, as expected.
> ^
>
>
> print scalar @vec;
>
> cc-1011 cc: ERROR File = .6696.c, Line = 84
> The indicated directive is not a recognized preprocessing directive.
>
> # Switch to two bit interpretation.
> ^
>
>
> $vec_obj->bits(2);
>
> cc-1011 cc: ERROR File = .6696.c, Line = 87
> The indicated directive is not a recognized preprocessing directive.
>
> # This returns 3 since it will round up.
> ^
>
>
> print scalar @vec;
>
> cc-1011 cc: ERROR File = .6696.c, Line = 90
> The indicated directive is not a recognized preprocessing directive.
>
> # Switch back to one bit.
> ^
>
>
> $vec_obj->bits(1);
>
> cc-1011 cc: ERROR File = .6696.c, Line = 93
> The indicated directive is not a recognized preprocessing directive.
>
> # Whoops, 6!
> ^
>
>
> print scalar @vec;
>
> =cut
>
> cc-1011 cc: ERROR File = .6696.c, Line = 98
> The indicated directive is not a recognized preprocessing directive.
>
> #'#
> ^
>
>
>
> The indicated directive is not a recognized preprocessing directive.
>
> # Let's not require Filter::cpp.
> ^
>
>
> BEGIN { eval 'use Filter::cpp' }
> sub _IDX2BYTES {
> my Tie::VecArray $self = shift;
> my $idx = shift;
> cc-1040 cc: ERROR File = .6696.c, Line = 105
> An identifier is expected.
>
> #define _IDX2BYTES($self, $idx) \
> ^
>
> cc-1040 cc: ERROR File = .6696.c, Line = 105
> An identifier is expected.
>
> #define _IDX2BYTES($self, $idx) \
> ^
>
>
>
> }
>
> sub _BYTES2IDX {
> my Tie::VecArray $self = shift;
> my $bytes = shift;
> cc-1040 cc: ERROR File = .6696.c, Line = 112
> An identifier is expected.
>
> #define _BYES2IDX($self, $bytes) \
> ^
>
> cc-1040 cc: ERROR File = .6696.c, Line = 112
> An identifier is expected.
>
> #define _BYES2IDX($self, $bytes) \
> ^
>
>
>
> }
>
>
> sub TIEARRAY {
> my($class, $bits, $vec) = @_;
>
> no strict 'refs';
> my Tie::VecArray $self = bless [\%{$class.'::FIELDS'}], $class;
>
> $vec = '' unless defined $vec;
>
> $self->{bits} = $bits;
> $self->{vec} = $vec;
> $self->{size} = _BYTES2IDX($self, length $vec);
>
> return $self;
> }
>
> sub FETCH {
> my Tie::VecArray $self = shift;
> return vec($self->{vec}, $_[0], $self->{bits});
> }
>
> sub STORE {
> my Tie::VecArray $self = shift;
> $self->{size} = $_[0] + 1 if $self->{size} < $_[0] + 1;
> return vec($self->{vec}, $_[0], $self->{bits}) = $_[1];
> }
>
> sub FETCHSIZE {
> my Tie::VecArray $self = shift;
> return $self->{size};
> }
>
> sub STORESIZE {
> my Tie::VecArray $self = shift;
> my $new_size = shift;
> if( $self->{size} > $new_size ) {
> cc-1011 cc: ERROR File = .6696.c, Line = 152
> The indicated directive is not a recognized preprocessing directive.
>
> # clip the vector down to size.
> ^
>
> cc-1055 cc: ERROR File = .6696.c, Line = 153
> A macro invocation has too many arguments.
>
> my $new_length = _IDX2BYTES($self, $new_size);
> ^
>
>
> my $new_length = ceil($idx * ($self->{bits}/8));
> substr($self->{vec}, $new_length) = '' if
> $new_length < length $self->{vec};
> }
>
> $self->{size} = $new_size;
> }
>
> sub CLEAR {
> my Tie::VecArray $self = shift;
> $self->{vec} = '';
> $self->{size} = 0;
> }
>
> sub bits {
> my Tie::VecArray $self = shift;
> if(@_) {
> my $bits = shift;
> $self->{size} = ceil($self->{size} * $self->{bits} / $bits);
> $self->{bits} = $bits;
> }
> return $self->{bits};
> }
>
>
>
> =pod
>
>
> =head1 AUTHOR
>
> Michael G Schwern <[EMAIL PROTECTED]>
>
>
> =head1 SEE ALSO
>
> L<perlfunc/vec>, L<Tie::Array>
>
> =cut
>
> 1;
> 19 errors detected in the compilation of ".6696.c".
>
>
> >--
> >Michael G Schwern [EMAIL PROTECTED] http://www.pobox.com/~schwern/
> >"That's what Jagulars always do," said Pooh, much interested. "They call
> >'Help! Help!' and then when you look up they drop down on you."
> >
>
> --
> Allen Smith http://cesario.rutgers.edu/easmith/
> There is only one sound argument for democracy, and that is the argument
> that it is a crime for any man to hold himself out as better than other men,
> and, above all, a most heinous offense for him to prove it. - H. L. Mencken
>
--
Michael G Schwern [EMAIL PROTECTED] http://www.pobox.com/~schwern/
Its not just that you can't see the forest for the trees
You've never been out in the woods alone.