5 #define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } } 14 virtual T* GetAt(
int index)=0;
15 virtual const T* GetAt(
int index)
const =0;
16 virtual int CopyInsert(T* obj,
int index)=0;
17 virtual int Insert(T* obj,
int index)=0;
18 virtual void Clear()=0;
19 virtual int Remove(
int index)=0;
20 virtual int Remove()=0;
21 virtual void CopyAdd(
const T *obj)=0;
22 virtual void Add(T *obj)=0;
23 virtual int CopySetAt(
const T *obj,
int index)=0;
24 virtual int SetAt(T* obj,
int index)=0;
25 virtual int IndexOf(
const T *obj)
const=0;
26 virtual int Size()
const=0;
27 virtual int Resize(
int newsize)=0;
38 typedef vector<T *> ConnectionVector_type;
45 if ((DWORD)index>=m_items.size()) {
48 return m_items[index];
50 const T* GetAt(
int index)
const 52 if ((DWORD)index>=m_items.size()) {
55 return m_items[index];
57 int CopyInsert(T* obj,
int index)
59 if ((DWORD)index<=m_items.size()) {
61 m_items.insert(m_items.begin()+index,obj);
63 m_items.insert(m_items.begin()+index,(T*)obj->Clone());
68 int Insert(T* obj,
int index)
70 if ((DWORD)index<=m_items.size()) {
71 if (obj) obj->addref();
72 m_items.insert(m_items.begin()+index,obj);
80 typename ConnectionVector_type::iterator iter,iterend=m_items.end();
81 for (iter=m_items.begin();iter!=iterend;iter++) {
88 if ((DWORD)index<m_items.size()) {
89 SAFE_RELEASE(m_items[index]);
90 m_items.erase(m_items.begin()+index);
91 return (
int)m_items.size();
97 if (m_items.size()>0){
98 SAFE_RELEASE(m_items.back());
100 return (
int)m_items.size();
104 void CopyAdd(
const T* obj)
107 m_items.push_back((T*)obj->Clone());
110 m_items.push_back(pnull);
115 if(obj) obj->addref();
116 m_items.push_back(obj);
119 int CopySetAt(
const T *obj,
int index)
121 if ((DWORD)index<m_items.size()) {
122 SAFE_RELEASE(m_items[index]);
124 m_items[index]=(T*)obj->Clone();
127 m_items[index]=pnull;
136 int SetAt(T* obj,
int index)
138 if ((DWORD)index<m_items.size()) {
139 SAFE_RELEASE(m_items[index]);
140 if (obj) obj->addref();
147 int IndexOf(
const T *obj)
const 149 typename ConnectionVector_type::const_iterator iter, iterend = m_items.end();
151 for (a=0,iter=m_items.begin();iter!=iterend;iter++,a++) {
152 if ((*iter)->Equals(obj)) {
158 int Size()
const{
return (
int)m_items.size();}
159 int Resize(
int newsize)
164 int oldsize=(int)m_items.size();
165 if (newsize<oldsize) {
166 for (
int a=newsize;a<oldsize;a++) {
167 SAFE_RELEASE(m_items[a]);
171 m_items.resize(newsize);
172 if (newsize>oldsize) {
173 for (
int a=oldsize;a<newsize;a++) {
180 ConnectionVector_type m_items;
192 typedef map<int, T *> CollectionMap_type;
200 typename CollectionMap_type::iterator iter;
201 if ((iter=m_items.find(index))==m_items.end()) {
206 const T* GetAt(
int index)
const 208 typename CollectionMap_type::const_iterator iter;
209 if ((iter=m_items.find(index))==m_items.end()) {
214 int CopyInsert(T* obj,
int index)
219 typename CollectionMap_type::iterator iter1, iter2;
222 pobj=(T*)obj->Clone();
226 for (
int a=index;a<=m_nSize;a++){
227 if ((iter1=m_items.find(a))!=m_items.end()){
241 int Insert(T* obj,
int index)
246 if (obj) obj->addref();
247 typename CollectionMap_type::iterator iter;
251 for (
int a=index;a<=m_nSize;a++){
252 if ((iter=m_items.find(a))!=m_items.end()){
268 typename CollectionMap_type::iterator iter, iterend = m_items.end();
269 for (iter=m_items.begin();iter!=iterend;iter++) {
270 SAFE_RELEASE(iter->second);
274 int Remove(
int index)
276 if (m_items.find(index)!=m_items.end()) {
277 SAFE_RELEASE(m_items[index]);
278 m_items.erase(index);
279 typename CollectionMap_type::iterator iter;
281 for (
int a=index;a<m_nSize;a++){
282 if ((iter=m_items.find(a+1))!=m_items.end()){
283 m_items[a]=m_items[a+1];
294 if (m_items.find(m_nSize-1)!=m_items.end()){
295 SAFE_RELEASE(m_items[--m_nSize]);
296 m_items.erase(m_nSize);
301 void CopyAdd(
const T* obj)
304 m_items[m_nSize]=((T*)obj->Clone());
312 m_items[m_nSize]=obj;
318 int CopySetAt(
const T *obj,
int index)
320 typename CollectionMap_type::iterator iter;
321 if ((DWORD)index<(DWORD)m_nSize) {
322 if ((iter=m_items.find(index))!=m_items.end()){
323 SAFE_RELEASE(iter->second);
326 m_items[index]=(T*)obj->Clone();
335 int SetAt(T* obj,
int index)
337 if ((DWORD)index<(DWORD)m_nSize) {
338 if (m_items.find(index)!=m_items.end()){
339 SAFE_RELEASE(m_items[index]);
350 int IndexOf(
const T *obj)
const 352 typename CollectionMap_type::const_iterator iter, iterend = m_items.end();
354 for (a=0,iter=m_items.begin();iter!=iterend;iter++,a++) {
355 if ((iter->second)->Equals(obj)) {
361 int Size()
const{
return m_nSize;}
362 int Resize(
int newsize)
367 if (newsize<m_nSize) {
368 typename CollectionMap_type::iterator iter;
369 for (
int a=newsize;a<m_nSize;a++) {
370 if ((iter=m_items.find(a))!=m_items.end()){
371 SAFE_RELEASE(iter->second);
380 CollectionMap_type m_items;
Definition: ICollection.h:11
different physics engine has different winding order.
Definition: EventBinding.h:32
Default behavior of the collection adds only reference.
Definition: ICollection.h:189
Default behavior of the collection adds only reference.
Definition: ICollection.h:35