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 java.util.Collection; 020 021import net.automatalib.automata.base.fast.FastMutableNondet; 022import net.automatalib.automata.dot.DOTHelperFSA; 023import net.automatalib.automata.dot.DOTPlottableAutomaton; 024import net.automatalib.automata.fsa.MutableNFA; 025import net.automatalib.automata.fsa.abstractimpl.AbstractFSA; 026import net.automatalib.automata.fsa.abstractimpl.AbstractMutableFSA; 027import net.automatalib.automata.fsa.abstractimpl.AbstractNFA; 028import net.automatalib.automata.graphs.TransitionEdge; 029import net.automatalib.commons.util.WrapperUtil; 030import net.automatalib.graphs.dot.GraphDOTHelper; 031import net.automatalib.words.Alphabet; 032 033 034public class FastNFA<I> extends 035 FastMutableNondet<FastNFAState, I, FastNFAState, Boolean, Void> implements 036 MutableNFA<FastNFAState, I>, DOTPlottableAutomaton<FastNFAState, I, FastNFAState> { 037 038 039 public FastNFA(Alphabet<I> inputAlphabet) { 040 super(inputAlphabet); 041 } 042 043 044 /* 045 * (non-Javadoc) 046 * @see de.ls5.automata.fsa.NFA#isAccepting(java.util.Collection) 047 */ 048 @Override 049 public boolean isAccepting(Collection<? extends FastNFAState> states) { 050 return AbstractNFA.isAccepting(this, states); 051 } 052 053 054 /* 055 * (non-Javadoc) 056 * @see de.ls5.ts.TransitionSystem#getSuccessor(java.lang.Object) 057 */ 058 @Override 059 public FastNFAState getSuccessor(FastNFAState transition) { 060 return AbstractNFA.getSuccessor(this, transition); 061 } 062 063 064 /* 065 * (non-Javadoc) 066 * @see de.ls5.ts.acceptors.AcceptorTS#accepts(java.lang.Iterable) 067 */ 068 @Override 069 public boolean accepts(Iterable<I> input) { 070 return AbstractNFA.accepts(this, input); 071 } 072 073 074 /* 075 * (non-Javadoc) 076 * @see de.ls5.ts.acceptors.AcceptorTS#isAccepting(java.lang.Object) 077 */ 078 @Override 079 public boolean isAccepting(FastNFAState state) { 080 return state.isAccepting(); 081 } 082 083 084 /* 085 * (non-Javadoc) 086 * @see de.ls5.automata.fsa.MutableFiniteStateAcceptor#setAccepting(java.lang.Object, boolean) 087 */ 088 @Override 089 public void setAccepting(FastNFAState state, boolean accepting) { 090 state.setAccepting(accepting); 091 } 092 093 094 /* 095 * (non-Javadoc) 096 * @see de.ls5.automata.MutableAutomaton#setStateProperty(java.lang.Object, java.lang.Object) 097 */ 098 @Override 099 public void setStateProperty(FastNFAState state, Boolean property) { 100 AbstractMutableFSA.setStateProperty(this, state, property); 101 } 102 103 104 /* 105 * (non-Javadoc) 106 * @see de.ls5.automata.MutableAutomaton#setTransitionProperty(java.lang.Object, java.lang.Object) 107 */ 108 @Override 109 public void setTransitionProperty(FastNFAState transition, Void property) { 110 AbstractMutableFSA.setTransitionProperty(this, transition, property); 111 } 112 113 114 /* 115 * (non-Javadoc) 116 * @see de.ls5.automata.MutableAutomaton#createTransition(java.lang.Object, java.lang.Object) 117 */ 118 @Override 119 public FastNFAState createTransition(FastNFAState successor, Void properties) { 120 return AbstractMutableFSA.createTransition(this, successor, properties); 121 } 122 123 124 /* 125 * (non-Javadoc) 126 * @see de.ls5.automata.MutableAutomaton#copyTransition(java.lang.Object, java.lang.Object) 127 */ 128 @Override 129 public FastNFAState copyTransition(FastNFAState trans, FastNFAState succ) { 130 return AbstractMutableFSA.copyTransition(this, trans, succ); 131 } 132 133 134 /* 135 * (non-Javadoc) 136 * @see de.ls5.automata.base.fast.FastMutableNondet#createState(java.lang.Object) 137 */ 138 @Override 139 protected FastNFAState createState(Boolean property) { 140 return new FastNFAState(inputAlphabet.size(), 141 WrapperUtil.booleanValue(property)); 142 } 143 144 145 /* 146 * (non-Javadoc) 147 * @see net.automatalib.ts.UniversalTransitionSystem#getStateProperty(java.lang.Object) 148 */ 149 @Override 150 public Boolean getStateProperty(FastNFAState state) { 151 return AbstractFSA.getStateProperty(this, state); 152 } 153 154 155 /* 156 * (non-Javadoc) 157 * @see net.automatalib.ts.UniversalTransitionSystem#getTransitionProperty(java.lang.Object) 158 */ 159 @Override 160 public Void getTransitionProperty(FastNFAState transition) { 161 return AbstractFSA.getTransitionProperty(this, transition); 162 } 163 164 165 /* 166 * (non-Javadoc) 167 * @see net.automatalib.automata.fsa.MutableFSA#flipAcceptance() 168 */ 169 @Override 170 public void flipAcceptance() { 171 AbstractMutableFSA.flipAcceptance(this); 172 } 173 174 175 /* 176 * (non-Javadoc) 177 * @see net.automatalib.automata.concepts.SuffixOutput#computeSuffixOutput(java.lang.Iterable, java.lang.Iterable) 178 */ 179 @Override 180 public Boolean computeSuffixOutput(Iterable<I> prefix, Iterable<I> suffix) { 181 return AbstractFSA.computeSuffixOutput(this, prefix, suffix); 182 } 183 184 185 /* 186 * (non-Javadoc) 187 * @see net.automatalib.automata.concepts.Output#computeOutput(java.lang.Iterable) 188 */ 189 @Override 190 public Boolean computeOutput(Iterable<I> input) { 191 return AbstractFSA.computeOutput(this, input); 192 } 193 194 195 /* 196 * (non-Javadoc) 197 * @see net.automatalib.automata.fsa.MutableFSA#addState(boolean) 198 */ 199 @Override 200 public FastNFAState addState(boolean accepting) { 201 return addState(Boolean.valueOf(accepting)); 202 } 203 204 205 /* 206 * (non-Javadoc) 207 * @see net.automatalib.automata.fsa.MutableFSA#addInitialState(boolean) 208 */ 209 @Override 210 public FastNFAState addInitialState(boolean accepting) { 211 return addInitialState(Boolean.valueOf(accepting)); 212 } 213 214 215 @Override 216 public GraphDOTHelper<FastNFAState, TransitionEdge<I, FastNFAState>> getDOTHelper() { 217 return new DOTHelperFSA<>(this); 218 } 219 220 221}