/*!
* @concept FiniteOrderedAlphabetConcept
*
* @headerfile <seqan/basic.h>
*
* @extends OrderedAlphabetConcept
*
* @brief An type that is of finite domain and totally ordered and thus has a
* minimum and maximum value.
*
* @mfn FiniteOrderedAlphabetConcept#ValueSize
*
* @brief Number of different values a value type object can have.
*
* @signature ValueSize<T>::Type;
* @signature ValueSize<T>::VALUE;
*
* @tparam T A type to query for its value size.
*
* @return VALUE The number of different values a value of type T can have. The
* type is <tt>Type</tt>.
* @return Type The type of the result <tt>VALUE</tt>.
*
* This function is only defined for integral types like <tt>unsigned</tt>,
* <tt>int</tt>, or Dna. For floating point numbers and the 64 bit types
* <tt>__int64</tt> and <tt>__uint64</tt>, it returns 0 since there is no
* standard compliant way to return the number of values for these types.
*
* Note that you cannot get pointers or references to
* <tt>ValueSize<T>::VALUE</tt> in your program. You can use @link
* FiniteOrderedAlphabetConcept#valueSize @endlink in your programs without
* problems, though. When you get problems in your tests, use the "unary plus"
* workaround from the examples section.
*
* @section Examples
*
* The temporary assignment workaround.
*
* @code{.cpp}
* SEQAN_ASSERT_EQ(ValueSize<bool>::VALUE, 2u); // Linker error.
* SEQAN_ASSERT_EQ(+ValueSize<bool>::VALUE, 2u); // OK
* SEQAN_ASSERT_EQ(valueSize<bool>(), 2u); // OK
* @endcode
*
*
* @fn FiniteOrderedAlphabetConcept#ordValue
*
* @headerfile <seqan/sequence.h>
*
* @brief Maps an alphabet 1-to-1 to the interval [0..ValueSize).
*
* @signature T ordValue(value);
*
* @param[in] value Arbitrary character value. Types: SimpleType
*
* @return T An unsigned value (result of Size<tt><typeof(value)></tt>
* between 0 and ValueSize of the type of value.
*
* This function first converts value to its unsigned value type and after that
* to an <tt>unsigned int</tt>. You can't use <tt>(unsigned int)c</tt> for a
* character <tt>c</tt> as on some systems <tt>char</tt> is signed and a
* <tt>-1</tt> would be mapped to <tt>0xffffffff</tt> instead of
* <tt>0x000000ff</tt>.
*
* @fn FiniteOrderedAlphabetConcept#valueSize
*
* @brief Returns size of an alphabet.
*
* @signature T1 valueSize<T2>();
*
* @tparam T2 Type to query for value size.
*
* @return T1 Number of values in type <tt>T2</tt>.
*
* @see FiniteOrderedAlphabetConcept#ValueSize
*/