| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 | #ifndef NULLSOFT_IFC_PLAYLIST_H#define NULLSOFT_IFC_PLAYLIST_H#include "bfc/dispatch.h"#include "bfc/platform/types.h"enum{	PLAYLIST_SUCCESS       = 0,	PLAYLIST_UNIMPLEMENTED = 1,};class ifc_playlist : public Dispatchable{protected:	ifc_playlist()                                                    {}	~ifc_playlist()                                                   {}public:	DISPATCH_CODES	{		IFC_PLAYLIST_CLEAR                     = 10,		//IFC_PLAYLIST_APPENDWITHINFO            = 20,		//IFC_PLAYLIST_APPEND                    = 30,				IFC_PLAYLIST_GETNUMITEMS               = 40,		IFC_PLAYLIST_GETITEM                   = 50,		IFC_PLAYLIST_GETITEMTITLE              = 60,		IFC_PLAYLIST_GETITEMLENGTHMILLISECONDS = 70,		IFC_PLAYLIST_GETITEMEXTENDEDINFO       = 80,		IFC_PLAYLIST_REVERSE                   = 90,		IFC_PLAYLIST_SWAP                      = 100,		IFC_PLAYLIST_RANDOMIZE                 = 110,		IFC_PLAYLIST_REMOVE                    = 120,		IFC_PLAYLIST_SORTBYTITLE               = 130,		IFC_PLAYLIST_SORTBYFILENAME            = 140,		IFC_PLAYLIST_SORTBYDIRECTORY           = 150,	};	void   Clear();	//void AppendWithInfo(const wchar_t *filename, const char *title, int lengthInMS);	//void Append(const wchar_t *filename);	size_t GetNumItems();	size_t GetItem( size_t item, wchar_t *filename, size_t filenameCch );	size_t GetItemTitle( size_t item, wchar_t *title, size_t titleCch );	int    GetItemLengthMilliseconds( size_t item ); // TODO: maybe microsecond for better resolution?	size_t GetItemExtendedInfo( size_t item, const wchar_t *metadata, wchar_t *info, size_t infoCch );	int    Reverse();                                // optional, return 1 to indicate that you did the reversal (otherwise, caller must perform manually)	int    Swap( size_t item1, size_t item2 );	int    Randomize( int ( *generator )( ) );       // optional, return 1 to indicate that you did the randomization (otherwise, caller must perform manually)	void   Remove( size_t item );	int    SortByTitle();                            // optional, return 1 to indicate that you did the sort (otherwise, caller must perform manually)	int    SortByFilename();                         // optional, return 1 to indicate that you did the sort (otherwise, caller must perform manually)	int    SortByDirectory();};inline void ifc_playlist::Clear(){	_voidcall( IFC_PLAYLIST_CLEAR );}/*inline void ifc_playlist::AppendWithInfo(const wchar_t *filename, const char *title, int lengthInMS){_voidcall(IFC_PLAYLIST_APPENDWITHINFO, filename, title, lengthInMS);}*//*inline void ifc_playlist::Append(const wchar_t *filename){_voidcall(IFC_PLAYLIST_APPEND, filename);}*/inline size_t ifc_playlist::GetNumItems(){	return _call( IFC_PLAYLIST_GETNUMITEMS, (size_t)0 );}inline size_t ifc_playlist::GetItem( size_t item, wchar_t *filename, size_t filenameCch ){	return _call( IFC_PLAYLIST_GETITEM, (size_t)0, item, filename, filenameCch );}inline size_t ifc_playlist::GetItemTitle( size_t item, wchar_t *title, size_t titleCch ){	return _call( IFC_PLAYLIST_GETITEMTITLE, (size_t)0, item, title, titleCch );}inline int ifc_playlist::GetItemLengthMilliseconds( size_t item ){	return _call( IFC_PLAYLIST_GETITEMLENGTHMILLISECONDS, (int)-1, item );}inline size_t ifc_playlist::GetItemExtendedInfo( size_t item, const wchar_t *metadata, wchar_t *info, size_t infoCch ){	return _call( IFC_PLAYLIST_GETITEMEXTENDEDINFO, (size_t)0, item, metadata, info, infoCch );}inline int ifc_playlist::Reverse(){	return _call( IFC_PLAYLIST_REVERSE, (int)PLAYLIST_UNIMPLEMENTED );}inline int ifc_playlist::Swap( size_t item1, size_t item2 ){	return _call( IFC_PLAYLIST_SWAP, (int)PLAYLIST_UNIMPLEMENTED, item1, item2 );}inline int ifc_playlist::Randomize( int ( *generator )( ) ){	return _call( IFC_PLAYLIST_RANDOMIZE, (int)PLAYLIST_UNIMPLEMENTED, generator );}inline void ifc_playlist::Remove( size_t item ){	_voidcall( IFC_PLAYLIST_REMOVE, item );}inline int ifc_playlist::SortByTitle(){	return _call( IFC_PLAYLIST_SORTBYTITLE, (int)0 );}inline int ifc_playlist::SortByFilename(){	return _call( IFC_PLAYLIST_SORTBYFILENAME, (int)0 );}inline int ifc_playlist::SortByDirectory(){	return _call( IFC_PLAYLIST_SORTBYDIRECTORY, (int)0 );}#endif
 |