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"
30 struct mala_stringlistnode_struct
32 CIRCLEQ_ENTRY(mala_stringlistnode_struct
) node
;
37 #define MALA_STATIC_STRINGLIST_INIT(args...) \
38 (const char*[]){args, NULL}
42 mala_stringlist_init (MalaStringList self
);
45 static inline MalaStringListNode
46 mala_stringlist_head (MalaStringList self
);
49 mala_stringlist_fwd (MalaStringListNode_ref self
);
53 mala_stringlist_new ();
56 mala_stringlist_new_cstrs (const char **cstrs
,
58 MalaStringBucket bucket
);
61 mala_stringlist_erase (MalaStringList head
);
64 mala_stringlist_free (MalaStringList head
);
67 mala_stringlist_factory (MalaStringList_ref dest
, const char** src
, MalaStringBucket bucket
);
70 mala_stringlist_head_new (MalaStringList head
, MalaString str
);
73 mala_stringlist_tail_new (MalaStringList head
, MalaString str
);
76 mala_stringlist_head_new_cstr (MalaStringList head
, const char * cstr
, MalaStringBucket bucket
);
79 mala_stringlist_tail_new_cstr (MalaStringList head
, const char * cstr
, MalaStringBucket bucket
);
82 mala_stringlist_tail_insert (MalaStringList head
, MalaStringListNode self
);
85 //mala_stringlist_tail_move (MalaStringList to, MalaStringList from, MalaStringListNode self);
88 mala_stringlist_after_new (MalaStringList head
,
89 MalaStringListNode pred
,
93 mala_stringlist_before_new (MalaStringList head
,
94 MalaStringListNode succ
,
99 mala_stringlist_elem_remove (MalaStringList head
,
100 MalaStringListNode elem
);
103 mala_stringlist_elem_delete (MalaStringList head
, MalaStringListNode_ref elem
);
106 mala_stringlist_is_tail (MalaStringList head
, MalaStringListNode elem
);
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,
126 static inline int mala_stringlist_new_before (MalaStringList head,
127 MalaStringListNode succ,
132 static inline MalaStringListNode mala_stringlist_head_new_cstr (MalaStringList head,
134 static inline MalaStringListNode mala_stringlist_tail_new_cstr (MalaStringList head,
144 mala_stringlist_insert_after (MalaStringList head
,
145 MalaStringListNode pred
,
149 CIRCLEQ_INSERT_AFTER(head
, TYPE
*listelm
, TYPE
*elm
, CIRCLEQ_ENTRY NAME
);
153 mala_stringlist_insert_before (MalaStringList head
,
154 MalaStringListNode succ
,
157 CIRCLEQ_INSERT_BEFORE(CIRCLEQ_HEAD
*head
, TYPE
*listelm
, TYPE
*elm
, CIRCLEQ_ENTRY NAME
);
160 mala_stringlist_insert_head (MalaStringList head
, MalaString str
)
161 CIRCLEQ_INSERT_HEAD(CIRCLEQ_HEAD
*head
, TYPE
*elm
, CIRCLEQ_ENTRY NAME
);
167 static inline MalaStringListNode
168 mala_stringlist_node_remove (MalaStringList head
, MalaStringListNode self
)
170 CIRCLEQ_REMOVE (head
, self
, node
);
175 mala_stringlist_tail_insert (MalaStringList head
, MalaStringListNode self
)
177 CIRCLEQ_INSERT_TAIL (head
, self
, node
);
182 mala_stringlist_is_empty (MalaStringList head
)
184 return head
->cqh_first
== (void *)head
;
188 mala_stringlist_fwd (MalaStringListNode_ref self
)
190 *self
= (*self
)->node
.cqe_next
;
194 mala_stringlist_init (MalaStringList self
)
198 static inline MalaStringListNode
199 mala_stringlist_head (MalaStringList self
)
201 return self
->cqh_first
;
205 mala_stringlist_is_tail (MalaStringList head
, MalaStringListNode elem
)
207 return elem
->node
.cqe_next
== (void *)head
;
211 #endif /* MALA_STRINGLIST_H */
216 // c-file-style: "gnu"
218 // arch-tag: 44b2b6d9-80b8-43fa-938a-a492bd52cea2