2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
6 // $Header: r:/t2repos/thief2/src/object/proplist.cpp,v 1.9 1997/12/19 15:28:35 TOML Exp $
10 // must be last header
13 ////////////////////////////////////////////////////////////
17 ////////////////////////////////////////////////////////////
19 cPropertyImplLlist::cPropertyImplLlist (int elem_size
) :
20 cPropertyImpl (elem_size
)
24 BOOL
cPropertyImplLlist::Get (ObjID obj
, PropertyID
, void **pptr
) const
26 for (cListNode
* node
= List
.GetFirst(); node
!= NULL
; node
= node
->GetNext())
37 BOOL
cPropertyImplLlist::Set (ObjID obj
, PropertyID
, void *ptr
)
39 for (cListNode
* node
= List
.GetFirst(); node
!= NULL
; node
= node
->GetNext())
44 Copy(obj
,node
->data
,ptr
);
51 node
= new cListNode(obj
,elem_size_
);
54 Copy(obj
,node
->data
,ptr
);
59 void* cPropertyImplLlist::Create (ObjID obj
, PropertyID
)
61 cListNode
* pnode
= new cListNode(obj
,elem_size_
);
64 Init(obj
,pnode
->data
);
71 BOOL
cPropertyImplLlist::Delete(ObjID obj
, PropertyID
)
73 for (cListNode
* pnode
= List
.GetFirst(); pnode
!= NULL
; pnode
= pnode
->GetNext())
75 if (pnode
->obj
== obj
)
77 Term(obj
,pnode
->data
);
84 // It never had the property anyway
88 BOOL
cPropertyImplLlist::Relevant (ObjID obj
, PropertyID
) const
90 for (cListNode
* pnode
= List
.GetFirst(); pnode
!= NULL
; pnode
= pnode
->GetNext())
92 if (pnode
->obj
== obj
)
100 void cPropertyImplLlist::Reset(PropertyID
)
108 ////////////////////////////////////////
110 void cPropertyImplLlist::IterStart(PropertyID
, sPropertyObjIter
* iter
) const
112 cListNode
* first
= List
.GetFirst();
113 iter
->state
[0] = first
;
114 iter
->state
[1] = (first
!= NULL
) ? first
->GetNext() : NULL
;
117 ////////////////////////////////////////
119 void cPropertyImplLlist::IterStop(PropertyID
, sPropertyObjIter
* ) const
124 ////////////////////////////////////////
126 BOOL
cPropertyImplLlist::IterNext(PropertyID
, sPropertyObjIter
* iter
, ObjID
* next
, void** value
) const
128 cListNode
* node
= (cListNode
*)iter
->state
[0];
129 if (node
== NULL
) return FALSE
;
132 iter
->state
[0] = iter
->state
[1];
133 if (iter
->state
[0] != NULL
)
135 node
= (cListNode
*)iter
->state
[0];
136 iter
->state
[1] = node
->GetNext();