/gme/M3u_Playlist.h

http://game-music-emu.googlecode.com/ · C++ Header · 67 lines · 50 code · 11 blank · 6 comment · 0 complexity · 703cd3b2a7219e298829b74e901a1a51 MD5 · raw file

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