|  | #pragma once | 
|  |  | 
|  | #include <cstdlib> | 
|  |  | 
|  | namespace host_tool | 
|  | { | 
|  |  | 
|  | class HostIoInterface | 
|  | { | 
|  | public: | 
|  | virtual ~HostIoInterface() = default; | 
|  |  | 
|  | /** | 
|  | * Attempt to read bytes from offset to the destination from the host | 
|  | * memory device. | 
|  | * | 
|  | * @param[in] offset - offset into the host memory device. | 
|  | * @param[in] length - the number of bytes to copy from source. | 
|  | * @param[in] destination - where to write the bytes. | 
|  | * @return true on success, false on failure (such as unable to initialize | 
|  | * device). | 
|  | */ | 
|  | virtual bool read(const std::size_t offset, const std::size_t length, | 
|  | void* const destination) = 0; | 
|  |  | 
|  | /** | 
|  | * Attempt to write bytes from source to offset into the host memory device. | 
|  | * | 
|  | * @param[in] offset - offset into the host memory device. | 
|  | * @param[in] length - the number of bytes to copy from source. | 
|  | * @param[in] source - the souce of the bytes to copy to the memory device. | 
|  | * @return true on success, false on failure (such as unable to initialize | 
|  | * device). | 
|  | */ | 
|  | virtual bool write(const std::size_t offset, const std::size_t length, | 
|  | const void* const source) = 0; | 
|  | }; | 
|  |  | 
|  | } // namespace host_tool |