From eed4cab11beebd224a0aaf0193a13e929bef6cfe Mon Sep 17 00:00:00 2001 From: Marius Gavrilescu Date: Sat, 24 Sep 2016 20:49:49 +0100 Subject: [PATCH] Use regular T_PTROBJ and typedefs instead of a complex typemap --- Opusfile.xs | 69 ++++++++++++++++++++++++++++------------------------- typemap | 69 ++++------------------------------------------------- 2 files changed, 41 insertions(+), 97 deletions(-) diff --git a/Opusfile.xs b/Opusfile.xs index 43ab5a6..7779aa9 100644 --- a/Opusfile.xs +++ b/Opusfile.xs @@ -11,12 +11,17 @@ #include "const-c.inc" +typedef OggOpusFile* Audio__Opusfile; +typedef const OpusHead* Audio__Opusfile__Head; +typedef const OpusTags* Audio__Opusfile__Tags; +typedef const OpusPictureTag* Audio__Opusfile__PictureTag; + MODULE = Audio::Opusfile PACKAGE = Audio::Opusfile PREFIX = op_ PROTOTYPES: ENABLE INCLUDE: const-xs.inc -OggOpusFile* +Audio::Opusfile op_open_file(path) const char *path; PREINIT: @@ -27,7 +32,7 @@ POSTCALL: if(err) croak("op_open_file returned error %d\n", err); -OggOpusFile* +Audio::Opusfile op_open_memory(const char *data, size_t length(data)) PREINIT: int err; @@ -53,49 +58,49 @@ OUTPUT: void DESTROY(of) - OggOpusFile *of; + Audio::Opusfile of; CODE: op_free(of); bool op_seekable(of) - OggOpusFile* of; + Audio::Opusfile of; int op_link_count(of) - OggOpusFile* of; + Audio::Opusfile of; int op_serialno(of, li = -1) - OggOpusFile* of; + Audio::Opusfile of; int li; -const OpusHead* +Audio::Opusfile::Head op_head(of, li = -1) - OggOpusFile *of; + Audio::Opusfile of; int li; -const OpusTags* +Audio::Opusfile::Tags op_tags(of, li = -1) - OggOpusFile *of; + Audio::Opusfile of; int li; MODULE = Audio::Opusfile PACKAGE = Audio::Opusfile::Tags PREFIX = opus_tags_ int opus_tags_query_count(tags, tag) - const OpusTags* tags; + Audio::Opusfile::Tags tags; const char* tag; const char* opus_tags_query(tags, tag, count = 0) - const OpusTags* tags; + Audio::Opusfile::Tags tags; const char* tag; int count; MODULE = Audio::Opusfile PACKAGE = Audio::Opusfile::PictureTag PREFIX = opus_picture_tag_ -const OpusPictureTag* +Audio::Opusfile::PictureTag opus_picture_tag_parse(tag) const char *tag; PREINIT: @@ -111,13 +116,13 @@ OUTPUT: void DESTROY(pic) - const OpusPictureTag* pic + Audio::Opusfile::PictureTag pic CODE: Safefree(pic); int type(pic) - const OpusPictureTag *pic; + Audio::Opusfile::PictureTag pic; CODE: RETVAL = pic->type; OUTPUT: @@ -125,7 +130,7 @@ OUTPUT: const char* mime_type(pic) - const OpusPictureTag *pic; + Audio::Opusfile::PictureTag pic; CODE: RETVAL = pic->mime_type; OUTPUT: @@ -133,7 +138,7 @@ OUTPUT: const char* description(pic) - const OpusPictureTag *pic; + Audio::Opusfile::PictureTag pic; CODE: RETVAL = pic->description; OUTPUT: @@ -141,7 +146,7 @@ OUTPUT: int width(pic) - const OpusPictureTag *pic; + Audio::Opusfile::PictureTag pic; CODE: RETVAL = pic->width; OUTPUT: @@ -149,7 +154,7 @@ OUTPUT: int height(pic) - const OpusPictureTag *pic; + Audio::Opusfile::PictureTag pic; CODE: RETVAL = pic->height; OUTPUT: @@ -157,7 +162,7 @@ OUTPUT: int depth(pic) - const OpusPictureTag *pic; + Audio::Opusfile::PictureTag pic; CODE: RETVAL = pic->depth; OUTPUT: @@ -165,7 +170,7 @@ OUTPUT: int colors(pic) - const OpusPictureTag *pic; + Audio::Opusfile::PictureTag pic; CODE: RETVAL = pic->colors; OUTPUT: @@ -173,7 +178,7 @@ OUTPUT: int data_length(pic) - const OpusPictureTag *pic; + Audio::Opusfile::PictureTag pic; CODE: RETVAL = pic->data_length; OUTPUT: @@ -181,7 +186,7 @@ OUTPUT: SV* data(pic) - const OpusPictureTag *pic; + Audio::Opusfile::PictureTag pic; CODE: RETVAL = newSVpvn(pic->data, pic->data_length); OUTPUT: @@ -189,7 +194,7 @@ OUTPUT: int format(pic) - const OpusPictureTag *pic; + Audio::Opusfile::PictureTag pic; CODE: RETVAL = pic->format; OUTPUT: @@ -199,7 +204,7 @@ MODULE = Audio::Opusfile PACKAGE = Audio::Opusfile::Head int version(head) - const OpusHead* head; + Audio::Opusfile::Head head; CODE: RETVAL = head->version; OUTPUT: @@ -207,7 +212,7 @@ OUTPUT: int channel_count(head) - const OpusHead* head; + Audio::Opusfile::Head head; CODE: RETVAL = head->channel_count; OUTPUT: @@ -215,7 +220,7 @@ OUTPUT: unsigned pre_skip(head) - const OpusHead* head; + Audio::Opusfile::Head head; CODE: RETVAL = head->pre_skip; OUTPUT: @@ -223,7 +228,7 @@ OUTPUT: unsigned input_sample_rate(head) - const OpusHead* head; + Audio::Opusfile::Head head; CODE: RETVAL = head->input_sample_rate; OUTPUT: @@ -231,7 +236,7 @@ OUTPUT: int mapping_family(head) - const OpusHead* head; + Audio::Opusfile::Head head; CODE: RETVAL = head->mapping_family; OUTPUT: @@ -239,7 +244,7 @@ OUTPUT: int stream_count(head) - const OpusHead* head; + Audio::Opusfile::Head head; CODE: RETVAL = head->stream_count; OUTPUT: @@ -247,7 +252,7 @@ OUTPUT: int coupled_count(head) - const OpusHead* head; + Audio::Opusfile::Head head; CODE: RETVAL = head->coupled_count; OUTPUT: @@ -255,7 +260,7 @@ OUTPUT: int mapping(head, k) - const OpusHead* head; + Audio::Opusfile::Head head; int k; CODE: RETVAL = (int) head->mapping[k]; diff --git a/typemap b/typemap index c780241..12c4fdd 100644 --- a/typemap +++ b/typemap @@ -1,65 +1,4 @@ -const OggOpusFile* T_OGG_OPUS_FILE - OggOpusFile* T_OGG_OPUS_FILE -const OpusHead* T_OPUS_HEAD - OpusHead* T_OPUS_HEAD -const OpusTags* T_OPUS_TAGS - OpusTags* T_OPUS_TAGS -const OpusPictureTag* T_OPUS_PICTURE_TAG - OpusPictureTag* T_OPUS_PICTURE_TAG - -INPUT -# All three types are copies of T_PTROBJ, only difference being the class name - -T_OGG_OPUS_FILE - if (SvROK($arg) && sv_derived_from($arg, \"Audio::Opusfile\")) { - IV tmp = SvIV((SV*)SvRV($arg)); - $var = INT2PTR($type,tmp); - } - else - Perl_croak_nocontext(\"%s: %s is not of type %s\", - ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, - \"$var\", \"Audio::Opusfile\") - -T_OPUS_HEAD - if (SvROK($arg) && sv_derived_from($arg, \"Audio::Opusfile::Head\")) { - IV tmp = SvIV((SV*)SvRV($arg)); - $var = INT2PTR($type,tmp); - } - else - Perl_croak_nocontext(\"%s: %s is not of type %s\", - ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, - \"$var\", \"Audio::Opusfile::Head\") - -T_OPUS_TAGS - if (SvROK($arg) && sv_derived_from($arg, \"Audio::Opusfile::Tags\")) { - IV tmp = SvIV((SV*)SvRV($arg)); - $var = INT2PTR($type,tmp); - } - else - Perl_croak_nocontext(\"%s: %s is not of type %s\", - ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, - \"$var\", \"Audio::Opusfile::Tags\") - -T_OPUS_PICTURE_TAG - if (SvROK($arg) && sv_derived_from($arg, \"Audio::Opusfile::PictureTag\")) { - IV tmp = SvIV((SV*)SvRV($arg)); - $var = INT2PTR($type,tmp); - } - else - Perl_croak_nocontext(\"%s: %s is not of type %s\", - ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, - \"$var\", \"Audio::Opusfile::Tags\") - -OUTPUT - -T_OGG_OPUS_FILE - sv_setref_pv($arg, \"Audio::Opusfile\", (void*)$var); - -T_OPUS_HEAD - sv_setref_pv($arg, \"Audio::Opusfile::Head\", (void*)$var); - -T_OPUS_TAGS - sv_setref_pv($arg, \"Audio::Opusfile::Tags\", (void*)$var); - -T_OPUS_PICTURE_TAG - sv_setref_pv($arg, \"Audio::Opusfile::PictureTag\", (void*)$var); +Audio::Opusfile T_PTROBJ +Audio::Opusfile::Head T_PTROBJ +Audio::Opusfile::Tags T_PTROBJ +Audio::Opusfile::PictureTag T_PTROBJ -- 2.39.2