The OBElementTable has some problems, and I propose a replacement.
Conversion of element numbers to symbols and vice versa is one of the
operations that should be optimal in a cheminf toolkit but is not
currently. Here's what I propose:
1. No global etab is necessary, just a collection of namespaced
functions, e.g. OBElement::GetAtomicNum(). There's no need for a class
to store state, as the state will be compiled in.
2. The GetAtomicNum() will be a compiled prefix tree using switch
statements. Right now, if you ask what is the atomic number of Fermium
(element 100), it will do 100 string comparisons.
3. The GetSymbol() will be a array lookup returning compiled-in const
char*. It'll be a whisker more efficient than the current code.
4. We can add an enum for atomic symbols, in anticipation (perhaps) of
removing OBAtom::IsCarbon() and friends in place of
OBAtom::GetAtomicNum() == OBElem:Carbon
The current OBElementTable can be implemented in terms of these new
functions, but ideally it would be deprecated or better still removed.