new action construction with seperate brief and help parsers
[mala.git] / engine / stringlist.h
blob8fffbfd0a4c9c0e7dff70615d7c676d7dabf034b
1 /*
2 stringlist.h - MaLa stringlists
4 Copyright (C) 2004, 2005, Christian Thaeter <chth@gmx.net>
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License version 2 as
8 published by the Free Software Foundation.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, contact me.
20 #ifndef MALA_STRINGLIST_H
21 #define MALA_STRINGLIST_H
23 #include "mala_types.h"
24 #include "strings.h"
27 * StringList
30 struct mala_stringlistnode_struct
32 CIRCLEQ_ENTRY(mala_stringlistnode_struct) node;
33 MalaString string;
37 #define MALA_STATIC_STRINGLIST_INIT(args...) \
38 (const char*[]){args, NULL}
41 static inline void
42 mala_stringlist_init (MalaStringList self);
45 static inline MalaStringListNode
46 mala_stringlist_head (MalaStringList self);
48 static inline void
49 mala_stringlist_fwd (MalaStringListNode_ref self);
52 MalaStringList
53 mala_stringlist_new ();
55 MalaStringList
56 mala_stringlist_new_cstrs (const char **cstrs,
57 ssize_t nelem,
58 MalaStringBucket bucket);
60 void
61 mala_stringlist_erase (MalaStringList head);
63 void
64 mala_stringlist_free (MalaStringList head);
66 void *
67 mala_stringlist_factory (MalaStringList_ref dest, const char** src, MalaStringBucket bucket);
69 MalaStringListNode
70 mala_stringlist_head_new (MalaStringList head, MalaString str);
72 MalaStringListNode
73 mala_stringlist_tail_new (MalaStringList head, MalaString str);
75 MalaStringListNode
76 mala_stringlist_head_new_cstr (MalaStringList head, const char * cstr, MalaStringBucket bucket);
78 MalaStringListNode
79 mala_stringlist_tail_new_cstr (MalaStringList head, const char * cstr, MalaStringBucket bucket);
81 static inline void
82 mala_stringlist_tail_insert (MalaStringList head, MalaStringListNode self);
84 //static inline void
85 //mala_stringlist_tail_move (MalaStringList to, MalaStringList from, MalaStringListNode self);
87 MalaStringListNode
88 mala_stringlist_after_new (MalaStringList head,
89 MalaStringListNode pred,
90 MalaString str);
92 MalaStringListNode
93 mala_stringlist_before_new (MalaStringList head,
94 MalaStringListNode succ,
95 MalaString str);
98 MalaStringListNode
99 mala_stringlist_elem_remove (MalaStringList head,
100 MalaStringListNode elem);
102 void
103 mala_stringlist_elem_delete (MalaStringList head, MalaStringListNode_ref elem);
105 static inline int
106 mala_stringlist_is_tail (MalaStringList head, MalaStringListNode elem);
108 static inline int
109 mala_stringlist_is_empty (MalaStringList head);
111 static inline MalaStringListNode
112 mala_stringlist_node_remove (MalaStringList head, MalaStringListNode self);
116 static inline int mala_stringlist_insert_before (MalaStringList head,
117 MalaStringListNode succ,
118 MalaStringListNode elem);
119 static inline int mala_stringlist_insert_head (MalaStringList head, MalaStringListNode elem);
120 static inline int mala_stringlist_insert_tail (MalaStringList head, MalaStringListNode elem);
123 static inline int mala_stringlist_new_after (MalaStringList head,
124 MalaStringListNode pred,
125 MalaString str);
126 static inline int mala_stringlist_new_before (MalaStringList head,
127 MalaStringListNode succ,
128 MalaString str);
132 static inline MalaStringListNode mala_stringlist_head_new_cstr (MalaStringList head,
133 const char * cstr);
134 static inline MalaStringListNode mala_stringlist_tail_new_cstr (MalaStringList head,
135 const char * cstr);
140 * Inlines
142 #if 0
143 static inline void
144 mala_stringlist_insert_after (MalaStringList head,
145 MalaStringListNode pred,
146 MalaString str)
149 CIRCLEQ_INSERT_AFTER(head, TYPE *listelm, TYPE *elm, CIRCLEQ_ENTRY NAME);
152 static inline void
153 mala_stringlist_insert_before (MalaStringList head,
154 MalaStringListNode succ,
155 MalaString str)
157 CIRCLEQ_INSERT_BEFORE(CIRCLEQ_HEAD *head, TYPE *listelm, TYPE *elm, CIRCLEQ_ENTRY NAME);
159 static inline void
160 mala_stringlist_insert_head (MalaStringList head, MalaString str)
161 CIRCLEQ_INSERT_HEAD(CIRCLEQ_HEAD *head, TYPE *elm, CIRCLEQ_ENTRY NAME);
163 #endif
165 /* statics */
167 static inline MalaStringListNode
168 mala_stringlist_node_remove (MalaStringList head, MalaStringListNode self)
170 CIRCLEQ_REMOVE (head, self, node);
171 return self;
174 static inline void
175 mala_stringlist_tail_insert (MalaStringList head, MalaStringListNode self)
177 CIRCLEQ_INSERT_TAIL (head, self, node);
181 static inline int
182 mala_stringlist_is_empty (MalaStringList head)
184 return head->cqh_first == (void *)head;
187 static inline void
188 mala_stringlist_fwd (MalaStringListNode_ref self)
190 *self = (*self)->node.cqe_next;
193 static inline void
194 mala_stringlist_init (MalaStringList self)
196 CIRCLEQ_INIT(self);
198 static inline MalaStringListNode
199 mala_stringlist_head (MalaStringList self)
201 return self->cqh_first;
204 static inline int
205 mala_stringlist_is_tail (MalaStringList head, MalaStringListNode elem)
207 return elem->node.cqe_next == (void *)head;
211 #endif /* MALA_STRINGLIST_H */
214 // Local Variables:
215 // mode: C
216 // c-file-style: "gnu"
217 // End:
218 // arch-tag: 44b2b6d9-80b8-43fa-938a-a492bd52cea2
219 // end_of_file