#
#  $Id: SimpleCardPile.pm,v 4.6 1999/06/14 05:13:13 kono Exp $
#
package CardPlay::SimpleCardPile;

use strict;

use vars qw($VERSION @ISA @EXPORT @EXPORT_OK
);

require Exporter;
require AutoLoader;

@ISA = qw(Exporter AutoLoader);

@EXPORT = qw( );

$VERSION = "0.2";

use Carp;

sub new {
    my $type = shift;
    my %arg = @_;
    my $self;
    
    %$self = @_;
    defined($arg{'-contents'}) or $self->{'-contents'} = [];
    bless $self;
}

sub merge_args {
    my ($self,%args) = @_;
    foreach my $key ( keys %args ) {
	if (defined( $args{$key} )) { 
	    $self->{$key} = $args{$key}; 
	}
    }
}
 
sub shuffle {
    my ($self) = @_;
    my ($card) = $self->{'-contents'};
    my (@old) = @{$self->{'-contents'}};

    $#{$card} = -1;
    while(@old) {
	push(@{$card},splice(@old,rand(@old),1));
    }
    $self;
}

sub merge {
    my ($self,$cardpile) = @_;
    return if ($cardpile==0);
    if (defined($self->{'-reverse_merge'})) {
        $cardpile->reverse();
    }
    push(@{$self->{-contents}},@{$cardpile->{-contents}});
    return;
}

sub print {
    my ($self) = @_;
    print STDERR map($_->{'-suit'} . $_->{'-number'}." ",
	@{$self->{'-contents'}}),"\n";
}

sub split {
    my ($self,$i) = @_;
    my ($new);
    my (@contents);
    if ($i>=0) {
	@contents = splice(@{$self->{'-contents'}},$i);
    } else {
	@contents = splice(@{$self->{'-contents'}},$#{$self->{'-contents'}}+$i+1);
    }

    return 0 if (! @contents);
    $new = $self->class->new(-contents=>\@contents);
    if (defined($self->{'-reverse_merge'})) {
        $new->reverse();
    }
    return $new;
}

sub reverse {
    my ($self) = @_;
    @{$self->{'-contents'}} = reverse(@{$self->{'-contents'}});
}

sub count {
    my ($self) = @_;
    return $#{$self->{'-contents'}}+1;
}

sub empty {
    my ($self) = @_;
    return !defined($self->{'-contents'}->[0]);
}

sub clear {
    my ($self) = @_;
    $#{$self->{'-contents'}}= -1;
}

sub last {
    my ($self) = @_;
    return $self->{'-contents'}->[$#{$self->{'-contents'}}];
}

sub first {
    my ($self) = @_;
    return $self->{'-contents'}->[0];
}

sub at {
    my ($self,$i) = @_;
    return $self->{'-contents'}->[$i];
}

sub close_all {
    my ($self) = shift;
    local ($_);
    grep($_->{'-state'}='close',@{$self->{'-contents'}});
}

sub open_all {
    my ($self) = shift;
    local ($_);
    grep($_->{'-state'}='open',@{$self->{'-contents'}});
}

1;

# end
