diff foosdk/sdk/foobar2000/SDK/playable_location.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foosdk/sdk/foobar2000/SDK/playable_location.h	Mon Jan 05 02:15:46 2026 -0500
@@ -0,0 +1,92 @@
+#pragma once
+
+//playable_location stores location of a playable resource, currently implemented as file path and integer for indicating multiple playable "subsongs" per file
+//also see: file_info.h
+//for getting more info about resource referenced by a playable_location, see metadb.h
+
+//char* strings are all UTF-8
+
+class NOVTABLE playable_location//interface (for passing around between DLLs)
+{
+public:
+	virtual const char * get_path() const = 0;
+	virtual void set_path(const char*) = 0;
+	virtual t_uint32 get_subsong() const = 0;
+	virtual void set_subsong(t_uint32) = 0;
+	
+	void copy(const playable_location & p_other) {
+		set_path(p_other.get_path());
+		set_subsong(p_other.get_subsong());
+	}
+
+	static int g_compare(const playable_location & p_item1,const playable_location & p_item2);
+    static bool g_equals( const playable_location & p_item1, const playable_location & p_item2);
+
+	const playable_location & operator=(const playable_location & src) {copy(src);return *this;}	
+
+	bool operator==(const playable_location & p_other) const;
+	bool operator!=(const playable_location & p_other) const;
+
+	void reset();
+	
+	inline t_uint32 get_subsong_index() const {return get_subsong();}
+	inline void set_subsong_index(t_uint32 v) {set_subsong(v);}
+
+	bool is_empty() const;
+	bool is_valid() const;
+
+
+	enum {case_sensitive = true};
+    typedef pfc::comparator_strcmp path_comparator;
+
+	class comparator {
+	public:
+		static int compare(const playable_location & v1, const playable_location & v2) {return g_compare(v1,v2);}
+	};
+	static int path_compare( const char * p1, const char * p2 );
+
+protected:
+	playable_location() {}
+	~playable_location() {}
+};
+
+typedef playable_location * pplayable_location;
+typedef playable_location const * pcplayable_location;
+typedef playable_location & rplayable_location;
+typedef playable_location const & rcplayable_location;
+
+class playable_location_impl : public playable_location//implementation
+{
+public:
+	virtual const char * get_path() const;
+	virtual void set_path(const char* p_path);
+	virtual t_uint32 get_subsong() const;
+	virtual void set_subsong(t_uint32 p_subsong);
+
+	const playable_location_impl & operator=(const playable_location & src);
+
+	playable_location_impl();
+	playable_location_impl(const char * p_path,t_uint32 p_subsong);
+	playable_location_impl(const playable_location & src);
+private:
+	pfc::string_simple m_path;
+	t_uint32 m_subsong;
+};
+
+// usage: somefunction( make_playable_location("file://c:\blah.ogg",0) );
+// only for use as a parameter to a function taking const playable_location &
+class make_playable_location : public playable_location
+{
+	const char * path;
+	t_uint32 num;
+	
+	virtual void set_path(const char*);
+	virtual void set_subsong(t_uint32);
+public:
+	virtual const char * get_path() const;
+	virtual t_uint32 get_subsong() const;
+
+	make_playable_location(const char * p_path,t_uint32 p_num);
+};
+
+pfc::string_base & operator<<(pfc::string_base & p_fmt,const playable_location & p_location);