The header <hardware> defines a number of classes
and templates. You should view
this header as a prototype for defining the C++ interface
to the atomic operations needed to
express a low-level I/O hardware driver.
It supplements the C header <iohw.h>.
The facilities in this header are structured around a few basic concepts:

Class access_mode supplies the enumeration
constants needed to describes the properties of I/O addresses.
The member type address_type is used in other classes as the type
of I/O addresses.

Class platform_traits supplies the enumeration
constants needed to describes the properties of an I/O bus in general.
The member type address_holder is used in other classes as the type
of I/O addresses. Class register_traits performs
a similar role for specific ports on an I/O bus.

Template class static_address wraps an I/O
address whose value is known at translation time,
while class dynamic_address
waps one that might nit be known until program execution.

If the macro _IOHW_NAME is not defined when the header
<hardware> is first included, the macro is defined
as hardware. Further, the code assumes that all I/O
occurs within a flat address space, where the effective port address
is simply the sum of the platform address, the register address, and
the index into a specific buffer.
So you can write code such as: