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

MODULE = Audio::TagLib			PACKAGE = Audio::TagLib::ID3v2::Frame::Header
PROTOTYPES: ENABLE

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

TagLib::ID3v2::Frame::Header * 
TagLib::ID3v2::Frame::Header::new(...)
PROTOTYPE: $;$
PREINIT:
	TagLib::ByteVector * data;
	bool synchSafeInts;
	unsigned int version = 4;
CODE:
	/*!
	 * Header(const ByteVector &data, bool synchSafeInts)
	 * Header(const ByteVector &data, uint version=4)
	 */
	switch(items) {
	case 3:
		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 ByteVector");
		if(SvIOK(ST(2)) || SvUOK(ST(2))) {
			version = SvUV(ST(2));
			RETVAL = new TagLib::ID3v2::Frame::Header(*data, version);
		} else {
			if(SvTRUE(ST(2)))
				synchSafeInts = true;
			else
				synchSafeInts = false;
			RETVAL = new TagLib::ID3v2::Frame::Header(*data, 
				synchSafeInts);
		}
		break;
	default:
		/* items == 2 */
		if(sv_isobject(ST(1)) && 
			sv_derived_from(ST(1), "Audio::TagLib::ByteVector")) {
			data = INT2PTR(TagLib::ByteVector *, SvIV(SvRV(ST(1))));
			RETVAL = new TagLib::ID3v2::Frame::Header(*data);
		} else
			croak("ST(1) is not of type ByteVector");
	}
OUTPUT:
	RETVAL

void 
TagLib::ID3v2::Frame::Header::DESTROY()
CODE:
	if(!SvREADONLY(SvRV(ST(0))))
		delete THIS;

void 
TagLib::ID3v2::Frame::Header::setData(...)
PROTOTYPE: $;$
PREINIT:
	TagLib::ByteVector * data;
	bool synchSafeInts;
	unsigned int version = 4;
CODE:
	/*!
	 * void setData(const ByteVector &data, bool synchSafeInts)
	 * void setData(const ByteVector &data, uint version=4)
	 */
	switch(items) {
	case 3:
		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 ByteVector");
		if(SvIOK(ST(2))) {
			version = (unsigned int)SvIV(ST(2));
			THIS->setData(*data, version);
		} else if(SvUOK(ST(2))) {
			version = SvUV(ST(2));
			THIS->setData(*data, version);
		} else {
			if(SvTRUE(ST(2)))
				synchSafeInts = true;
			else
				synchSafeInts = false;
			THIS->setData(*data, synchSafeInts);
		}
		break;
	default:
		/* items == 2 */
		if(sv_isobject(ST(1)) && 
			sv_derived_from(ST(1), "Audio::TagLib::ByteVector")) {
			data = INT2PTR(TagLib::ByteVector *, SvIV(SvRV(ST(1))));
			THIS->setData(*data);
		} else
			croak("ST(1) is not of type ByteVector");
	}

TagLib::ByteVector * 
TagLib::ID3v2::Frame::Header::frameID()
CODE:
	RETVAL = THIS->frameID();
OUTPUT:
	RETVAL

void 
TagLib::ID3v2::Frame::Header::setFrameID(id)
	TagLib::ByteVector * id
CODE:
	THIS->setFrameID(*id);

unsigned int 
TagLib::ID3v2::Frame::Header::frameSize()
CODE:
	RETVAL = THIS->frameSize();
OUTPUT:
	RETVAL

void 
TagLib::ID3v2::Frame::Header::setFrameSize(size)
	unsigned int size
CODE:
	THIS->setFrameSize(size);

unsigned int 
TagLib::ID3v2::Frame::Header::version()
CODE:
	RETVAL = THIS->version();
OUTPUT:
	RETVAL

bool 
TagLib::ID3v2::Frame::Header::tagAlterPreservation()
CODE:
	RETVAL = THIS->tagAlterPreservation();
OUTPUT:
	RETVAL

void 
TagLib::ID3v2::Frame::Header::setTagAlterPreservation(discard)
	bool discard
CODE:
	THIS->setTagAlterPreservation(discard);

bool 
TagLib::ID3v2::Frame::Header::fileAlterPreservation()
CODE:
	RETVAL = THIS->fileAlterPreservation();
OUTPUT:
	RETVAL

bool 
TagLib::ID3v2::Frame::Header::readOnly()
CODE:
	RETVAL = THIS->readOnly();
OUTPUT:
	RETVAL

bool 
TagLib::ID3v2::Frame::Header::groupingIdentity()
CODE:
	RETVAL = THIS->groupingIdentity();
OUTPUT:
	RETVAL

bool 
TagLib::ID3v2::Frame::Header::compression()
CODE:
	RETVAL = THIS->compression();
OUTPUT:
	RETVAL

bool 
TagLib::ID3v2::Frame::Header::encryption()
CODE:
	RETVAL = THIS->encryption();
OUTPUT:
	RETVAL

bool 
TagLib::ID3v2::Frame::Header::unsycronisation()
CODE:
	RETVAL = THIS->unsycronisation();
OUTPUT:
	RETVAL

bool 
TagLib::ID3v2::Frame::Header::dataLengthIndicator()
CODE:
	RETVAL = THIS->dataLengthIndicator();
OUTPUT:
	RETVAL

TagLib::ByteVector * 
TagLib::ID3v2::Frame::Header::render()
CODE:
	RETVAL = new TagLib::ByteVector(THIS->render());
OUTPUT:
	RETVAL

bool 
TagLib::ID3v2::Frame::Header::frameAlterPreservation()
CODE:
	RETVAL = THIS->frameAlterPreservation();
OUTPUT:
	RETVAL

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

static unsigned int 
TagLib::ID3v2::Frame::Header::size(...)
PROTOTYPE: ;$
PREINIT:
	unsigned int version;
CODE:
	/*!
	 * uint size()
	 * uint size(uint version)
	 */
	switch(items) {
	case 2:
		if(SvIOK(ST(1)) || SvUOK(ST(1)))
			version = SvUV(ST(1));
		else
			croak("ST(1) is not an unsigned integer");
		RETVAL = TagLib::ID3v2::Frame::Header::size(version);
		break;
	default:
		/* items == 1 */
		RETVAL = TagLib::ID3v2::Frame::Header::size();
	}
OUTPUT:
	RETVAL