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.

Reply via email to