diff options
author | Daniel Friesel <derf@finalrewind.org> | 2017-04-03 15:04:15 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2017-04-03 15:04:15 +0200 |
commit | 00e57331b1c7ef2b1f402f41e1223308e0d8ce61 (patch) | |
tree | 05e9b4223072582a5a6843de6d9845213a94f341 /lib/FLAT/Transition.pm |
initial commit
Diffstat (limited to 'lib/FLAT/Transition.pm')
-rw-r--r-- | lib/FLAT/Transition.pm | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/FLAT/Transition.pm b/lib/FLAT/Transition.pm new file mode 100644 index 0000000..fc385f3 --- /dev/null +++ b/lib/FLAT/Transition.pm @@ -0,0 +1,66 @@ +package FLAT::Transition; +use strict; +use Carp; + +sub new { + my ($pkg, @things) = @_; + bless { map { $_ => 1 } @things }, $pkg; +} + +sub does { + my ($self, @things) = @_; + return 1 if @things == 0; + return !! grep $self->{$_}, @things; +} + +sub add { + my ($self, @things) = @_; + @$self{@things} = (1) x @things; +} + +sub delete { + my ($self, @things) = @_; + delete $self->{$_} for @things; +} + +sub alphabet { + my $self = shift; + sort { $a cmp $b } keys %$self; +} + +sub as_string { + my $self = shift; + join ",", map { length $_ ? $_ : "epsilon" } $self->alphabet; +} + +1; + +__END__ + +=head1 NAME + +FLAT::Transition - a transition base class. + +=head1 SYNOPSIS + +Default implementation of the Transition class, used to manage transitions +from one state to others. This class is meant for internal use. + +=head1 USAGE + +used internally; + +=head1 AUTHORS & ACKNOWLEDGEMENTS + +FLAT is written by Mike Rosulek E<lt>mike at mikero dot comE<gt> and +Brett Estrade E<lt>estradb at gmail dot comE<gt>. + +The initial version (FLAT::Legacy) by Brett Estrade was work towards an +MS thesis at the University of Southern Mississippi. + +Please visit the Wiki at http://www.0x743.com/flat + +=head1 LICENSE + +This module is free software; you can redistribute it and/or modify it under +the same terms as Perl itself. |