# Development Tasks - basexx
## Architecture
- [x] Create a modular architecture with a central `lib.rs`.
- [x] Implement separate modules for each encoding scheme.
## Modules
- [x] Implement `base64` module.
- [x] Implement `base58` module.
- [x] Implement `base56` module.
- [x] Implement `base32` module.
- [x] Implement `ags` module.
- [x] Implement `base64g` variant module.
- [x] Implement `base58b` variant module.
- [x] Implement `base58r` variant module.
- [x] Implement `base32i` variant module.
## Performance Optimizations
- [x] Implement runtime CPU feature detection for SIMD.
- [x] Implement AVX2 optimizations for applicable modules.
- [x] Implement SSSE3 optimizations for applicable modules.
- [x] Implement scalar fallback for all modules.
## Data Structures
- [x] Implement `AsciiGraphicSet` for character set management.
- [x] Implement `BaseXX` structs for each encoding scheme.
## Public API
- [x] Implement `new()` method for all `BaseXX` structs.
- [x] Implement `with_str()` and `with_slice()` for all `BaseXX` structs.
- [x] Implement `encode()` method for all `BaseXX` structs.
- [x] Implement `decode()` method for all `BaseXX` structs.
## Error Handling
- [x] Implement `EncodeError` enum.
- [x] Implement `DecodeError` enum.
## Feature Flags
- [x] Implement `rug` feature flag.
- [x] Implement `bench`, `abench`, `ubench`, and `nobench` feature flags.
- [x] Implement `aligned_data` feature flag.
## Testing and Benchmarking
- [x] Write unit tests for all modules.
- [x] Write integration tests.
- [x] Write benchmarks for all modules.