\subsection{InstructionDecoder Class} \label{sec:instructionDecoder} The \code{InstructionDecoder} class decodes instructions, given a buffer of bytes and a length, and constructs an Instruction. \begin{apient} InstructionDecoder(const unsigned char *buffer, size_t size, Architecture arch) InstructionDecoder(const void *buffer, size_t size, Architecture arch) \end{apient} \apidesc{Construct an \code{InstructionDecoder} over the provided \code{buffer} and \code{size}. We consider the buffer to contain instructions from the provided \code{arch}, which must be from the set \code{\{Arch\_x86, Arch\_x86\_64, Arch\_ppc32, Arch\_ppc64\}}. } \begin{apient} Instruction::Ptr decode(); \end{apient} \apidesc{Decode the next address in the buffer provided at construction time, returning either an instruction pointer or \code{NULL} if the buffer contains no undecoded instructions.}