def unpack_struct(self, struct):
        """
        unpacks the given struct from the underlying buffer and returns
        the results. Will raise an UnpackException if there is not
        enough data to satisfy the format of the structure
        """

        size = struct.size

        offset = self.offset
        if self.data:
            avail = len(self.data) - offset
        else:
            avail = 0

        if avail < size:
            raise UnpackException(struct.format, size, avail)

        self.offset = offset + size
        return struct.unpack_from(self.data, offset)
unpacks the given struct from the underlying buffer and returns
        the results. Will raise an UnpackException if there is not
        enough data to satisfy the format of the structure