The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#include "xiphcomment.h"

MODULE = Audio::TagLib			PACKAGE = Audio::TagLib::Ogg::XiphComment
PROTOTYPES: ENABLE

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

TagLib::Ogg::XiphComment * 
TagLib::Ogg::XiphComment::new(...)
PROTOTYPE: ;$
PREINIT:
	TagLib::ByteVector * data;
CODE:
	/*!
	 * XiphComment()
	 * XiphComment(const ByteVector &data)
	 */
	if(items == 2) {
		if(sv_isobject(ST(1)) && 
			sv_derived_from(ST(1), "Audio::TagLib::ByteVector"))
			data = INT2PTR(TagLib::ByteVector *, SvIV(SvRV(ST(1))));
		else
			croak("ST(1) is not of type TagLib::ByteVector");
		RETVAL = new TagLib::Ogg::XiphComment(*data);
	} else
		RETVAL = new TagLib::Ogg::XiphComment();
OUTPUT:
	RETVAL

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

TagLib::String * 
TagLib::Ogg::XiphComment::title()
CODE:
	RETVAL = new TagLib::String(THIS->title());
OUTPUT:
	RETVAL

TagLib::String * 
TagLib::Ogg::XiphComment::artist()
CODE:
	RETVAL = new TagLib::String(THIS->artist());
OUTPUT:
	RETVAL

TagLib::String * 
TagLib::Ogg::XiphComment::album()
CODE:
	RETVAL = new TagLib::String(THIS->album());
OUTPUT:
	RETVAL

TagLib::String * 
TagLib::Ogg::XiphComment::comment()
CODE:
	RETVAL = new TagLib::String(THIS->comment());
OUTPUT:
	RETVAL

TagLib::String * 
TagLib::Ogg::XiphComment::genre()
CODE:
	RETVAL = new TagLib::String(THIS->genre());
OUTPUT:
	RETVAL

unsigned int 
TagLib::Ogg::XiphComment::year()
CODE:
	RETVAL = THIS->year();
OUTPUT:
	RETVAL

unsigned int 
TagLib::Ogg::XiphComment::track()
CODE:
	RETVAL = THIS->track();
OUTPUT:
	RETVAL

void 
TagLib::Ogg::XiphComment::setTitle(s)
	TagLib::String * s
CODE:
	THIS->setTitle(*s);

void 
TagLib::Ogg::XiphComment::setArtist(s)
	TagLib::String * s
CODE:
	THIS->setArtist(*s);

void 
TagLib::Ogg::XiphComment::setAlbum(s)
	TagLib::String * s
CODE:
	THIS->setAlbum(*s);

void 
TagLib::Ogg::XiphComment::setComment(s)
	TagLib::String * s
CODE:
	THIS->setComment(*s);

void 
TagLib::Ogg::XiphComment::setGenre(s)
	TagLib::String * s
CODE:
	THIS->setGenre(*s);

void 
TagLib::Ogg::XiphComment::setYear(i)
	unsigned int i
CODE:
	THIS->setYear(i);

void 
TagLib::Ogg::XiphComment::setTrack(i)
	unsigned int i
CODE:
	THIS->setTrack(i);

bool 
TagLib::Ogg::XiphComment::isEmpty()
CODE:
	RETVAL = THIS->isEmpty();
OUTPUT:
	RETVAL

unsigned int 
TagLib::Ogg::XiphComment::fieldCount()
CODE:
	RETVAL = THIS->fieldCount();
OUTPUT:
	RETVAL

void 
TagLib::Ogg::XiphComment::fieldListMap()
INIT:
	const TagLib::Ogg::FieldListMap & map = THIS->fieldListMap();
PPCODE:
	ST(0) = sv_newmortal();
	sv_setref_pv(ST(0), "Audio::TagLib::Ogg::FieldListMap", (void *)&map);
	SvREADONLY_on(SvRV(ST(0)));
	XSRETURN(1);

TagLib::String * 
TagLib::Ogg::XiphComment::vendorID()
CODE:
	RETVAL = new TagLib::String(THIS->vendorID());
OUTPUT:
	RETVAL

void 
TagLib::Ogg::XiphComment::addField(key, value, replace=true)
	TagLib::String * key
	TagLib::String * value
	bool replace
CODE:
	THIS->addField(*key, *value, replace);

void 
TagLib::Ogg::XiphComment::removeField(key, value=&(TagLib::String::null))
	TagLib::String * key
	TagLib::String * value
CODE:
	THIS->removeField(*key, *value);

TagLib::ByteVector * 
TagLib::Ogg::XiphComment::render(...)
PROTOTYPE: ;$
CODE:
	/*!
	 * ByteVector render() const
	 * ByteVector render(bool addFramingBit) const
	 */
	if(items == 2)
		RETVAL = new TagLib::ByteVector(THIS->render(SvTRUE(ST(1))));
	else
		RETVAL = new TagLib::ByteVector(THIS->render());
OUTPUT:
	RETVAL

################################################################
# 
# PROTECTED MEMBER FUNCTIONS
# 
# void parse(const ByteVector &data)
# not exported
# 
################################################################