001/* Copyright (C) 2013 TU Dortmund 002 * This file is part of AutomataLib, http://www.automatalib.net/. 003 * 004 * AutomataLib is free software; you can redistribute it and/or 005 * modify it under the terms of the GNU Lesser General Public 006 * License version 3.0 as published by the Free Software Foundation. 007 * 008 * AutomataLib is distributed in the hope that it will be useful, 009 * but WITHOUT ANY WARRANTY; without even the implied warranty of 010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 011 * Lesser General Public License for more details. 012 * 013 * You should have received a copy of the GNU Lesser General Public 014 * License along with AutomataLib; if not, see 015 * http://www.gnu.de/documents/lgpl.en.html. 016 */ 017package net.automatalib.automata.fsa.impl; 018 019import net.automatalib.automata.base.fast.FastMutableDet; 020import net.automatalib.automata.fsa.MutableDFA; 021import net.automatalib.automata.fsa.abstractimpl.AbstractDFA; 022import net.automatalib.automata.fsa.abstractimpl.AbstractFSA; 023import net.automatalib.automata.fsa.abstractimpl.AbstractMutableFSA; 024import net.automatalib.automata.graphs.AbstractAutomatonGraph; 025import net.automatalib.commons.util.mappings.MutableMapping; 026import net.automatalib.words.Alphabet; 027 028public final class FastDFA<I> extends FastMutableDet<FastDFAState, I, FastDFAState, Boolean, Void> 029 implements MutableDFA<FastDFAState,I> { 030 031 public FastDFA(Alphabet<I> alphabet) { 032 super(alphabet); 033 } 034 035 036 037 @Override 038 public FastDFAState getSuccessor(FastDFAState transition) { 039 return AbstractFSA.getSuccessor(this, transition); 040 } 041 042 @Override 043 public <V> MutableMapping<FastDFAState, V> createStaticNodeMapping() { 044 return AbstractAutomatonGraph.createStaticNodeMapping(this); 045 } 046 047 @Override 048 public <V> MutableMapping<FastDFAState, V> createDynamicNodeMapping() { 049 return AbstractAutomatonGraph.createDynamicNodeMapping(this); 050 } 051 052 @Override 053 public Boolean getStateProperty(FastDFAState state) { 054 return AbstractFSA.getStateProperty(this, state); 055 } 056 057 @Override 058 public Void getTransitionProperty(FastDFAState transition) { 059 return AbstractFSA.getTransitionProperty(this, transition); 060 } 061 062 @Override 063 public void setStateProperty(FastDFAState state, Boolean property) { 064 AbstractMutableFSA.setStateProperty(this, state, property); 065 } 066 067 @Override 068 public void setTransitionProperty(FastDFAState transition, Void property) { 069 AbstractMutableFSA.setTransitionProperty(this, transition, property); 070 } 071 072 @Override 073 public FastDFAState createTransition(FastDFAState successor, Void properties) { 074 return AbstractMutableFSA.createTransition(this, successor, properties); 075 } 076 077 @Override 078 public FastDFAState copyTransition(FastDFAState trans, FastDFAState succ) { 079 return AbstractMutableFSA.copyTransition(this, trans, succ); 080 } 081 082 @Override 083 protected FastDFAState createState(Boolean property) { 084 boolean acc = (property != null) ? property.booleanValue() : false; 085 return createState(acc); 086 } 087 088 protected FastDFAState createState(boolean accepting) { 089 FastDFAState s = new FastDFAState(inputAlphabet.size(), 090 accepting); 091 return s; 092 } 093 094 095 096 @Override 097 public boolean isAccepting(FastDFAState state) { 098 return state.isAccepting(); 099 } 100 101 102 103 @Override 104 public boolean accepts(Iterable<I> input) { 105 return AbstractDFA.accepts(this, input); 106 } 107 108 109 110 @Override 111 public Boolean computeSuffixOutput(Iterable<I> prefix, Iterable<I> suffix) { 112 return AbstractFSA.computeSuffixOutput(this, prefix, suffix); 113 } 114 115 116 117 @Override 118 public Boolean computeOutput(Iterable<I> input) { 119 return AbstractFSA.computeOutput(this, input); 120 } 121 122 123 124 @Override 125 public FastDFAState addState(boolean accepting) { 126 FastDFAState s = addState(Boolean.valueOf(accepting)); 127 return s; 128 } 129 130 131 132 @Override 133 public FastDFAState addInitialState(boolean accepting) { 134 return addInitialState(Boolean.valueOf(accepting)); 135 } 136 137 138 139 @Override 140 public void setAccepting(FastDFAState state, boolean accepting) { 141 state.setAccepting(accepting); 142 } 143 144 145 146 @Override 147 public void flipAcceptance() { 148 AbstractMutableFSA.flipAcceptance(this); 149 } 150 151 152}