OpenFst Conventions
The OpenFst Libary has various conventions and assumptions about its objects and coding style.
Object Conventions
- The
StateIds
of an FST are dense integers, numbered from 0 to NumStates()
- 1.
- A
StateIterator
returns StateIds
in numerical order.
- A user may not request info about a
StateId
s from an FST unless the FST has already returned a StateId
t ≥ s (e.g. from Start()
, NumStates()
, StateIterator
, or ArcIterator->Value().nextstate
).
- The empty machine (no states) has start state
kNoStateId
; a non-empty machine (has states) has a valid start state.
- A
Label
is a non-negative integer except kNoLabel
(or library internals). The label 0
is reserved for epsilon.
- A
Weight
satisfies the properties described here.
- A
StateIterator
is invalidated if the number of states is modified.
- An
ArcIterator
for a state is invalidated by any mutation of the arcs at that state.
- A
MutableArcIterator
is invalidated by any mutation of the arcs at that state other than by the iterator itself.
- A
Matcher
is invalidated by any mutation of an FST.
- A reference/pointer to an arc is invalidated at the next operation on an FST, state iterator, arc iterator, or matcher.
- State iterators, arc iterators and matchers should be destroyed prior to destroying their component FSTs.
- All FST classes F implement a copy constructor
F(const &F)
.
- The copy constructor and
Copy()
method of an FST have constant time and space complexity (shallow copy) unless otherwise noted.
- One or more stored FST properties may be set to unknown once an FST is mutated depending on the type of mutation.
Coding Conventions
FST Application Code:
- Your code should rarely use
int
or float
when referring to FST components. Use:
-
StateId
for state Ids and number of states.
-
Label
for labels.
-
size_t
for other array lengths.
-
Weight
for weights.
New FST classes:
- All FST classes will implement working versions of all pure virtual member functions; writing dummy or error-raising versions is not permitted.
- If class
C
is templated on an Arc, then C::Arc
will give that type.