Removed unused K parameters from macros that are not associative containers
This commit is contained in:
1 parent
904cc5b69b
commit
f4440d6833
19 files changed
+286
-285
No files matched your search
+1
-1
@@ -6,7 +6,7 @@ static int intcmp(int a, int b)
|
|||||||
return a - b;
|
return a - b;
|
||||||
}
|
}
|
||||||
|
|
||||||
HEAP_GENERATE(h, heap, static, , int)
|
HEAP_GENERATE(h, heap, static, int)
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "../src/linkedlist.h"
|
#include "../src/linkedlist.h"
|
||||||
|
|
||||||
LINKEDLIST_GENERATE(l, list, , , int)
|
LINKEDLIST_GENERATE(l, list, , int)
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "../src/treeset.h"
|
#include "../src/treeset.h"
|
||||||
|
|
||||||
TREESET_GENERATE(set, set, , , int)
|
TREESET_GENERATE(set, set, , int)
|
||||||
|
|
||||||
void print_tree(set_node *root, int height)
|
void print_tree(set_node *root, int height)
|
||||||
{
|
{
|
||||||
|
|||||||
+33
-32
@@ -17,47 +17,48 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#define DEQUE_GENERATE(PFX, SNAME, FMOD, K, V) \
|
#define DEQUE_GENERATE(PFX, SNAME, FMOD, V) \
|
||||||
DEQUE_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
DEQUE_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
DEQUE_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
DEQUE_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
DEQUE_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
DEQUE_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
|
|
||||||
/* PRIVATE *******************************************************************/
|
/* PRIVATE *******************************************************************/
|
||||||
#define DEQUE_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define DEQUE_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
DEQUE_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
DEQUE_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define DEQUE_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define DEQUE_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
DEQUE_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
DEQUE_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
DEQUE_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
DEQUE_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* PUBLIC ********************************************************************/
|
/* PUBLIC ********************************************************************/
|
||||||
#define DEQUE_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define DEQUE_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
DEQUE_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
DEQUE_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
DEQUE_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
DEQUE_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define DEQUE_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define DEQUE_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
DEQUE_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
DEQUE_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* STRUCT ********************************************************************/
|
/* STRUCT ********************************************************************/
|
||||||
#define DEQUE_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
#define DEQUE_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
struct SNAME##_s \
|
struct SNAME##_s \
|
||||||
{ \
|
{ \
|
||||||
V *buffer; \
|
V *buffer; \
|
||||||
size_t capacity; \
|
size_t capacity; \
|
||||||
size_t count; \
|
size_t count; \
|
||||||
size_t front; \
|
size_t front; \
|
||||||
size_t rear; \
|
size_t rear; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
struct SNAME##_iter_s \
|
struct SNAME##_iter_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_s *target; \
|
struct SNAME##_s *target; \
|
||||||
size_t cursor; \
|
size_t cursor; \
|
||||||
size_t count; \
|
size_t count; \
|
||||||
bool start; \
|
bool start; \
|
||||||
bool end; \
|
bool end; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
/* HEADER ********************************************************************/
|
/* HEADER ********************************************************************/
|
||||||
#define DEQUE_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
#define DEQUE_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
typedef struct SNAME##_s SNAME; \
|
typedef struct SNAME##_s SNAME; \
|
||||||
typedef struct SNAME##_iter_s SNAME##_iter; \
|
typedef struct SNAME##_iter_s SNAME##_iter; \
|
||||||
@@ -88,7 +89,7 @@
|
|||||||
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
||||||
\
|
\
|
||||||
/* SOURCE ********************************************************************/
|
/* SOURCE ********************************************************************/
|
||||||
#define DEQUE_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V) \
|
#define DEQUE_GENERATE_SOURCE(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
FMOD bool PFX##_grow(SNAME *_deque_); \
|
FMOD bool PFX##_grow(SNAME *_deque_); \
|
||||||
\
|
\
|
||||||
|
|||||||
+42
-42
@@ -39,56 +39,56 @@ static const size_t cmc_hashtable_primes[] = {53, 97, 193, 389, 769, 1543, 3079,
|
|||||||
|
|
||||||
#endif /* CMC_HASH_TABLE_SETUP */
|
#endif /* CMC_HASH_TABLE_SETUP */
|
||||||
|
|
||||||
#define HASHSET_GENERATE(PFX, SNAME, FMOD, K, V) \
|
#define HASHSET_GENERATE(PFX, SNAME, FMOD, V) \
|
||||||
HASHSET_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
HASHSET_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
HASHSET_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
HASHSET_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
HASHSET_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
HASHSET_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
|
|
||||||
/* PRIVATE *******************************************************************/
|
/* PRIVATE *******************************************************************/
|
||||||
#define HASHSET_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define HASHSET_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
HASHSET_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
HASHSET_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define HASHSET_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define HASHSET_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
HASHSET_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
HASHSET_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
HASHSET_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
HASHSET_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* PUBLIC ********************************************************************/
|
/* PUBLIC ********************************************************************/
|
||||||
#define HASHSET_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define HASHSET_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
HASHSET_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
HASHSET_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
HASHSET_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
HASHSET_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define HASHSET_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define HASHSET_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
HASHSET_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
HASHSET_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* STRUCT ********************************************************************/
|
/* STRUCT ********************************************************************/
|
||||||
#define HASHSET_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
#define HASHSET_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
struct SNAME##_s \
|
struct SNAME##_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_entry_s *buffer; \
|
struct SNAME##_entry_s *buffer; \
|
||||||
size_t capacity; \
|
size_t capacity; \
|
||||||
size_t count; \
|
size_t count; \
|
||||||
double load; \
|
double load; \
|
||||||
int (*cmp)(V, V); \
|
int (*cmp)(V, V); \
|
||||||
size_t (*hash)(V); \
|
size_t (*hash)(V); \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
struct SNAME##_entry_s \
|
struct SNAME##_entry_s \
|
||||||
{ \
|
{ \
|
||||||
V value; \
|
V value; \
|
||||||
size_t dist; \
|
size_t dist; \
|
||||||
enum EntryState_e state; \
|
enum EntryState_e state; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
struct SNAME##_iter_s \
|
struct SNAME##_iter_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_s *target; \
|
struct SNAME##_s *target; \
|
||||||
size_t cursor; \
|
size_t cursor; \
|
||||||
size_t index; \
|
size_t index; \
|
||||||
size_t first; \
|
size_t first; \
|
||||||
size_t last; \
|
size_t last; \
|
||||||
bool start; \
|
bool start; \
|
||||||
bool end; \
|
bool end; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
/* HEADER ********************************************************************/
|
/* HEADER ********************************************************************/
|
||||||
#define HASHSET_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
#define HASHSET_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
typedef struct SNAME##_s SNAME; \
|
typedef struct SNAME##_s SNAME; \
|
||||||
typedef struct SNAME##_entry_s SNAME##_entry; \
|
typedef struct SNAME##_entry_s SNAME##_entry; \
|
||||||
@@ -119,7 +119,7 @@ static const size_t cmc_hashtable_primes[] = {53, 97, 193, 389, 769, 1543, 3079,
|
|||||||
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
||||||
\
|
\
|
||||||
/* SOURCE ********************************************************************/
|
/* SOURCE ********************************************************************/
|
||||||
#define HASHSET_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V) \
|
#define HASHSET_GENERATE_SOURCE(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
FMOD bool PFX##_grow(SNAME *_set_); \
|
FMOD bool PFX##_grow(SNAME *_set_); \
|
||||||
FMOD SNAME##_entry *PFX##_get_entry(SNAME *_set_, V element); \
|
FMOD SNAME##_entry *PFX##_get_entry(SNAME *_set_, V element); \
|
||||||
|
|||||||
+31
-31
@@ -25,45 +25,45 @@ typedef enum HeapOrder
|
|||||||
MinHeap = -1
|
MinHeap = -1
|
||||||
} HeapOrder;
|
} HeapOrder;
|
||||||
|
|
||||||
#define HEAP_GENERATE(PFX, SNAME, FMOD, K, V) \
|
#define HEAP_GENERATE(PFX, SNAME, FMOD, V) \
|
||||||
HEAP_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
HEAP_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
HEAP_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
HEAP_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
HEAP_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
HEAP_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
|
|
||||||
/* PRIVATE *******************************************************************/
|
/* PRIVATE *******************************************************************/
|
||||||
#define HEAP_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define HEAP_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
HEAP_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
HEAP_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define HEAP_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define HEAP_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
HEAP_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
HEAP_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
HEAP_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
HEAP_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* PUBLIC ********************************************************************/
|
/* PUBLIC ********************************************************************/
|
||||||
#define HEAP_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define HEAP_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
HEAP_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
HEAP_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
HEAP_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
HEAP_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define HEAP_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define HEAP_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
HEAP_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
HEAP_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* STRUCT ********************************************************************/
|
/* STRUCT ********************************************************************/
|
||||||
#define HEAP_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
#define HEAP_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
struct SNAME##_s \
|
struct SNAME##_s \
|
||||||
{ \
|
{ \
|
||||||
V *buffer; \
|
V *buffer; \
|
||||||
size_t capacity; \
|
size_t capacity; \
|
||||||
size_t count; \
|
size_t count; \
|
||||||
enum HeapOrder HO; \
|
enum HeapOrder HO; \
|
||||||
int (*cmp)(V, V); \
|
int (*cmp)(V, V); \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
struct SNAME##_iter_s \
|
struct SNAME##_iter_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_s *target; \
|
struct SNAME##_s *target; \
|
||||||
size_t cursor; \
|
size_t cursor; \
|
||||||
bool start; \
|
bool start; \
|
||||||
bool end; \
|
bool end; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
/* HEADER ********************************************************************/
|
/* HEADER ********************************************************************/
|
||||||
#define HEAP_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
#define HEAP_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
typedef struct SNAME##_s SNAME; \
|
typedef struct SNAME##_s SNAME; \
|
||||||
typedef struct SNAME##_iter_s SNAME##_iter; \
|
typedef struct SNAME##_iter_s SNAME##_iter; \
|
||||||
@@ -89,7 +89,7 @@ typedef enum HeapOrder
|
|||||||
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
||||||
\
|
\
|
||||||
/* SOURCE ********************************************************************/
|
/* SOURCE ********************************************************************/
|
||||||
#define HEAP_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V) \
|
#define HEAP_GENERATE_SOURCE(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
FMOD bool PFX##_grow(SNAME *_heap_); \
|
FMOD bool PFX##_grow(SNAME *_heap_); \
|
||||||
FMOD size_t PFX##_p(size_t index); \
|
FMOD size_t PFX##_p(size_t index); \
|
||||||
|
|||||||
+38
-38
@@ -18,52 +18,52 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define LINKEDLIST_GENERATE(PFX, SNAME, FMOD, K, V) \
|
#define LINKEDLIST_GENERATE(PFX, SNAME, FMOD, V) \
|
||||||
LINKEDLIST_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
LINKEDLIST_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
LINKEDLIST_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
LINKEDLIST_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
LINKEDLIST_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
LINKEDLIST_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
|
|
||||||
/* PRIVATE *******************************************************************/
|
/* PRIVATE *******************************************************************/
|
||||||
#define LINKEDLIST_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define LINKEDLIST_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
LINKEDLIST_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
LINKEDLIST_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define LINKEDLIST_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define LINKEDLIST_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
LINKEDLIST_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
LINKEDLIST_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
LINKEDLIST_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
LINKEDLIST_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* PUBLIC ********************************************************************/
|
/* PUBLIC ********************************************************************/
|
||||||
#define LINKEDLIST_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define LINKEDLIST_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
LINKEDLIST_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
LINKEDLIST_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
LINKEDLIST_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
LINKEDLIST_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define LINKEDLIST_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define LINKEDLIST_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
LINKEDLIST_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
LINKEDLIST_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* STRUCT ********************************************************************/
|
/* STRUCT ********************************************************************/
|
||||||
#define LINKEDLIST_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
#define LINKEDLIST_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
struct SNAME##_s \
|
struct SNAME##_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_node_s *head; \
|
struct SNAME##_node_s *head; \
|
||||||
struct SNAME##_node_s *tail; \
|
struct SNAME##_node_s *tail; \
|
||||||
size_t count; \
|
size_t count; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
struct SNAME##_node_s \
|
struct SNAME##_node_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_s *owner; \
|
struct SNAME##_s *owner; \
|
||||||
struct SNAME##_node_s *next; \
|
struct SNAME##_node_s *next; \
|
||||||
struct SNAME##_node_s *prev; \
|
struct SNAME##_node_s *prev; \
|
||||||
V data; \
|
V data; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
struct SNAME##_iter_s \
|
struct SNAME##_iter_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_s *target; \
|
struct SNAME##_s *target; \
|
||||||
struct SNAME##_node_s *cursor; \
|
struct SNAME##_node_s *cursor; \
|
||||||
size_t index; \
|
size_t index; \
|
||||||
bool start; \
|
bool start; \
|
||||||
bool end; \
|
bool end; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
/* HEADER ********************************************************************/
|
/* HEADER ********************************************************************/
|
||||||
#define LINKEDLIST_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
#define LINKEDLIST_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
typedef struct SNAME##_s SNAME; \
|
typedef struct SNAME##_s SNAME; \
|
||||||
typedef struct SNAME##_node_s SNAME##_node; \
|
typedef struct SNAME##_node_s SNAME##_node; \
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
||||||
\
|
\
|
||||||
/* SOURCE ********************************************************************/
|
/* SOURCE ********************************************************************/
|
||||||
#define LINKEDLIST_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V) \
|
#define LINKEDLIST_GENERATE_SOURCE(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
FMOD SNAME *PFX##_new(void) \
|
FMOD SNAME *PFX##_new(void) \
|
||||||
{ \
|
{ \
|
||||||
|
|||||||
+29
-29
@@ -19,43 +19,43 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define LIST_GENERATE(PFX, SNAME, FMOD, K, V) \
|
#define LIST_GENERATE(PFX, SNAME, FMOD, V) \
|
||||||
LIST_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
LIST_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
LIST_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
LIST_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
LIST_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
LIST_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
|
|
||||||
/* PRIVATE *******************************************************************/
|
/* PRIVATE *******************************************************************/
|
||||||
#define LIST_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define LIST_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
LIST_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
LIST_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define LIST_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define LIST_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
LIST_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
LIST_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
LIST_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
LIST_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* PUBLIC ********************************************************************/
|
/* PUBLIC ********************************************************************/
|
||||||
#define LIST_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define LIST_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
LIST_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
LIST_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
LIST_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
LIST_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define LIST_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define LIST_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
LIST_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
LIST_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* STRUCT ********************************************************************/
|
/* STRUCT ********************************************************************/
|
||||||
#define LIST_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
#define LIST_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
struct SNAME##_s \
|
struct SNAME##_s \
|
||||||
{ \
|
{ \
|
||||||
V *buffer; \
|
V *buffer; \
|
||||||
size_t capacity; \
|
size_t capacity; \
|
||||||
size_t count; \
|
size_t count; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
struct SNAME##_iter_s \
|
struct SNAME##_iter_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_s *target; \
|
struct SNAME##_s *target; \
|
||||||
size_t cursor; \
|
size_t cursor; \
|
||||||
bool start; \
|
bool start; \
|
||||||
bool end; \
|
bool end; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
/* HEADER ********************************************************************/
|
/* HEADER ********************************************************************/
|
||||||
#define LIST_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
#define LIST_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
typedef struct SNAME##_s SNAME; \
|
typedef struct SNAME##_s SNAME; \
|
||||||
typedef struct SNAME##_iter_s SNAME##_iter; \
|
typedef struct SNAME##_iter_s SNAME##_iter; \
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
||||||
\
|
\
|
||||||
/* SOURCE ********************************************************************/
|
/* SOURCE ********************************************************************/
|
||||||
#define LIST_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V) \
|
#define LIST_GENERATE_SOURCE(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
FMOD bool PFX##_grow(SNAME *_list_); \
|
FMOD bool PFX##_grow(SNAME *_list_); \
|
||||||
\
|
\
|
||||||
|
|||||||
+32
-32
@@ -19,46 +19,46 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define QUEUE_GENERATE(PFX, SNAME, FMOD, K, V) \
|
#define QUEUE_GENERATE(PFX, SNAME, FMOD, V) \
|
||||||
QUEUE_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
QUEUE_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
QUEUE_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
QUEUE_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
QUEUE_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
QUEUE_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
|
|
||||||
/* PRIVATE *******************************************************************/
|
/* PRIVATE *******************************************************************/
|
||||||
#define QUEUE_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define QUEUE_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
QUEUE_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
QUEUE_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define QUEUE_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define QUEUE_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
QUEUE_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
QUEUE_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
QUEUE_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
QUEUE_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* PUBLIC ********************************************************************/
|
/* PUBLIC ********************************************************************/
|
||||||
#define QUEUE_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define QUEUE_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
QUEUE_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
QUEUE_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
QUEUE_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
QUEUE_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define QUEUE_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define QUEUE_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
QUEUE_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
QUEUE_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* STRUCT ********************************************************************/
|
/* STRUCT ********************************************************************/
|
||||||
#define QUEUE_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
#define QUEUE_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
struct SNAME##_s \
|
struct SNAME##_s \
|
||||||
{ \
|
{ \
|
||||||
V *buffer; \
|
V *buffer; \
|
||||||
size_t capacity; \
|
size_t capacity; \
|
||||||
size_t count; \
|
size_t count; \
|
||||||
size_t front; \
|
size_t front; \
|
||||||
size_t rear; \
|
size_t rear; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
struct SNAME##_iter_s \
|
struct SNAME##_iter_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_s *target; \
|
struct SNAME##_s *target; \
|
||||||
size_t cursor; \
|
size_t cursor; \
|
||||||
size_t count; \
|
size_t count; \
|
||||||
bool start; \
|
bool start; \
|
||||||
bool end; \
|
bool end; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
/* HEADER ********************************************************************/
|
/* HEADER ********************************************************************/
|
||||||
#define QUEUE_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
#define QUEUE_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
typedef struct SNAME##_s SNAME; \
|
typedef struct SNAME##_s SNAME; \
|
||||||
typedef struct SNAME##_iter_s SNAME##_iter; \
|
typedef struct SNAME##_iter_s SNAME##_iter; \
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
||||||
\
|
\
|
||||||
/* SOURCE ********************************************************************/
|
/* SOURCE ********************************************************************/
|
||||||
#define QUEUE_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V) \
|
#define QUEUE_GENERATE_SOURCE(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
FMOD bool PFX##_grow(SNAME *_queue_); \
|
FMOD bool PFX##_grow(SNAME *_queue_); \
|
||||||
\
|
\
|
||||||
|
|||||||
+29
-29
@@ -19,43 +19,43 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define STACK_GENERATE(PFX, SNAME, FMOD, K, V) \
|
#define STACK_GENERATE(PFX, SNAME, FMOD, V) \
|
||||||
STACK_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
STACK_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
STACK_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
STACK_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
STACK_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
STACK_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
|
|
||||||
/* PRIVATE *******************************************************************/
|
/* PRIVATE *******************************************************************/
|
||||||
#define STACK_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define STACK_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
STACK_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
STACK_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define STACK_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define STACK_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
STACK_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
STACK_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
STACK_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
STACK_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* PUBLIC ********************************************************************/
|
/* PUBLIC ********************************************************************/
|
||||||
#define STACK_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define STACK_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
STACK_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
STACK_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
STACK_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
STACK_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define STACK_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define STACK_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
STACK_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
STACK_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* STRUCT ********************************************************************/
|
/* STRUCT ********************************************************************/
|
||||||
#define STACK_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
#define STACK_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
struct SNAME##_s \
|
struct SNAME##_s \
|
||||||
{ \
|
{ \
|
||||||
V *buffer; \
|
V *buffer; \
|
||||||
size_t capacity; \
|
size_t capacity; \
|
||||||
size_t count; \
|
size_t count; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
struct SNAME##_iter_s \
|
struct SNAME##_iter_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_s *target; \
|
struct SNAME##_s *target; \
|
||||||
size_t cursor; \
|
size_t cursor; \
|
||||||
bool start; \
|
bool start; \
|
||||||
bool end; \
|
bool end; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
/* HEADER ********************************************************************/
|
/* HEADER ********************************************************************/
|
||||||
#define STACK_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
#define STACK_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
typedef struct SNAME##_s SNAME; \
|
typedef struct SNAME##_s SNAME; \
|
||||||
typedef struct SNAME##_iter_s SNAME##_iter; \
|
typedef struct SNAME##_iter_s SNAME##_iter; \
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
||||||
\
|
\
|
||||||
/* SOURCE ********************************************************************/
|
/* SOURCE ********************************************************************/
|
||||||
#define STACK_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V) \
|
#define STACK_GENERATE_SOURCE(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
FMOD bool PFX##_grow(SNAME *_stack_); \
|
FMOD bool PFX##_grow(SNAME *_stack_); \
|
||||||
\
|
\
|
||||||
|
|||||||
+41
-41
@@ -18,55 +18,55 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#define TREESET_GENERATE(PFX, SNAME, FMOD, K, V) \
|
#define TREESET_GENERATE(PFX, SNAME, FMOD, V) \
|
||||||
TREESET_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
TREESET_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
TREESET_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
TREESET_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
TREESET_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
TREESET_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
|
|
||||||
/* PRIVATE *******************************************************************/
|
/* PRIVATE *******************************************************************/
|
||||||
#define TREESET_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define TREESET_GENERATE_HEADER_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
TREESET_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
TREESET_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define TREESET_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
#define TREESET_GENERATE_SOURCE_PRIVATE(PFX, SNAME, FMOD, K, V) \
|
||||||
TREESET_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
TREESET_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
TREESET_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
TREESET_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* PUBLIC ********************************************************************/
|
/* PUBLIC ********************************************************************/
|
||||||
#define TREESET_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define TREESET_GENERATE_HEADER_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
TREESET_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
TREESET_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
TREESET_GENERATE_HEADER(PFX, SNAME, FMOD, K, V)
|
TREESET_GENERATE_HEADER(PFX, SNAME, FMOD, V)
|
||||||
#define TREESET_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
#define TREESET_GENERATE_SOURCE_PUBLIC(PFX, SNAME, FMOD, K, V) \
|
||||||
TREESET_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V)
|
TREESET_GENERATE_SOURCE(PFX, SNAME, FMOD, V)
|
||||||
/* STRUCT ********************************************************************/
|
/* STRUCT ********************************************************************/
|
||||||
#define TREESET_GENERATE_STRUCT(PFX, SNAME, FMOD, K, V) \
|
#define TREESET_GENERATE_STRUCT(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
struct SNAME##_s \
|
struct SNAME##_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_node_s *root; \
|
struct SNAME##_node_s *root; \
|
||||||
size_t count; \
|
size_t count; \
|
||||||
int (*cmp)(V, V); \
|
int (*cmp)(V, V); \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
struct SNAME##_node_s \
|
struct SNAME##_node_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_node_s *right; \
|
struct SNAME##_node_s *right; \
|
||||||
struct SNAME##_node_s *left; \
|
struct SNAME##_node_s *left; \
|
||||||
struct SNAME##_node_s *parent; \
|
struct SNAME##_node_s *parent; \
|
||||||
unsigned char height; \
|
unsigned char height; \
|
||||||
V key; \
|
V key; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
struct SNAME##_iter_s \
|
struct SNAME##_iter_s \
|
||||||
{ \
|
{ \
|
||||||
struct SNAME##_s *target; \
|
struct SNAME##_s *target; \
|
||||||
struct SNAME##_node_s *cursor; \
|
struct SNAME##_node_s *cursor; \
|
||||||
struct SNAME##_node_s *first; \
|
struct SNAME##_node_s *first; \
|
||||||
struct SNAME##_node_s *last; \
|
struct SNAME##_node_s *last; \
|
||||||
size_t index; \
|
size_t index; \
|
||||||
bool start; \
|
bool start; \
|
||||||
bool end; \
|
bool end; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
/* HEADER ********************************************************************/
|
/* HEADER ********************************************************************/
|
||||||
#define TREESET_GENERATE_HEADER(PFX, SNAME, FMOD, K, V) \
|
#define TREESET_GENERATE_HEADER(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
typedef struct SNAME##_s SNAME; \
|
typedef struct SNAME##_s SNAME; \
|
||||||
typedef struct SNAME##_node_s SNAME##_node; \
|
typedef struct SNAME##_node_s SNAME##_node; \
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
FMOD bool PFX##_iter_prev(SNAME##_iter *iter, V *result, size_t *index); \
|
||||||
\
|
\
|
||||||
/* SOURCE ********************************************************************/
|
/* SOURCE ********************************************************************/
|
||||||
#define TREESET_GENERATE_SOURCE(PFX, SNAME, FMOD, K, V) \
|
#define TREESET_GENERATE_SOURCE(PFX, SNAME, FMOD, V) \
|
||||||
\
|
\
|
||||||
FMOD SNAME##_node *PFX##_new_node(V element); \
|
FMOD SNAME##_node *PFX##_new_node(V element); \
|
||||||
FMOD SNAME##_node *PFX##_get_node(SNAME *_set_, V element); \
|
FMOD SNAME##_node *PFX##_get_node(SNAME *_set_, V element); \
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "../../src/deque.h"
|
#include "../../src/deque.h"
|
||||||
|
|
||||||
DEQUE_GENERATE(d, deque, static, , int)
|
DEQUE_GENERATE(d, deque, static, int)
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "../../src/hashset.h"
|
#include "../../src/hashset.h"
|
||||||
|
|
||||||
HASHSET_GENERATE(hs, hash_set, static, , int)
|
HASHSET_GENERATE(hs, hash_set, static, int)
|
||||||
|
|
||||||
size_t inthash(int t)
|
size_t inthash(int t)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ int intcmp(int a, int b)
|
|||||||
return a - b;
|
return a - b;
|
||||||
}
|
}
|
||||||
|
|
||||||
HEAP_GENERATE(h, heap, static, , int)
|
HEAP_GENERATE(h, heap, static, int)
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "../../src/linkedlist.h"
|
#include "../../src/linkedlist.h"
|
||||||
|
|
||||||
LINKEDLIST_GENERATE(ll, linked, static, , int)
|
LINKEDLIST_GENERATE(ll, linked, static, int)
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "../../src/list.h"
|
#include "../../src/list.h"
|
||||||
|
|
||||||
LIST_GENERATE(l, list, static, , int)
|
LIST_GENERATE(l, list, static, int)
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "../../src/queue.h"
|
#include "../../src/queue.h"
|
||||||
|
|
||||||
QUEUE_GENERATE(q, queue, static, , int)
|
QUEUE_GENERATE(q, queue, static, int)
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "../../src/stack.h"
|
#include "../../src/stack.h"
|
||||||
|
|
||||||
STACK_GENERATE(s, stack, static, , int)
|
STACK_GENERATE(s, stack, static, int)
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ int intcmp(int a, int b)
|
|||||||
return a - b;
|
return a - b;
|
||||||
}
|
}
|
||||||
|
|
||||||
TREESET_GENERATE(ts, tset, static, , int)
|
TREESET_GENERATE(ts, tset, static, int)
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in new issue
Block a user