annotate extern/libutlist/utlist.h @ 605:a8094fad01a1

ui: rework styles
author David Demelier <markand@malikania.fr>
date Fri, 11 Aug 2023 19:22:00 +0200
parents f9e85d0aca74
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
593
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 Copyright (c) 2007-2021, Troy D. Hanson http://troydhanson.github.com/uthash/
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 All rights reserved.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
4
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 Redistribution and use in source and binary forms, with or without
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 modification, are permitted provided that the following conditions are met:
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
7
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * Redistributions of source code must retain the above copyright
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 notice, this list of conditions and the following disclaimer.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
10
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
18 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #ifndef UTLIST_H
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #define UTLIST_H
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #define UTLIST_VERSION 2.3.0
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include <assert.h>
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 /*
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 * This file contains macros to manipulate singly and doubly-linked lists.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 *
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 * 1. LL_ macros: singly-linked lists.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 * 2. DL_ macros: doubly-linked lists.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 * 3. CDL_ macros: circular doubly-linked lists.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 *
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 * To use singly-linked lists, your structure must have a "next" pointer.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 * To use doubly-linked lists, your structure must "prev" and "next" pointers.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 * Either way, the pointer to the head of the list must be initialized to NULL.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 *
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 * ----------------.EXAMPLE -------------------------
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 * struct item {
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 * int id;
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 * struct item *prev, *next;
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 * }
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 *
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 * struct item *list = NULL:
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 *
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 * int main() {
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 * struct item *item;
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 * ... allocate and populate item ...
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 * DL_APPEND(list, item);
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 * }
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 * --------------------------------------------------
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 *
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 * For doubly-linked lists, the append and delete macros are O(1)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 * For singly-linked lists, append and delete are O(n) but prepend is O(1)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 * The sort macro is O(n log(n)) for all types of single/double/circular lists.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 /* These macros use decltype or the earlier __typeof GNU extension.
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 As decltype is only available in newer compilers (VS2010 or gcc 4.3+
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 when compiling c++ source) this code uses whatever method is needed
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 or, for VS2008 where neither is available, uses casting workarounds. */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 #if !defined(LDECLTYPE) && !defined(NO_DECLTYPE)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 #if defined(_MSC_VER) /* MS compiler */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 #if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 #define LDECLTYPE(x) decltype(x)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 #else /* VS2008 or older (or VS2010 in C mode) */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 #define NO_DECLTYPE
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 #endif
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 #elif defined(__BORLANDC__) || defined(__ICCARM__) || defined(__LCC__) || defined(__WATCOMC__)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 #define NO_DECLTYPE
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 #else /* GNU, Sun and other compilers */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 #define LDECLTYPE(x) __typeof(x)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 #endif
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 #endif
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
79
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 /* for VS2008 we use some workarounds to get around the lack of decltype,
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 * namely, we always reassign our tmp variable to the list head if we need
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 * to dereference its prev/next pointers, and save/restore the real head.*/
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 #ifdef NO_DECLTYPE
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 #define IF_NO_DECLTYPE(x) x
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 #define LDECLTYPE(x) char*
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 #define UTLIST_SV(elt,list) _tmp = (char*)(list); {char **_alias = (char**)&(list); *_alias = (elt); }
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 #define UTLIST_NEXT(elt,list,next) ((char*)((list)->next))
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 #define UTLIST_NEXTASGN(elt,list,to,next) { char **_alias = (char**)&((list)->next); *_alias=(char*)(to); }
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 /* #define UTLIST_PREV(elt,list,prev) ((char*)((list)->prev)) */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 #define UTLIST_PREVASGN(elt,list,to,prev) { char **_alias = (char**)&((list)->prev); *_alias=(char*)(to); }
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 #define UTLIST_RS(list) { char **_alias = (char**)&(list); *_alias=_tmp; }
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 #define UTLIST_CASTASGN(a,b) { char **_alias = (char**)&(a); *_alias=(char*)(b); }
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 #else
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 #define IF_NO_DECLTYPE(x)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 #define UTLIST_SV(elt,list)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 #define UTLIST_NEXT(elt,list,next) ((elt)->next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 #define UTLIST_NEXTASGN(elt,list,to,next) ((elt)->next)=(to)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 /* #define UTLIST_PREV(elt,list,prev) ((elt)->prev) */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 #define UTLIST_PREVASGN(elt,list,to,prev) ((elt)->prev)=(to)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 #define UTLIST_RS(list)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 #define UTLIST_CASTASGN(a,b) (a)=(b)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 #endif
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
103
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 /******************************************************************************
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 * The sort macro is an adaptation of Simon Tatham's O(n log(n)) mergesort *
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 * Unwieldy variable names used here to avoid shadowing passed-in variables. *
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 *****************************************************************************/
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 #define LL_SORT(list, cmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 LL_SORT2(list, cmp, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 #define LL_SORT2(list, cmp, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 LDECLTYPE(list) _ls_p; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 LDECLTYPE(list) _ls_q; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 LDECLTYPE(list) _ls_e; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 LDECLTYPE(list) _ls_tail; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 IF_NO_DECLTYPE(LDECLTYPE(list) _tmp;) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 if (list) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 _ls_insize = 1; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 _ls_looping = 1; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 while (_ls_looping) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 UTLIST_CASTASGN(_ls_p,list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 (list) = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 _ls_tail = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 _ls_nmerges = 0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 while (_ls_p) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 _ls_nmerges++; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 _ls_q = _ls_p; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 _ls_psize = 0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 _ls_psize++; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 UTLIST_SV(_ls_q,list); _ls_q = UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 if (!_ls_q) break; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 _ls_qsize = _ls_insize; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 if (_ls_psize == 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 } else if (_ls_qsize == 0 || !_ls_q) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 } else if (cmp(_ls_p,_ls_q) <= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 if (_ls_tail) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,_ls_e,next); UTLIST_RS(list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 UTLIST_CASTASGN(list,_ls_e); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 _ls_tail = _ls_e; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 _ls_p = _ls_q; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 if (_ls_tail) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,NULL,next); UTLIST_RS(list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 if (_ls_nmerges <= 1) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 _ls_looping=0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 _ls_insize *= 2; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
170
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
171
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 #define DL_SORT(list, cmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 DL_SORT2(list, cmp, prev, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
174
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 #define DL_SORT2(list, cmp, prev, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 LDECLTYPE(list) _ls_p; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 LDECLTYPE(list) _ls_q; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 LDECLTYPE(list) _ls_e; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 LDECLTYPE(list) _ls_tail; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 IF_NO_DECLTYPE(LDECLTYPE(list) _tmp;) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 if (list) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 _ls_insize = 1; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 _ls_looping = 1; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 while (_ls_looping) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 UTLIST_CASTASGN(_ls_p,list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 (list) = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 _ls_tail = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 _ls_nmerges = 0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 while (_ls_p) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 _ls_nmerges++; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 _ls_q = _ls_p; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 _ls_psize = 0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 _ls_psize++; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 UTLIST_SV(_ls_q,list); _ls_q = UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 if (!_ls_q) break; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 _ls_qsize = _ls_insize; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 while ((_ls_psize > 0) || ((_ls_qsize > 0) && _ls_q)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 if (_ls_psize == 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 } else if ((_ls_qsize == 0) || (!_ls_q)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 } else if (cmp(_ls_p,_ls_q) <= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 if (_ls_tail) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,_ls_e,next); UTLIST_RS(list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 UTLIST_CASTASGN(list,_ls_e); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 UTLIST_SV(_ls_e,list); UTLIST_PREVASGN(_ls_e,list,_ls_tail,prev); UTLIST_RS(list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 _ls_tail = _ls_e; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 _ls_p = _ls_q; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 UTLIST_CASTASGN((list)->prev, _ls_tail); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,NULL,next); UTLIST_RS(list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 if (_ls_nmerges <= 1) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 _ls_looping=0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 _ls_insize *= 2; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
234
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 #define CDL_SORT(list, cmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 CDL_SORT2(list, cmp, prev, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
237
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 #define CDL_SORT2(list, cmp, prev, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 LDECLTYPE(list) _ls_p; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 LDECLTYPE(list) _ls_q; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 LDECLTYPE(list) _ls_e; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 LDECLTYPE(list) _ls_tail; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 LDECLTYPE(list) _ls_oldhead; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 LDECLTYPE(list) _tmp; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 if (list) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 _ls_insize = 1; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 _ls_looping = 1; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 while (_ls_looping) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
251 UTLIST_CASTASGN(_ls_p,list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 UTLIST_CASTASGN(_ls_oldhead,list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 (list) = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 _ls_tail = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 _ls_nmerges = 0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 while (_ls_p) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 _ls_nmerges++; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
258 _ls_q = _ls_p; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 _ls_psize = 0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
261 _ls_psize++; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 UTLIST_SV(_ls_q,list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 if (UTLIST_NEXT(_ls_q,list,next) == _ls_oldhead) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 _ls_q = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 _ls_q = UTLIST_NEXT(_ls_q,list,next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 UTLIST_RS(list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 if (!_ls_q) break; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
271 _ls_qsize = _ls_insize; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
272 while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
273 if (_ls_psize == 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
275 UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
276 if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 } else if (_ls_qsize == 0 || !_ls_q) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
278 _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
280 if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 } else if (cmp(_ls_p,_ls_q) <= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
282 _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
283 UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
284 if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
286 _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
288 if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
290 if (_ls_tail) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,_ls_e,next); UTLIST_RS(list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
293 UTLIST_CASTASGN(list,_ls_e); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
295 UTLIST_SV(_ls_e,list); UTLIST_PREVASGN(_ls_e,list,_ls_tail,prev); UTLIST_RS(list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 _ls_tail = _ls_e; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 _ls_p = _ls_q; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
300 UTLIST_CASTASGN((list)->prev,_ls_tail); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
301 UTLIST_CASTASGN(_tmp,list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,_tmp,next); UTLIST_RS(list); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 if (_ls_nmerges <= 1) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 _ls_looping=0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
305 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
306 _ls_insize *= 2; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
307 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
308 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
309 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
310
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 /******************************************************************************
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 * singly linked list macros (non-circular) *
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
313 *****************************************************************************/
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
314 #define LL_PREPEND(head,add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
315 LL_PREPEND2(head,add,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
316
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
317 #define LL_PREPEND2(head,add,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
318 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
319 (add)->next = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
320 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
321 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
322
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
323 #define LL_CONCAT(head1,head2) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
324 LL_CONCAT2(head1,head2,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
325
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
326 #define LL_CONCAT2(head1,head2,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
327 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 LDECLTYPE(head1) _tmp; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
329 if (head1) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
330 _tmp = (head1); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
331 while (_tmp->next) { _tmp = _tmp->next; } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
332 _tmp->next=(head2); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
333 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
334 (head1)=(head2); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
335 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
336 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
337
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
338 #define LL_APPEND(head,add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
339 LL_APPEND2(head,add,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
340
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
341 #define LL_APPEND2(head,add,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
342 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
343 LDECLTYPE(head) _tmp; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
344 (add)->next=NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
345 if (head) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
346 _tmp = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
347 while (_tmp->next) { _tmp = _tmp->next; } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
348 _tmp->next=(add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
349 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
350 (head)=(add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
352 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
353
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
354 #define LL_INSERT_INORDER(head,add,cmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
355 LL_INSERT_INORDER2(head,add,cmp,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
356
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
357 #define LL_INSERT_INORDER2(head,add,cmp,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
358 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
359 LDECLTYPE(head) _tmp; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
360 if (head) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
361 LL_LOWER_BOUND2(head, _tmp, add, cmp, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
362 LL_APPEND_ELEM2(head, _tmp, add, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
363 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
364 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
365 (head)->next = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
366 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
367 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
368
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
369 #define LL_LOWER_BOUND(head,elt,like,cmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
370 LL_LOWER_BOUND2(head,elt,like,cmp,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
371
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
372 #define LL_LOWER_BOUND2(head,elt,like,cmp,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
373 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
374 if ((head) == NULL || (cmp(head, like)) >= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
375 (elt) = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
376 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
377 for ((elt) = (head); (elt)->next != NULL; (elt) = (elt)->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
378 if (cmp((elt)->next, like) >= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
379 break; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
380 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
381 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
382 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
383 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
384
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
385 #define LL_DELETE(head,del) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
386 LL_DELETE2(head,del,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
387
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
388 #define LL_DELETE2(head,del,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
389 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
390 LDECLTYPE(head) _tmp; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
391 if ((head) == (del)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
392 (head)=(head)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
393 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
394 _tmp = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
395 while (_tmp->next && (_tmp->next != (del))) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
396 _tmp = _tmp->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
397 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
398 if (_tmp->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
399 _tmp->next = (del)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
400 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
401 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
402 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
403
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
404 #define LL_COUNT(head,el,counter) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
405 LL_COUNT2(head,el,counter,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
406
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
407 #define LL_COUNT2(head,el,counter,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
408 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
409 (counter) = 0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
410 LL_FOREACH2(head,el,next) { ++(counter); } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
411 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
412
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
413 #define LL_FOREACH(head,el) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
414 LL_FOREACH2(head,el,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
415
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
416 #define LL_FOREACH2(head,el,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
417 for ((el) = (head); el; (el) = (el)->next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
418
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
419 #define LL_FOREACH_SAFE(head,el,tmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
420 LL_FOREACH_SAFE2(head,el,tmp,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
421
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
422 #define LL_FOREACH_SAFE2(head,el,tmp,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
423 for ((el) = (head); (el) && ((tmp) = (el)->next, 1); (el) = (tmp))
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
424
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
425 #define LL_SEARCH_SCALAR(head,out,field,val) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
426 LL_SEARCH_SCALAR2(head,out,field,val,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
427
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
428 #define LL_SEARCH_SCALAR2(head,out,field,val,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
429 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
430 LL_FOREACH2(head,out,next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
431 if ((out)->field == (val)) break; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
432 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
433 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
434
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
435 #define LL_SEARCH(head,out,elt,cmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
436 LL_SEARCH2(head,out,elt,cmp,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
437
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
438 #define LL_SEARCH2(head,out,elt,cmp,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
439 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
440 LL_FOREACH2(head,out,next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
441 if ((cmp(out,elt))==0) break; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
442 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
443 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
444
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
445 #define LL_REPLACE_ELEM2(head, el, add, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
446 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
447 LDECLTYPE(head) _tmp; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
448 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
449 assert((el) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
450 assert((add) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
451 (add)->next = (el)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
452 if ((head) == (el)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
453 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
454 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
455 _tmp = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
456 while (_tmp->next && (_tmp->next != (el))) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
457 _tmp = _tmp->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
458 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
459 if (_tmp->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
460 _tmp->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
461 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
462 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
463 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
464
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
465 #define LL_REPLACE_ELEM(head, el, add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
466 LL_REPLACE_ELEM2(head, el, add, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
467
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
468 #define LL_PREPEND_ELEM2(head, el, add, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
469 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
470 if (el) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
471 LDECLTYPE(head) _tmp; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
472 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
473 assert((add) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
474 (add)->next = (el); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
475 if ((head) == (el)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
476 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
477 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
478 _tmp = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
479 while (_tmp->next && (_tmp->next != (el))) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
480 _tmp = _tmp->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
481 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
482 if (_tmp->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
483 _tmp->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
484 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
485 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
486 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
487 LL_APPEND2(head, add, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
488 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
489 } while (0) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
490
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
491 #define LL_PREPEND_ELEM(head, el, add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
492 LL_PREPEND_ELEM2(head, el, add, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
493
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
494 #define LL_APPEND_ELEM2(head, el, add, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
495 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
496 if (el) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
497 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
498 assert((add) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
499 (add)->next = (el)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
500 (el)->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
501 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
502 LL_PREPEND2(head, add, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
503 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
504 } while (0) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
505
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
506 #define LL_APPEND_ELEM(head, el, add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
507 LL_APPEND_ELEM2(head, el, add, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
508
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
509 #ifdef NO_DECLTYPE
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
510 /* Here are VS2008 / NO_DECLTYPE replacements for a few functions */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
511
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
512 #undef LL_CONCAT2
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
513 #define LL_CONCAT2(head1,head2,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
514 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
515 char *_tmp; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
516 if (head1) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
517 _tmp = (char*)(head1); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
518 while ((head1)->next) { (head1) = (head1)->next; } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
519 (head1)->next = (head2); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
520 UTLIST_RS(head1); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
521 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
522 (head1)=(head2); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
523 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
524 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
525
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
526 #undef LL_APPEND2
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
527 #define LL_APPEND2(head,add,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
528 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
529 if (head) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
530 (add)->next = head; /* use add->next as a temp variable */ \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
531 while ((add)->next->next) { (add)->next = (add)->next->next; } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
532 (add)->next->next=(add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
533 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
534 (head)=(add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
535 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
536 (add)->next=NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
537 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
538
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
539 #undef LL_INSERT_INORDER2
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
540 #define LL_INSERT_INORDER2(head,add,cmp,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
541 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
542 if ((head) == NULL || (cmp(head, add)) >= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
543 (add)->next = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
544 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
545 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
546 char *_tmp = (char*)(head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
547 while ((head)->next != NULL && (cmp((head)->next, add)) < 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
548 (head) = (head)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
549 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
550 (add)->next = (head)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
551 (head)->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
552 UTLIST_RS(head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
553 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
554 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
555
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
556 #undef LL_DELETE2
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
557 #define LL_DELETE2(head,del,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
558 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
559 if ((head) == (del)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
560 (head)=(head)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
561 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
562 char *_tmp = (char*)(head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
563 while ((head)->next && ((head)->next != (del))) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
564 (head) = (head)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
565 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
566 if ((head)->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
567 (head)->next = ((del)->next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
568 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
569 UTLIST_RS(head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
570 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
571 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
572
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
573 #undef LL_REPLACE_ELEM2
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
574 #define LL_REPLACE_ELEM2(head, el, add, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
575 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
576 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
577 assert((el) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
578 assert((add) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
579 if ((head) == (el)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
580 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
581 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
582 (add)->next = head; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
583 while ((add)->next->next && ((add)->next->next != (el))) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
584 (add)->next = (add)->next->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
585 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
586 if ((add)->next->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
587 (add)->next->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
588 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
589 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
590 (add)->next = (el)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
591 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
592
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
593 #undef LL_PREPEND_ELEM2
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
594 #define LL_PREPEND_ELEM2(head, el, add, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
595 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
596 if (el) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
597 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
598 assert((add) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
599 if ((head) == (el)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
600 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
601 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
602 (add)->next = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
603 while ((add)->next->next && ((add)->next->next != (el))) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
604 (add)->next = (add)->next->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
605 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
606 if ((add)->next->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
607 (add)->next->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
608 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
609 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
610 (add)->next = (el); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
611 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
612 LL_APPEND2(head, add, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
613 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
614 } while (0) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
615
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
616 #endif /* NO_DECLTYPE */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
617
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
618 /******************************************************************************
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
619 * doubly linked list macros (non-circular) *
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
620 *****************************************************************************/
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
621 #define DL_PREPEND(head,add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
622 DL_PREPEND2(head,add,prev,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
623
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
624 #define DL_PREPEND2(head,add,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
625 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
626 (add)->next = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
627 if (head) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
628 (add)->prev = (head)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
629 (head)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
630 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
631 (add)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
632 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
633 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
634 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
635
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
636 #define DL_APPEND(head,add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
637 DL_APPEND2(head,add,prev,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
638
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
639 #define DL_APPEND2(head,add,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
640 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
641 if (head) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
642 (add)->prev = (head)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
643 (head)->prev->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
644 (head)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
645 (add)->next = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
646 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
647 (head)=(add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
648 (head)->prev = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
649 (head)->next = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
650 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
651 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
652
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
653 #define DL_INSERT_INORDER(head,add,cmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
654 DL_INSERT_INORDER2(head,add,cmp,prev,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
655
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
656 #define DL_INSERT_INORDER2(head,add,cmp,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
657 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
658 LDECLTYPE(head) _tmp; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
659 if (head) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
660 DL_LOWER_BOUND2(head, _tmp, add, cmp, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
661 DL_APPEND_ELEM2(head, _tmp, add, prev, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
662 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
663 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
664 (head)->prev = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
665 (head)->next = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
666 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
667 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
668
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
669 #define DL_LOWER_BOUND(head,elt,like,cmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
670 DL_LOWER_BOUND2(head,elt,like,cmp,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
671
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
672 #define DL_LOWER_BOUND2(head,elt,like,cmp,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
673 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
674 if ((head) == NULL || (cmp(head, like)) >= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
675 (elt) = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
676 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
677 for ((elt) = (head); (elt)->next != NULL; (elt) = (elt)->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
678 if ((cmp((elt)->next, like)) >= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
679 break; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
680 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
681 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
682 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
683 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
684
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
685 #define DL_CONCAT(head1,head2) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
686 DL_CONCAT2(head1,head2,prev,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
687
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
688 #define DL_CONCAT2(head1,head2,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
689 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
690 LDECLTYPE(head1) _tmp; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
691 if (head2) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
692 if (head1) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
693 UTLIST_CASTASGN(_tmp, (head2)->prev); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
694 (head2)->prev = (head1)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
695 (head1)->prev->next = (head2); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
696 UTLIST_CASTASGN((head1)->prev, _tmp); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
697 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
698 (head1)=(head2); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
699 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
700 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
701 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
702
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
703 #define DL_DELETE(head,del) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
704 DL_DELETE2(head,del,prev,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
705
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
706 #define DL_DELETE2(head,del,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
707 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
708 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
709 assert((del)->prev != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
710 if ((del)->prev == (del)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
711 (head)=NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
712 } else if ((del)==(head)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
713 (del)->next->prev = (del)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
714 (head) = (del)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
715 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
716 (del)->prev->next = (del)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
717 if ((del)->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
718 (del)->next->prev = (del)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
719 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
720 (head)->prev = (del)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
721 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
722 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
723 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
724
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
725 #define DL_COUNT(head,el,counter) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
726 DL_COUNT2(head,el,counter,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
727
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
728 #define DL_COUNT2(head,el,counter,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
729 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
730 (counter) = 0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
731 DL_FOREACH2(head,el,next) { ++(counter); } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
732 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
733
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
734 #define DL_FOREACH(head,el) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
735 DL_FOREACH2(head,el,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
736
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
737 #define DL_FOREACH2(head,el,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
738 for ((el) = (head); el; (el) = (el)->next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
739
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
740 /* this version is safe for deleting the elements during iteration */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
741 #define DL_FOREACH_SAFE(head,el,tmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
742 DL_FOREACH_SAFE2(head,el,tmp,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
743
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
744 #define DL_FOREACH_SAFE2(head,el,tmp,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
745 for ((el) = (head); (el) && ((tmp) = (el)->next, 1); (el) = (tmp))
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
746
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
747 /* these are identical to their singly-linked list counterparts */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
748 #define DL_SEARCH_SCALAR LL_SEARCH_SCALAR
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
749 #define DL_SEARCH LL_SEARCH
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
750 #define DL_SEARCH_SCALAR2 LL_SEARCH_SCALAR2
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
751 #define DL_SEARCH2 LL_SEARCH2
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
752
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
753 #define DL_REPLACE_ELEM2(head, el, add, prev, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
754 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
755 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
756 assert((el) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
757 assert((add) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
758 if ((head) == (el)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
759 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
760 (add)->next = (el)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
761 if ((el)->next == NULL) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
762 (add)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
763 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
764 (add)->prev = (el)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
765 (add)->next->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
766 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
767 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
768 (add)->next = (el)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
769 (add)->prev = (el)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
770 (add)->prev->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
771 if ((el)->next == NULL) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
772 (head)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
773 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
774 (add)->next->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
775 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
776 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
777 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
778
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
779 #define DL_REPLACE_ELEM(head, el, add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
780 DL_REPLACE_ELEM2(head, el, add, prev, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
781
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
782 #define DL_PREPEND_ELEM2(head, el, add, prev, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
783 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
784 if (el) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
785 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
786 assert((add) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
787 (add)->next = (el); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
788 (add)->prev = (el)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
789 (el)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
790 if ((head) == (el)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
791 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
792 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
793 (add)->prev->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
794 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
795 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
796 DL_APPEND2(head, add, prev, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
797 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
798 } while (0) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
799
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
800 #define DL_PREPEND_ELEM(head, el, add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
801 DL_PREPEND_ELEM2(head, el, add, prev, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
802
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
803 #define DL_APPEND_ELEM2(head, el, add, prev, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
804 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
805 if (el) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
806 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
807 assert((add) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
808 (add)->next = (el)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
809 (add)->prev = (el); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
810 (el)->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
811 if ((add)->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
812 (add)->next->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
813 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
814 (head)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
815 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
816 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
817 DL_PREPEND2(head, add, prev, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
818 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
819 } while (0) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
820
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
821 #define DL_APPEND_ELEM(head, el, add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
822 DL_APPEND_ELEM2(head, el, add, prev, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
823
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
824 #ifdef NO_DECLTYPE
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
825 /* Here are VS2008 / NO_DECLTYPE replacements for a few functions */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
826
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
827 #undef DL_INSERT_INORDER2
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
828 #define DL_INSERT_INORDER2(head,add,cmp,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
829 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
830 if ((head) == NULL) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
831 (add)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
832 (add)->next = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
833 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
834 } else if ((cmp(head, add)) >= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
835 (add)->prev = (head)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
836 (add)->next = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
837 (head)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
838 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
839 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
840 char *_tmp = (char*)(head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
841 while ((head)->next && (cmp((head)->next, add)) < 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
842 (head) = (head)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
843 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
844 (add)->prev = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
845 (add)->next = (head)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
846 (head)->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
847 UTLIST_RS(head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
848 if ((add)->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
849 (add)->next->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
850 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
851 (head)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
852 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
853 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
854 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
855 #endif /* NO_DECLTYPE */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
856
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
857 /******************************************************************************
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
858 * circular doubly linked list macros *
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
859 *****************************************************************************/
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
860 #define CDL_APPEND(head,add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
861 CDL_APPEND2(head,add,prev,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
862
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
863 #define CDL_APPEND2(head,add,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
864 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
865 if (head) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
866 (add)->prev = (head)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
867 (add)->next = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
868 (head)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
869 (add)->prev->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
870 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
871 (add)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
872 (add)->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
873 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
874 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
875 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
876
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
877 #define CDL_PREPEND(head,add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
878 CDL_PREPEND2(head,add,prev,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
879
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
880 #define CDL_PREPEND2(head,add,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
881 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
882 if (head) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
883 (add)->prev = (head)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
884 (add)->next = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
885 (head)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
886 (add)->prev->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
887 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
888 (add)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
889 (add)->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
890 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
891 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
892 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
893
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
894 #define CDL_INSERT_INORDER(head,add,cmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
895 CDL_INSERT_INORDER2(head,add,cmp,prev,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
896
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
897 #define CDL_INSERT_INORDER2(head,add,cmp,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
898 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
899 LDECLTYPE(head) _tmp; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
900 if (head) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
901 CDL_LOWER_BOUND2(head, _tmp, add, cmp, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
902 CDL_APPEND_ELEM2(head, _tmp, add, prev, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
903 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
904 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
905 (head)->next = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
906 (head)->prev = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
907 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
908 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
909
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
910 #define CDL_LOWER_BOUND(head,elt,like,cmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
911 CDL_LOWER_BOUND2(head,elt,like,cmp,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
912
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
913 #define CDL_LOWER_BOUND2(head,elt,like,cmp,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
914 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
915 if ((head) == NULL || (cmp(head, like)) >= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
916 (elt) = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
917 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
918 for ((elt) = (head); (elt)->next != (head); (elt) = (elt)->next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
919 if ((cmp((elt)->next, like)) >= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
920 break; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
921 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
922 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
923 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
924 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
925
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
926 #define CDL_DELETE(head,del) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
927 CDL_DELETE2(head,del,prev,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
928
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
929 #define CDL_DELETE2(head,del,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
930 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
931 if (((head)==(del)) && ((head)->next == (head))) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
932 (head) = NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
933 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
934 (del)->next->prev = (del)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
935 (del)->prev->next = (del)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
936 if ((del) == (head)) (head)=(del)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
937 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
938 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
939
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
940 #define CDL_COUNT(head,el,counter) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
941 CDL_COUNT2(head,el,counter,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
942
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
943 #define CDL_COUNT2(head, el, counter,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
944 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
945 (counter) = 0; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
946 CDL_FOREACH2(head,el,next) { ++(counter); } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
947 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
948
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
949 #define CDL_FOREACH(head,el) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
950 CDL_FOREACH2(head,el,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
951
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
952 #define CDL_FOREACH2(head,el,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
953 for ((el)=(head);el;(el)=(((el)->next==(head)) ? NULL : (el)->next))
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
954
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
955 #define CDL_FOREACH_SAFE(head,el,tmp1,tmp2) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
956 CDL_FOREACH_SAFE2(head,el,tmp1,tmp2,prev,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
957
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
958 #define CDL_FOREACH_SAFE2(head,el,tmp1,tmp2,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
959 for ((el) = (head), (tmp1) = (head) ? (head)->prev : NULL; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
960 (el) && ((tmp2) = (el)->next, 1); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
961 (el) = ((el) == (tmp1) ? NULL : (tmp2)))
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
962
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
963 #define CDL_SEARCH_SCALAR(head,out,field,val) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
964 CDL_SEARCH_SCALAR2(head,out,field,val,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
965
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
966 #define CDL_SEARCH_SCALAR2(head,out,field,val,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
967 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
968 CDL_FOREACH2(head,out,next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
969 if ((out)->field == (val)) break; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
970 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
971 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
972
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
973 #define CDL_SEARCH(head,out,elt,cmp) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
974 CDL_SEARCH2(head,out,elt,cmp,next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
975
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
976 #define CDL_SEARCH2(head,out,elt,cmp,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
977 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
978 CDL_FOREACH2(head,out,next) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
979 if ((cmp(out,elt))==0) break; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
980 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
981 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
982
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
983 #define CDL_REPLACE_ELEM2(head, el, add, prev, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
984 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
985 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
986 assert((el) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
987 assert((add) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
988 if ((el)->next == (el)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
989 (add)->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
990 (add)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
991 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
992 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
993 (add)->next = (el)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
994 (add)->prev = (el)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
995 (add)->next->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
996 (add)->prev->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
997 if ((head) == (el)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
998 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
999 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1000 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1001 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1002
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1003 #define CDL_REPLACE_ELEM(head, el, add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1004 CDL_REPLACE_ELEM2(head, el, add, prev, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1005
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1006 #define CDL_PREPEND_ELEM2(head, el, add, prev, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1007 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1008 if (el) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1009 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1010 assert((add) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1011 (add)->next = (el); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1012 (add)->prev = (el)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1013 (el)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1014 (add)->prev->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1015 if ((head) == (el)) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1016 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1017 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1018 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1019 CDL_APPEND2(head, add, prev, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1020 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1021 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1022
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1023 #define CDL_PREPEND_ELEM(head, el, add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1024 CDL_PREPEND_ELEM2(head, el, add, prev, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1025
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1026 #define CDL_APPEND_ELEM2(head, el, add, prev, next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1027 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1028 if (el) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1029 assert((head) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1030 assert((add) != NULL); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1031 (add)->next = (el)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1032 (add)->prev = (el); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1033 (el)->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1034 (add)->next->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1035 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1036 CDL_PREPEND2(head, add, prev, next); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1037 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1038 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1039
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1040 #define CDL_APPEND_ELEM(head, el, add) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1041 CDL_APPEND_ELEM2(head, el, add, prev, next)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1042
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1043 #ifdef NO_DECLTYPE
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1044 /* Here are VS2008 / NO_DECLTYPE replacements for a few functions */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1045
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1046 #undef CDL_INSERT_INORDER2
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1047 #define CDL_INSERT_INORDER2(head,add,cmp,prev,next) \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1048 do { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1049 if ((head) == NULL) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1050 (add)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1051 (add)->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1052 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1053 } else if ((cmp(head, add)) >= 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1054 (add)->prev = (head)->prev; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1055 (add)->next = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1056 (add)->prev->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1057 (head)->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1058 (head) = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1059 } else { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1060 char *_tmp = (char*)(head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1061 while ((char*)(head)->next != _tmp && (cmp((head)->next, add)) < 0) { \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1062 (head) = (head)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1063 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1064 (add)->prev = (head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1065 (add)->next = (head)->next; \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1066 (add)->next->prev = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1067 (head)->next = (add); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1068 UTLIST_RS(head); \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1069 } \
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1070 } while (0)
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1071 #endif /* NO_DECLTYPE */
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1072
f9e85d0aca74 rpg: introduce private loader_file to help allocating map/tileset
David Demelier <markand@malikania.fr>
parents:
diff changeset
1073 #endif /* UTLIST_H */