|
1
|
1 #pragma once
|
|
|
2 #include "list.h"
|
|
|
3
|
|
|
4 namespace pfc {
|
|
|
5
|
|
|
6 template<class T, class B = list_t<T*> >
|
|
|
7 class ptr_list_t : public B {
|
|
|
8 public:
|
|
|
9 typedef ptr_list_t<T, B> self_t;
|
|
|
10
|
|
|
11 void free_by_idx(t_size n) {free_mask(bit_array_one(n));}
|
|
|
12 void free_all() {this->remove_all_ex(free);}
|
|
|
13 void free_mask(const bit_array & p_mask) {this->remove_mask_ex(p_mask,free);}
|
|
|
14
|
|
|
15 void delete_item(T* ptr) {delete_by_idx(find_item(ptr));}
|
|
|
16
|
|
|
17 void delete_by_idx(t_size p_index) {
|
|
|
18 delete_mask(bit_array_one(p_index));
|
|
|
19 }
|
|
|
20
|
|
|
21 void delete_all() {
|
|
|
22 this->remove_all_ex(pfc::delete_t<T>);
|
|
|
23 }
|
|
|
24
|
|
|
25 void delete_mask(const bit_array & p_mask) {
|
|
|
26 this->remove_mask_ex(p_mask,pfc::delete_t<T>);
|
|
|
27 }
|
|
|
28
|
|
|
29 T * operator[](t_size n) const {return this->get_item(n);}
|
|
|
30 };
|
|
|
31
|
|
|
32 template<typename T,t_size N>
|
|
|
33 class ptr_list_hybrid_t : public ptr_list_t<T,list_hybrid_t<T*,N> > {
|
|
|
34 public:
|
|
|
35 };
|
|
|
36
|
|
|
37 typedef ptr_list_t<void> ptr_list;
|
|
|
38
|
|
|
39 template<typename item, typename base> class traits_t<ptr_list_t<item, base> > : public traits_t<base> {};
|
|
|
40 }
|