Simbody
3.7

This templatized type is used by the Array_<T,X> classes to obtain the information they need to use the class X as an index class for the array. More...
Public Types  
typedef X::size_type  size_type 
The signed or unsigned integral type to which an object of index type X can be converted without producing any compiler warnings. More...  
typedef X::difference_type  difference_type 
A signed integral type large enough to hold the full range of possible signed differences ij between two indices i and j of type X. More...  
Static Public Member Functions  
static size_type  max_size () 
The maximum allowable size for any Array_<T,X> that uses this type X as its index type. More...  
This templatized type is used by the Array_<T,X> classes to obtain the information they need to use the class X as an index class for the array.
There must be a specialization here providing ArrayIndexTraits for each of the builtin integral types that is suitable for use as an index. Any other type X will qualify as an index if it defines the following members:
max_size() determines the largest number of elements that a container may hold if its index type is X.
size_type must be an integral type large enough to hold all the values from 0 to max_size(), including all the index values (which range from 0 to max_size()1). size_type may be signed or unsigned; it is the type returned by size(), max_size(), capacity(), etc. and may be compared directly against an index of type X without producing a compiler warning.
difference_type is a signed integral type that can hold all possible differences between two indices, that is, values between (max_size()1) and +(max_size()1). In most cases we use an integral type with the same number of bits for size_type and difference_type but when the index type is very small (bool, unsigned char, or unsigned short) we want to allow the full range (2, 255, or 65535 elements, resp.) in which case we need a wider type to hold the differences.
The conversion operator ensures that we can write size_type(i) for an index i of type X. An explicit conversion member does not need to be present as long as the conversion size_type(i) already works as it does for all the integral type specializations.
The SimTK typegenerating macro SimTK_DEFINE_UNIQUE_INDEX_TYPE() provides the necessary members so that these types can be used directly as index types for Array_ objects with no further preparation. For example, you can make an Array_<int,MobilizedBodyIndex> that stores ints that can be indexed only via MobilizedBodyIndex indices.
X  A type suitable for use as an Array_ index. 
typedef X::size_type SimTK::ArrayIndexTraits< X >::size_type 
The signed or unsigned integral type to which an object of index type X can be converted without producing any compiler warnings.
typedef X::difference_type SimTK::ArrayIndexTraits< X >::difference_type 
A signed integral type large enough to hold the full range of possible signed differences ij between two indices i and j of type X.

inlinestatic 
The maximum allowable size for any Array_<T,X> that uses this type X as its index type.