Blame ports/MSVC++/2008clr/mpg123clr/id3v2.cpp

Packit c32a2d
/*
Packit c32a2d
	mpg123clr: MPEG Audio Decoder library Common Language Runtime version.
Packit c32a2d

Packit c32a2d
	copyright 2009 by Malcolm Boczek - free software under the terms of the LGPL 2.1
Packit c32a2d
	mpg123clr.dll is a derivative work of libmpg123 - all original mpg123 licensing terms apply.
Packit c32a2d

Packit c32a2d
	All rights to this work freely assigned to the mpg123 project.
Packit c32a2d
*/
Packit c32a2d
/*
Packit c32a2d
	libmpg123: MPEG Audio Decoder library
Packit c32a2d

Packit c32a2d
	copyright 1995-2008 by the mpg123 project - free software under the terms of the LGPL 2.1
Packit c32a2d
	see COPYING and AUTHORS files in distribution or http://mpg123.org
Packit c32a2d

Packit c32a2d
*/
Packit c32a2d
/*
Packit c32a2d
	1.8.1.0	04-Aug-09	Initial release.
Packit c32a2d
	1.9.0.0 01-Oct-09	Technical cleanup - subst nullptr for NULL (mb)
Packit c32a2d
	1.10.0.0 30-Nov-09	Add test for null base (sb) - in addition to null string test (mb)
Packit c32a2d
						(required if v2 referenced prior to file scan)
Packit c32a2d
*/
Packit c32a2d

Packit c32a2d
#include "StdAfx.h"
Packit c32a2d
#include "id3v2.h"
Packit c32a2d

Packit c32a2d
mpg123clr::id3::mpg123id3v2::mpg123id3v2(void)
Packit c32a2d
{
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
mpg123clr::id3::mpg123id3v2::mpg123id3v2(mpg123_id3v2* sb)
Packit c32a2d
{
Packit c32a2d
	this->sb = sb;
Packit c32a2d
}
Packit c32a2d

Packit c32a2d

Packit c32a2d
// Destructor
Packit c32a2d
mpg123clr::id3::mpg123id3v2::~mpg123id3v2(void)
Packit c32a2d
{
Packit c32a2d
	// clean up code to release managed resources
Packit c32a2d
	// ...
Packit c32a2d

Packit c32a2d
	// call Finalizer to clean up unmanaged resources
Packit c32a2d
	this->!mpg123id3v2();
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
// Finalizer
Packit c32a2d
mpg123clr::id3::mpg123id3v2::!mpg123id3v2(void)
Packit c32a2d
{
Packit c32a2d
	// we do not create the underlying structure, so shouldn't dispose it either...
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
String^ mpg123clr::id3::mpg123id3v2::title::get()
Packit c32a2d
{
Packit c32a2d
	// updated: more efficient "union style" mpg123str
Packit c32a2d
	mpg123str^ str = (sb == nullptr || sb->title == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->title);
Packit c32a2d

Packit c32a2d
	// Deprecated remnant - uses "overlayed style" mpg123str - note inefficient PtrToStrucure...
Packit c32a2d
	//	mpg123str^% str = gcnew mpg123str;
Packit c32a2d
	//	Marshal::PtrToStructure((IntPtr)sb->title, str);
Packit c32a2d

Packit c32a2d
	return str->Text;
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
String^ mpg123clr::id3::mpg123id3v2::artist::get()
Packit c32a2d
{
Packit c32a2d
	mpg123str^ str = (sb == nullptr || sb->artist == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->artist);
Packit c32a2d

Packit c32a2d
	return str->Text;
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
String^ mpg123clr::id3::mpg123id3v2::album::get()
Packit c32a2d
{
Packit c32a2d
	mpg123str^ str = (sb == nullptr || sb->album == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->album);
Packit c32a2d

Packit c32a2d
	return str->Text;
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
String^ mpg123clr::id3::mpg123id3v2::comment::get()
Packit c32a2d
{
Packit c32a2d
	mpg123str^ str = (sb == nullptr || sb->comment == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->comment);
Packit c32a2d

Packit c32a2d
	return str->Text;
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
String^ mpg123clr::id3::mpg123id3v2::year::get()
Packit c32a2d
{
Packit c32a2d
	mpg123str^ str = (sb == nullptr || sb->year == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->year);
Packit c32a2d

Packit c32a2d
	return str->Text;
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
String^ mpg123clr::id3::mpg123id3v2::genre::get()
Packit c32a2d
{
Packit c32a2d
	mpg123str^ str = (sb == nullptr || sb->genre == nullptr) ? gcnew mpg123str("") : gcnew mpg123str(sb->genre);
Packit c32a2d

Packit c32a2d
	return str->Text;
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
int mpg123clr::id3::mpg123id3v2::version::get()
Packit c32a2d
{
Packit c32a2d
	return sb->version;
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::MakeTextList(mpg123_text* ptr, size_t count)
Packit c32a2d
{
Packit c32a2d
	// WARN 4267 - clr limited to 32bit-length-size arrays!!
Packit c32a2d
	array<mpg123clr::mpg123text^>^ ary = gcnew array<mpg123clr::mpg123text^>((int)count);
Packit c32a2d

Packit c32a2d
	for (int ii = 0; ii < ary->Length; ii++)
Packit c32a2d
	{
Packit c32a2d
		// Remnant - for explicit layout
Packit c32a2d
		//		mpg123text^% txt = gcnew mpg123text;
Packit c32a2d
		//		Marshal::PtrToStructure((IntPtr)ptr++, txt);
Packit c32a2d

Packit c32a2d
		// New code - for "handle style" structure 
Packit c32a2d
		mpg123text^% txt = gcnew mpg123text(ptr++);
Packit c32a2d

Packit c32a2d
		ary[ii] = txt;
Packit c32a2d
	}
Packit c32a2d

Packit c32a2d
	return ary;
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::Comments::get()
Packit c32a2d
{
Packit c32a2d
	return MakeTextList(sb->comment_list, sb->comments);
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::Texts::get()
Packit c32a2d
{
Packit c32a2d
	return MakeTextList(sb->text, sb->texts);
Packit c32a2d
}
Packit c32a2d

Packit c32a2d
array<mpg123clr::mpg123text^>^ mpg123clr::id3::mpg123id3v2::Extras::get()
Packit c32a2d
{
Packit c32a2d
	return MakeTextList(sb->extra, sb->extras);
Packit c32a2d
}
Packit c32a2d