// This file implements a vector (array-like container), much like the C++
// std::vector class.
// The primary distinctions between this vector and std::vector are:
// - vector has a couple extension functions that increase performance.
// - vector can contain objects with alignment requirements. std::vector
// cannot do so without a bit of tedious non-portable effort.
// - vector supports debug memory naming natively.
// - vector is easier to read, debug, and visualize.
// - vector is savvy to an environment that doesn't have exception handling,
// as is sometimes the case with console or embedded environments.
// - vector has less deeply nested function calls and allows the user to
// enable forced inlining in debug builds in order to reduce bloat.
// - vector<bool> is a vector of boolean values and not a bit vector.
// - vector guarantees that memory is contiguous and that vector::iterator
// is nothing more than a pointer to T.
// - vector has an explicit data() method for obtaining a pointer to storage
// which is safe to call even if the block is empty. This avoids the
// common &v[0], &v.front(), and &*v.begin() constructs that trigger false
// asserts in STL debugging modes.
// - vector::size_type is defined as eastl_size_t instead of size_t in order to
// save memory and run faster on 64 bit systems.
// - vector data is guaranteed to be contiguous.
// - vector has a set_capacity() function which frees excess capacity.
// The only way to do this with std::vector is via the cryptic non-obvious
// trick of using: vector<SomeClass>(x).swap(x);