The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
MODULE = ZMQ::Raw               PACKAGE = ZMQ::Raw::Z85

SV *
encode (class, decoded)
	SV *class
	SV *decoded

	PREINIT:
		SV *encoded;

	CODE:
		if (SvCUR (decoded)%4)
			croak_usage ("decoded length must be divisible by 4");

		encoded = sv_2mortal (newSV ((SvCUR (decoded)*4)/3+1));
		SvPOK_on (encoded);
		SvCUR_set (encoded, (SvCUR (decoded)*4)/3);

		if (zmq_z85_encode (SvPVX (encoded), (const uint8_t *)SvPVX (decoded), SvCUR (decoded)) == NULL)
			croak_usage ("encode failed");

		SvREFCNT_inc (encoded);
		RETVAL = encoded;

	OUTPUT: RETVAL

SV *
decode (class, encoded)
	SV *class
	SV *encoded

	PREINIT:
		SV *decoded;

	CODE:
		if (SvCUR (encoded)%5)
			croak_usage ("encoded length must be divisible by 5");

		decoded = sv_2mortal (newSV ((SvCUR (encoded)*4)/5+1));
		SvPOK_on (decoded);
		SvCUR_set (decoded, (SvCUR (encoded)*4)/5);

		if (zmq_z85_decode ((uint8_t *)SvPVX (decoded), SvPVX (encoded)) == NULL)
			croak_usage ("decode failed");

		SvREFCNT_inc (decoded);
		RETVAL = decoded;

	OUTPUT: RETVAL