- Rename LLAtomic to LLAtomicBase
- LLAtomicBase has now only one required argument, the type to wrap. The other will be deduced as std::atomic< Type > if not supplied.
- I did notice the forward declaration in llapp.h was not used, so away with it.
The apr atomics had been problematic as no one ever did bother to call apr_atomic_init. This:
- either did lead to crashes if apr was compiled to use a mutex for thread safe variable intialisation
- or initialisation was okay, but apr did not synchronize setting the *pointer to a value.
Generalize the notion of getting some chunk of "static" storage: introduce
LLInstanceTrackerBase::getStatic() template method. Define StaticData struct
containing the InstanceMap (or InstanceSet, for that specialization) along
with the S32 that caused the VS2010 linker so much grief. Completely eliminate
that S32 as an actual class-static member, qualifying all references with the
struct returned by getStatic().
In LLInstanceTrackerBase::getInstances(), use one std::map lookup instead of
three.