package Data::QRCode::XS;
use strict;
use warnings;
use Alien::QREncode;
use Data::QRCode::XS::Inline C => ( );
1;
__DATA__
__C__
int ECLEVEL_L() { return QR_ECLEVEL_L; }
int ECLEVEL_M() { return QR_ECLEVEL_M; }
int ECLEVEL_Q() { return QR_ECLEVEL_Q; }
int ECLEVEL_H() { return QR_ECLEVEL_H; }
SV* _build(const char* class, SV* data, int level, int version ) {
unsigned char * str;
STRLEN len;
SV * qrsv; SV* self;
QRcode* qr_code;
str = SvPVutf8(data,len);
qr_code = QRcode_encodeData(len,str,version,(QRecLevel)level);
qrsv = newSViv((IV)qr_code);
self = newRV_noinc(qrsv);
sv_bless(self, gv_stashpv(class, GV_ADD));
SvREADONLY_on(qrsv);
return self;
}
int version(SV* self) {
return ((QRcode*)SvIV(SvRV(self)))->version;
}
int width(SV* self) {
return ((QRcode*)SvIV(SvRV(self)))->width;
}
void DESTROY(SV* self) {
QRcode* qr_code = (QRcode*)SvIV(SvRV(self));
QRcode_free(qr_code);
}
int _data_at(SV* self, int x, int y) {
QRcode* qr_code = (QRcode*)SvIV(SvRV(self));
return qr_code->data[x+y*qr_code->width];
}