diff -r 66c21518904c -r a48c1d372ad4 lib/Quancom.pm --- a/lib/Quancom.pm Thu Jan 22 04:35:14 2009 +0100 +++ b/lib/Quancom.pm Tue Jan 27 04:13:21 2009 +0100 @@ -84,8 +84,7 @@ sub set { my $self = shift; - #my $value = @_ == 1 ? 1 : pop @_ ? 1 : 0; - croak "need at least 2 values" if @_ < 2; + croak "bad usage"; my $value = pop @_ ? 1 : 0; my @bits = map { $_ - 1 } @_; my @groups = map { 0 } 0 .. 7; @@ -175,6 +174,46 @@ return $self->{last_result} = new Quancom::Result($_); } +sub TIEARRAY { + my $class = shift; + my $self = new Quancom @_; + return $self; +} + +sub STORE { + my $self = shift; + warn "@_\n"; + my ($bit, $value) = @_; + $self->set($bit + 1, $value)->ok and return $value; + croak "can't set bit $bit to $value"; +} + +sub FETCH { + my $self = shift; + warn "@_\n"; + my $bit = $_[0]; + my $value; + defined($value = $self->get($bit + 1)) + and return $value; + + croak "can't get bit $bit\n"; +} + +sub PUSH { + my $self = shift; + warn "@_\n"; + my @a; + @a[0..62] = $self->get(2..64); + $a[63] = $_[0]; + $self->set(@a); + return $self->FETCHSIZE; +} + +sub FETCHSIZE { + my $self = shift; + return 64; +} + 1; __END__