# funreg: Functional Register I/O using modern C++ *funreg* provides a functional approach to interacting with registers. The library includes support for memory-mapped registers; however, other types of registers can be supported through creating a simple access interface. A unique feature of this library is its ability to handle multiple register operations with a single function call; these operations will be merged together so that the register is only read and written once. Registers may also be organized into groups. These groups can similarly receive a list of operations, which will be directed the to the appropriate registers for the same single-read-single-write process. For example, LEDs can be controlled by a microcontroller with a single call: ```cpp LEDS::modify(); ``` ...no matter if the LEDs use different registers, or if any of them are controlled by an external circuit rather than a built-in IO peripheral. See `GUIDE.md` for a walk-through of the available functionality. ## Feature overview * Define registers of any size, at any address, with optional custom access interface * Define register masks to name the bits of registers * Define register groups so ease programming (e.g. define an `RTC` group to work with all real-time clock registers at once) * Make modifications through groups, masks, or the registers directly ## Requirements * C++20 * GCC or Clang with some optimization enabled (O1, O2, O3, Os).