1 // M3U playlist file parser, with support for subtrack information 2 3 // Game_Music_Emu 0.6.0 4 #ifndef M3U_PLAYLIST_H 5 #define M3U_PLAYLIST_H 6 7 #include "blargg_common.h" 8 #include "Data_Reader.h" 9 10 class M3u_Playlist { 11 public: 12 // Load playlist data 13 blargg_err_t load( const char* path ); 14 blargg_err_t load( Data_Reader& in ); 15 blargg_err_t load( void const* data, long size ); 16 17 // Line number of first parse error, 0 if no error. Any lines with parse 18 // errors are ignored. first_error()19 int first_error() const { return first_error_; } 20 21 struct info_t 22 { 23 const char* title; 24 const char* composer; 25 const char* engineer; 26 const char* ripping; 27 const char* tagging; 28 }; info()29 info_t const& info() const { return info_; } 30 31 struct entry_t 32 { 33 const char* file; // filename without stupid ::TYPE suffix 34 const char* type; // if filename has ::TYPE suffix, this will be "TYPE". "" if none. 35 const char* name; 36 bool decimal_track; // true if track was specified in hex 37 // integers are -1 if not present 38 int track; // 1-based 39 int length; // seconds 40 int intro; 41 int loop; 42 int fade; 43 int repeat; // count 44 }; 45 entry_t const& operator [] ( int i ) const { return entries [i]; } size()46 int size() const { return entries.size(); } 47 48 void clear(); 49 50 private: 51 blargg_vector<entry_t> entries; 52 blargg_vector<char> data; 53 int first_error_; 54 info_t info_; 55 56 blargg_err_t parse(); 57 blargg_err_t parse_(); 58 }; 59 clear()60inline void M3u_Playlist::clear() 61 { 62 first_error_ = 0; 63 entries.clear(); 64 data.clear(); 65 } 66 67 #endif 68