MODULE = FFI::Raw				PACKAGE = FFI::Raw::MemPtr

FFI_Raw_MemPtr_t *
new(class, length)
	SV *class
	unsigned int length

	CODE:
		Newx(RETVAL, length, char);

	OUTPUT: RETVAL

FFI_Raw_MemPtr_t *
new_from_buf(class, buffer, length)
	SV *class
	SV *buffer
	unsigned int length

	CODE:
		Newx(RETVAL, length, char);
		Copy(SvPVX(buffer), RETVAL, length, char);

	OUTPUT: RETVAL

SV *
tostr(self, ...)
	FFI_Raw_MemPtr_t *self

	PROTOTYPE: $;$
	CODE:
		switch (items) {
			case 1:
				RETVAL = newSVpv(self, 0);
				break;

			case 2:
				RETVAL = newSVpv(self, SvUV(ST(1)));
				break;

			default: Perl_croak(aTHX_ "Wrong number of arguments");
		}

	OUTPUT: RETVAL

void
DESTROY(self)
	FFI_Raw_MemPtr_t *self

	CODE:
		void **ptr = self;
		Safefree(ptr);