Arbitrary Width Integers

This system of crates together forms a kind of big-integer library with separated storage and functional structs, manually controlled bitwidth, and bitwidth dependent operations. Instead of one struct that has all of the allocation and functional capabilities, there are two storage types which manage allocation, InlAwi and ExtAwi, and a common Bits reference type that manages arithmetical functionality. Most operations on Bits are const and have no allocations. Bits backed by InlAwi can perform big-integer arithmetic both at compile time and in a no-std runtime without any allocator at all. Bits backed by ExtAwi can use dynamic bitwidths at runtime. If a function is written purely in terms of Bits, then any mix of InlAwis and ExtAwis can be used as arguments to that function.

A generic FP struct for fixed point numbers is also included, adding more functions for it is currently a WIP.

Bits and InlAwi are provided by the awint_core crate. ExtAwi and FP is provided by the awint_ext crate. The reason for this split is to provide maximum flexibility to no-std and no-alloc use cases. ExtAwi is not within awint_core under a feature flag, because if a no-alloc project depended on both awint_core and awint_macros (which requires ExtAwi), the flag would be activated for the common compilation of awint_core. The awint_macros crate is a proc-macro crate with several construction utilities. The awint_dag crate supplies a way to use awint types as a DSL (Domain Specific Language) for combinational logic. The awint crate compiles these interfaces together and enables or disables different parts of the system depending on these feature flags:

Note: By default, "const_support" and "std" are turned on, use default-features = false and select specific features to avoid requiring nightly.

NOTE: As of Rust 1.64, if you try to use "constsupport" with the macros you may get strange "erroneous constant used" and "derefmut" errors unless you add all of ```

![feature(consttraitimpl)]

![feature(constmutrefs)]

![feature(const_option)]

`` to _all_ of the crate roots where you use the macros inconst` contexts.

Planned Features

These are currently unimplemented because of other developments and improvements that are being prioritized. Please open an issue or PR if you would like these implemented faster.