diff options
Diffstat (limited to 'lib/GridFiller.pm')
-rw-r--r-- | lib/GridFiller.pm | 57 |
1 files changed, 47 insertions, 10 deletions
diff --git a/lib/GridFiller.pm b/lib/GridFiller.pm index dbe7010..c21168f 100644 --- a/lib/GridFiller.pm +++ b/lib/GridFiller.pm @@ -1,7 +1,8 @@ package GridFiller; use Moose; use namespace::autoclean; -use GridFiller::Types qw(GridT WordListT); +use GridFiller::Types qw(GridT WordListT ResultT GridStatusT); +use MooseX::Types::Moose qw(CodeRef); use GridFiller::Status; use GridFiller::Result; use GridFiller::Chooser::Smarter; @@ -22,20 +23,56 @@ has grid => ( is => 'ro', ); -sub fill { - my ($self,$args) = @_; +has status => ( + isa => 'GridFiller::Status', + is => 'ro', + writer => '_status', + lazy_build => 1, +); - my $status = GridFiller::Status->new({ - grid => $self->grid, +sub _build_status { + my ($self) = @_; + return GridFiller::Status->new({ words => $self->words, - mode => $args->{mode} + grid => $self->grid, + }); +} + +has chooser => ( + isa => 'GridFiller::Chooser', + is => 'rw', + lazy_build => 1, +); + +sub _build_chooser { + my ($self) = @_; + return GridFiller::Chooser::Smarter->new({ + status => $self->status, }); +} + +has result => ( + isa => 'GridFiller::Result', + is => 'rw', + lazy_build => 1, +); + +sub _build_result { + my ($self) = @_; + return GridFiller::Result->new({ + source_grid => $self->grid, + }); +} + +sub fill { + my ($self) = @_; - my $chooser_class = 'GridFiller::Chooser::'.($args->{chooser} || 'Random'); - Class::MOP::load_class($chooser_class); + my $status=$self->status; + my $result=$self->result; + my $chooser=$self->chooser; - my $result = GridFiller::Result->new({source_grid => $self->grid}); - my $chooser = $chooser_class->new({status => $status}); + $status->reset; + $result->reset; while ($status->unfilled() && $status->has_next_word()) { my $word = $status->get_next_word(); |