summaryrefslogtreecommitdiff
path: root/lib/FLAT/Transition.pm
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2017-04-03 15:04:15 +0200
committerDaniel Friesel <derf@finalrewind.org>2017-04-03 15:04:15 +0200
commit00e57331b1c7ef2b1f402f41e1223308e0d8ce61 (patch)
tree05e9b4223072582a5a6843de6d9845213a94f341 /lib/FLAT/Transition.pm
initial commit
Diffstat (limited to 'lib/FLAT/Transition.pm')
-rw-r--r--lib/FLAT/Transition.pm66
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.