convert line ends
[canaan.git] / prj / cam / src / object / proplist.cpp
blobf70b8fbe1a94a8b1e44463ebc4874ab253993869
1 /*
2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
4 */
6 // $Header: r:/t2repos/thief2/src/object/proplist.cpp,v 1.9 1997/12/19 15:28:35 TOML Exp $
7 #include <proplist.h>
8 #include <dlisttem.h>
10 // must be last header
11 #include <dbmem.h>
13 ////////////////////////////////////////////////////////////
15 // cPropertyImplLlist
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())
28 if (node->obj == obj)
30 *pptr = node->data;
31 return TRUE;
34 return FALSE;
37 BOOL cPropertyImplLlist::Set (ObjID obj, PropertyID, void *ptr)
39 for (cListNode* node = List.GetFirst(); node != NULL; node = node->GetNext())
41 if (node->obj == obj)
43 // Change in place
44 Copy(obj,node->data,ptr);
46 return FALSE;
50 // Add new node
51 node = new cListNode(obj,elem_size_);
52 List.Prepend(node);
53 Init(obj,node->data);
54 Copy(obj,node->data,ptr);
55 return TRUE;
59 void* cPropertyImplLlist::Create (ObjID obj, PropertyID)
61 cListNode* pnode = new cListNode(obj,elem_size_);
62 List.Prepend(pnode);
64 Init(obj,pnode->data);
66 return 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);
78 List.Remove(pnode);
79 delete pnode;
80 return TRUE;
84 // It never had the property anyway
85 return FALSE;
88 BOOL cPropertyImplLlist::Relevant (ObjID obj, PropertyID ) const
90 for (cListNode* pnode = List.GetFirst(); pnode != NULL; pnode = pnode->GetNext())
92 if (pnode->obj == obj)
94 return TRUE;
97 return FALSE;
100 void cPropertyImplLlist::Reset(PropertyID)
102 List.DestroyAll();
103 List.SetEmpty();
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;
130 *next = node->obj;
131 *value = node->data;
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();
138 return TRUE;