Element Encoder Macro

This macro is invoked by __encode_bits! with a set of bits that exactly fills some BitStore element type. It is responsible for encoding those bits into the raw memory bytes and assembling them into a whole integer.

It works by inspecting the $order argument. If it is one of LocalBits, Lsb0, or Msb0, then it can do the construction in-place, and get solved during const evaluation. If it is any other ordering, then it emits runtime code to do the translation and defers to the optimizer for evaluation.

It divides the input into clusters of eight bit expressions, then uses the $order argument to choose whether the bits are accumulated into a u8 using Lsb0, Msb0, or LocalBits ordering. The accumulated byte array is then converted into an integer using the corresponding uN::from_{b,l,n}e_bytes function in __ty_from_bytes!.

Once assembled, the raw integer is changed into the requested final type. This currently routes through a helper type that unifies const fn constructors for each of the raw integer fundamentals, cells, and atomics in order to avoid transmutes.