2 list.hh -- part of flowerlib
4 (c) 1996 Han-Wen Nienhuys & Jan Nieuwenhuizen
15 Use for list of pointers, e.g. PointerList<AbstractType*>.
16 This class does no deletion of the pointers, but it knows how to
17 copy itself (shallow copy). We could have derived it from List<T>,
18 but this design saves a lot of code dup; for all PointerLists in the
19 program only one parent List<void*> is instantiated.
22 class PointerList : public List<void *>
25 PCursor<T> top() const{
26 return PCursor<T> (List<void*>::top());
28 PCursor<T> bottom() const {
29 return PCursor<T> (List<void*>::bottom());
31 PCursor<T> find(T) const;
32 void concatenate(PointerList<T> const &s) { List<void*>::concatenate(s); }
36 /** PointerList which deletes pointers given to it.
39 The copy constructor doesn't do what you'd want:
40 Since T might have a virtual ctor, we don't try to do a
44 You have to copy this yourself, or use the macro PointerList__copy
48 class IPointerList : public PointerList<T> {
50 IPointerList(IPointerList const &) { set_empty(); }
55 #define IPointerList__copy(T, to, from, op) \
56 for (PCursor<T> _pc_(from); _pc_.ok(); _pc_++)\
57 to.bottom().add(_pc_->op)\
62 void PL_copy(IPointerList<T*> &dst,IPointerList<T*> const&src);
65 #define PL_instantiate(a) template class PointerList<a*>; \
66 template class PCursor<a*>;
67 #define IPL_instantiate(a) PL_instantiate(a); \
68 template class IPointerList<a*>