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

44 lines
1.1 KiB
C++

#pragma once
namespace pfc {
template<class T, class B = list_t<T*> >
class ptr_list_t : public B
{
public:
ptr_list_t() {}
ptr_list_t(const ptr_list_t<T> & p_source) {*this = p_source;}
void free_by_idx(t_size n) {free_mask(bit_array_one(n));}
void free_all() {this->remove_all_ex(free);}
void free_mask(const bit_array & p_mask) {this->remove_mask_ex(p_mask,free);}
void delete_item(T* ptr) {delete_by_idx(find_item(ptr));}
void delete_by_idx(t_size p_index) {
delete_mask(bit_array_one(p_index));
}
void delete_all() {
this->remove_all_ex(pfc::delete_t<T>);
}
void delete_mask(const bit_array & p_mask) {
this->remove_mask_ex(p_mask,pfc::delete_t<T>);
}
T * operator[](t_size n) const {return this->get_item(n);}
};
template<typename T,t_size N>
class ptr_list_hybrid_t : public ptr_list_t<T,list_hybrid_t<T*,N> > {
public:
ptr_list_hybrid_t() {}
ptr_list_hybrid_t(const ptr_list_hybrid_t<T,N> & p_source) {*this = p_source;}
};
typedef ptr_list_t<void> ptr_list;
template<typename item, typename base> class traits_t<ptr_list_t<item, base> > : public traits_t<base> {};
}