Files
foobar2000-sdk/pfc/instance_tracker.h
2021-12-14 00:28:25 -07:00

51 lines
1.1 KiB
C++

#pragma once
namespace pfc {
template<typename t_object>
class instance_tracker_server_t {
public:
void add(t_object * p_object) {
m_list.add_item(p_object);
}
void remove(t_object * p_object) {
m_list.remove_item(p_object);
}
t_size get_count() const {return m_list.get_count();}
t_object * get_item(t_size p_index) {return m_list[p_index];}
t_object * operator[](t_size p_index) {return m_list[p_index];}
private:
ptr_list_hybrid_t<t_object,4> m_list;
};
template<typename t_object,instance_tracker_server_t<t_object> & p_server>
class instance_tracker_client_t {
public:
instance_tracker_client_t(t_object* p_ptr) : m_ptr(NULL), m_added(false) {initialize(p_ptr);}
instance_tracker_client_t() : m_ptr(NULL), m_added(false) {}
void initialize(t_object * p_ptr) {
uninitialize();
p_server.add(p_ptr);
m_ptr = p_ptr;
m_added = true;
}
void uninitialize() {
if (m_added) {
p_server.remove(m_ptr);
m_ptr = NULL;
m_added = false;
}
}
~instance_tracker_client_t() {
uninitialize();
}
private:
bool m_added;
t_object * m_ptr;
};
}