]> git.xonotic.org Git - xonotic/netradiant.git/blob - tools/heretic2/qcommon/arrayedlist.h
Merge commit 'c5a6237a2b002c9811719172931b0c9cc5a725f4' into master-merge
[xonotic/netradiant.git] / tools / heretic2 / qcommon / arrayedlist.h
1 /*
2    Copyright (C) 1999-2007 id Software, Inc. and contributors.
3    For a list of contributors, see the accompanying CONTRIBUTORS file.
4
5    This file is part of GtkRadiant.
6
7    GtkRadiant is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    GtkRadiant is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GtkRadiant; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21
22 #ifndef _ARRAYEDLIST_H
23 #define _ARRAYEDLIST_H
24
25 #include <assert.h>
26 #include <globaldefs.h>
27
28 typedef struct ArrayedListNode_s
29 {
30         int data;
31         int next;
32         int inUse;
33 } ArrayedListNode_t;
34
35 #define ARRAYEDLISTNODE_NULL -1
36
37 static GDEF_ATTRIBUTE_INLINE int GetFreeNode( ArrayedListNode_t *nodeArray, int max ){
38         int i;
39
40         for ( i = 0; i < max; ++i )
41         {
42                 if ( !nodeArray[i].inUse ) {
43                         nodeArray[i].inUse = 1;
44                         return i;
45                 }
46         }
47
48         assert( 0 );
49         return -1;
50 }
51
52 static GDEF_ATTRIBUTE_INLINE void FreeNode( ArrayedListNode_t *nodeArray, int index ){
53         nodeArray[index].inUse = 0;
54 }
55
56 #endif //_ARRAYEDLIST_H