lib/Quancom.pm
branchtied
changeset 24 a48c1d372ad4
parent 23 66c21518904c
child 25 e3f3806a12ec
--- 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__