The general interface is exported by the gautomata::Nfa, which contains the interface gautomata::Nfa::Factory for creating automata for a given implementation and a number of methods on automata such as concatenation, determinization, minimization and so on.
Every implementation inherits from gautomata::Nfa and needs to define:
All other operations have default implementations inherited from gautomata::Nfa. The case where there is a choice of defining one of several methods, there are default implementation of all of them, but they are defined in terms of each other.
Factories are useful for implementing general procedures that are independent of Nfa implementation. Examples include procedures for testing and measurements.
Current implementations are:
gautomata::RefNfa is just a wrapper around a pointer to a gautomata::Nfa and is a technique to get value semantics instead of pointer semantics for methods that return automata.