The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#include "apeitem.h" // Festus-04

MODULE = Audio::TagLib		PACKAGE = Audio::TagLib::APE::Item
PROTOTYPES: ENABLE

################################################################
# 
# PUBLIC MEMBER FUNCTIONS
# 
################################################################

TagLib::APE::Item * 
TagLib::APE::Item::new(...)
PROTOTYPE: ;$$
PREINIT:
	TagLib::String * key;
	TagLib::String * value;
	TagLib::StringList * values;
	TagLib::APE::Item * item;
CODE:
	/*!
	 * Item()
	 * Item(const String &key, const String &value)
	 * Item(const String &key, const StringList &values)
	 * Item(const Item &item)
	 */
	switch(items) {
	case 3:
		if(sv_isobject(ST(1)) && sv_derived_from(ST(1), 
			"Audio::TagLib::String")) {
			key = INT2PTR(TagLib::String *, SvIV(SvRV(ST(1))));
			if(sv_isobject(ST(2))) {
				if(sv_derived_from(ST(2), "Audio::TagLib::String")) {
					value = INT2PTR(TagLib::String *, 
						SvIV(SvRV(ST(2))));
					RETVAL = new TagLib::APE::Item(*key, *value);
				} else if(sv_derived_from(ST(2), 
					"Audio::TagLib::StringList")) {
					values = INT2PTR(TagLib::StringList *, 
						SvIV(SvRV(ST(2))));
					RETVAL = new TagLib::APE::Item(*key, *values);
				} else
					croak("ST(2) is not of type String/StringList");
			} else
				croak("ST(2) is not a blessed object");
		} else
			croak("ST(1) is not of type TagLib::String");
		break;
	case 2:
		if(sv_isobject(ST(1)) && sv_derived_from(ST(1), 
			"Audio::TagLib::APE::Item")) {
			item = INT2PTR(TagLib::APE::Item *, SvIV(SvRV(ST(1))));
			RETVAL = new TagLib::APE::Item(*item);
		} else
			croak("ST(1) is not of type TagLib::APE::Item");
		break;
	default:
		/* items == 1 */
		RETVAL = new TagLib::APE::Item();
	}
OUTPUT:
	RETVAL

void 
TagLib::APE::Item::DESTROY()
CODE:
	if(!SvREADONLY(SvRV(ST(0))))
		delete THIS;

################################################################
# 
# implement
# Item & operator=(const Item &item)
# 
################################################################
void 
TagLib::APE::Item::copy(item)
	TagLib::APE::Item * item
PPCODE:
	(void)THIS->operator=(*item);
	XSRETURN(1);

TagLib::String * 
TagLib::APE::Item::key()
CODE:
	RETVAL = new TagLib::String(THIS->key());
OUTPUT:
	RETVAL

TagLib::ByteVector * 
TagLib::APE::Item::value()
CODE:
	RETVAL = new TagLib::ByteVector(THIS->value());
OUTPUT:
	RETVAL

int 
TagLib::APE::Item::size()
CODE:
	RETVAL = THIS->size();
OUTPUT:
	RETVAL

TagLib::String * 
TagLib::APE::Item::toString()
CODE:
	RETVAL = new TagLib::String(THIS->toString());
OUTPUT:
	RETVAL

TagLib::StringList * 
TagLib::APE::Item::toStringList()
CODE:
	RETVAL = new TagLib::StringList(THIS->toStringList());
OUTPUT:
	RETVAL

TagLib::ByteVector * 
TagLib::APE::Item::render()
CODE:
	RETVAL = new TagLib::ByteVector(THIS->render());
OUTPUT:
	RETVAL

void 
TagLib::APE::Item::parse(data)
	TagLib::ByteVector * data
CODE:
	THIS->parse(*data);

void 
TagLib::APE::Item::setReadOnly(readOnly)
	bool readOnly
CODE:
	THIS->setReadOnly(readOnly);

bool 
TagLib::APE::Item::isReadOnly()
CODE:
	RETVAL = THIS->isReadOnly();
OUTPUT:
	RETVAL

void 
TagLib::APE::Item::setType(type)
	TagLib::APE::Item::ItemTypes type
CODE:
	THIS->setType(type);

TagLib::APE::Item::ItemTypes 
TagLib::APE::Item::type()
CODE:
	RETVAL = THIS->type();
OUTPUT:
	RETVAL

bool 
TagLib::APE::Item::isEmpty()
CODE:
	RETVAL = THIS->isEmpty();
OUTPUT:
	RETVAL