![]() |
Yume Project 3.0
Touhou-inspired Danmaku game made in C only
|
#include <assert.h>#include <stdint.h>#include <stdlib.h>#include <stdbool.h>#include "core/macro.h"Aller au code source de ce fichier.
Macros | |
| #define | auto __auto_type |
| #define | DYNAMIC_ARRAY_BASE(type_elem) |
| base d'un tableau dynamique | |
| #define | DYNAMIC_ARRAY(elem_type) |
| Déclaration d'un tableau dynamique. | |
| #define | DYNARRAY_CAST_TO_BASE(darr) |
| Renvoie pointeur vers le tableau générique. | |
| #define | DYNARRAY_ELEM_SIZE(darr) |
| Renvoie la taille d'un élément du tableau. | |
| #define | _dynarray_func(func, darr, ...) |
| "Traducteurs" pour les fonctions dynarray | |
| #define | _dynarray_func_noargs(func, darr) |
| #define | dynarray_free_data(darr) |
| #define | dynarray_ensure_capacity(darr, capacity) |
| #define | dynarray_get_ptr(darr, idx) |
| Renvoie le pointeur vers data[idx]. | |
| #define | _dynarray_append_min_capacity(darr, min_capacity, ...) |
| #define | dynarray_append(darr, ...) |
| #define | dynarray_compact(darr) |
| #define | dynarray_qsort(darr, compare_func) |
| Trie le tableau de data par un qsort. | |
| #define | dynarray_get(darr, idx) |
| Renvoie la valeur de data[idx]. | |
| #define | dynarray_set(darr, idx, ...) |
| Modifie la valeur de data[idx]. | |
| #define | dynarray_set_elements(darr, num_elements, elements) |
| #define | dynarray_filter(darr, predicate, userdata) |
| #define | dynarray_indexof(darr, elem_p) |
| Renvoie l'indice d'elem dans le tableau. | |
| #define | _dynarray_foreach_iter MACRO_ADDLINENUM(dynarray_foreach_iter) |
| Pour créer des variables itérables a priori uniques (sinon les boucles imbriquées flop). | |
| #define | _dynarray_foreach_temp MACRO_ADDLINENUM(dynarray_foreach_temp) |
| #define | dynarray_foreach(darr, var, elem_var, ...) |
| Boucle sur le tableau avec var = id, elem_var = pointeur sur data[idx]. | |
| #define | dynarray_foreach_elem(darr, elem_var, ...) |
| boucle sur le tableau avec elem_var = pointeur sur les éléments | |
| #define | dynarray_foreach_idx(darr, var, ...) |
| boucle sur le tableau avec var = id | |
Définitions de type | |
| typedef uint32_t | dynarray_size_t |
| typedef bool(* | dynarray_filter_t) (const void *elem_p, void *userdata) |
| Fonction qui filtre un tableau. | |
Fonctions | |
| typedef | DYNAMIC_ARRAY_BASE (void) DynamicArray |
| Tableau dynamique générique (data est un pointeur universel). | |
| void | _dynarray_free_data (dynarray_size_t sizeof_element, DynamicArray *darr) |
| Libère la mémoire du data d'un dynarray. | |
| void | _dynarray_ensure_capacity (dynarray_size_t sizeof_element, DynamicArray *darr, dynarray_size_t capacity) |
| Fait en sorte que la capacité du tableau soit au moins capacity. | |
| dynarray_size_t | _dynarray_prepare_append_min_capacity (dynarray_size_t sizeof_element, DynamicArray *darr, dynarray_size_t min_capacity) |
| Vérifie qu'il y a la capacité nécessaire pour append et en alloue si besoin. | |
| void | _dynarray_compact (dynarray_size_t sizeof_element, DynamicArray *darr) |
| Fait en sorte qu'il n'y ait pas de mémoire vide dans data. | |
| void | _dynarray_set_elements (dynarray_size_t sizeof_element, DynamicArray *darr, dynarray_size_t num_elements, void *elements) |
| Rentre un tableau d'elements dans le tableau dynamique. | |
| void | _dynarray_filter (dynarray_size_t sizeof_element, DynamicArray *darr, dynarray_filter_t predicate, void *userdata) |
| Modifie un tableau pour ne garder que les valeurs respectant le filtre. | |
| #define _dynarray_append_min_capacity | ( | darr, | |
| min_capacity, | |||
| ... ) |
| #define _dynarray_foreach_iter MACRO_ADDLINENUM(dynarray_foreach_iter) |
Pour créer des variables itérables a priori uniques (sinon les boucles imbriquées flop).
| #define _dynarray_foreach_temp MACRO_ADDLINENUM(dynarray_foreach_temp) |
| #define _dynarray_func | ( | func, | |
| darr, | |||
| ... ) |
"Traducteurs" pour les fonctions dynarray
Comme a chaque fois il faut passer en param la taille d'un element et le pointeur vers le tableau cette macro gère ça toute seule sinon c chiant d'écrire a la main a chaque fois
| #define _dynarray_func_noargs | ( | func, | |
| darr ) |
| #define auto __auto_type |
| #define DYNAMIC_ARRAY | ( | elem_type | ) |
Déclaration d'un tableau dynamique.
Petit tricks de batard pour a la fois avoir une sécurité sur le type du tableau et en meme temps pouvoir utiliser les fonctions génériques
| #define DYNAMIC_ARRAY_BASE | ( | type_elem | ) |
base d'un tableau dynamique
Un tableau dynamique homogène avec son type num_elements -> nombre d'elem courrants capacity -> taille max du tableau
| #define dynarray_append | ( | darr, | |
| ... ) |
| #define DYNARRAY_CAST_TO_BASE | ( | darr | ) |
Renvoie pointeur vers le tableau générique.
| #define dynarray_compact | ( | darr | ) |
| #define DYNARRAY_ELEM_SIZE | ( | darr | ) |
Renvoie la taille d'un élément du tableau.
| #define dynarray_ensure_capacity | ( | darr, | |
| capacity ) |
| #define dynarray_filter | ( | darr, | |
| predicate, | |||
| userdata ) |
| #define dynarray_foreach | ( | darr, | |
| var, | |||
| elem_var, | |||
| ... ) |
Boucle sur le tableau avec var = id, elem_var = pointeur sur data[idx].
| #define dynarray_foreach_elem | ( | darr, | |
| elem_var, | |||
| ... ) |
boucle sur le tableau avec elem_var = pointeur sur les éléments
| #define dynarray_foreach_idx | ( | darr, | |
| var, | |||
| ... ) |
boucle sur le tableau avec var = id
| #define dynarray_free_data | ( | darr | ) |
| #define dynarray_get | ( | darr, | |
| idx ) |
Renvoie la valeur de data[idx].
| #define dynarray_get_ptr | ( | darr, | |
| idx ) |
Renvoie le pointeur vers data[idx].
| #define dynarray_indexof | ( | darr, | |
| elem_p ) |
Renvoie l'indice d'elem dans le tableau.
| #define dynarray_qsort | ( | darr, | |
| compare_func ) |
Trie le tableau de data par un qsort.
| #define dynarray_set | ( | darr, | |
| idx, | |||
| ... ) |
Modifie la valeur de data[idx].
| #define dynarray_set_elements | ( | darr, | |
| num_elements, | |||
| elements ) |
| typedef bool(* dynarray_filter_t) (const void *elem_p, void *userdata) |
Fonction qui filtre un tableau.
| typedef uint32_t dynarray_size_t |
| void _dynarray_compact | ( | dynarray_size_t | sizeof_element, |
| DynamicArray * | darr ) |
Fait en sorte qu'il n'y ait pas de mémoire vide dans data.
| sizeof_element | |
| darr |
| void _dynarray_ensure_capacity | ( | dynarray_size_t | sizeof_element, |
| DynamicArray * | darr, | ||
| dynarray_size_t | capacity ) |
Fait en sorte que la capacité du tableau soit au moins capacity.
| sizeof_element | |
| darr | |
| capacity |
| void _dynarray_filter | ( | dynarray_size_t | sizeof_element, |
| DynamicArray * | darr, | ||
| dynarray_filter_t | predicate, | ||
| void * | userdata ) |
Modifie un tableau pour ne garder que les valeurs respectant le filtre.
| sizeof_element | |
| darr | |
| filter | |
| userdata |
| void _dynarray_free_data | ( | dynarray_size_t | sizeof_element, |
| DynamicArray * | darr ) |
Libère la mémoire du data d'un dynarray.
| sizeof_element | |
| darr |
| dynarray_size_t _dynarray_prepare_append_min_capacity | ( | dynarray_size_t | sizeof_element, |
| DynamicArray * | darr, | ||
| dynarray_size_t | min_capacity ) |
Vérifie qu'il y a la capacité nécessaire pour append et en alloue si besoin.
| sizeof_element | |
| darr | |
| min_capacity |
| void _dynarray_set_elements | ( | dynarray_size_t | sizeof_element, |
| DynamicArray * | darr, | ||
| dynarray_size_t | num_elements, | ||
| void * | elements ) |
Rentre un tableau d'elements dans le tableau dynamique.
| sizeof_element | |
| darr | |
| num_elements | nombre d'éléments a insérer |
| elements | tableau d'éléments |
| typedef DYNAMIC_ARRAY_BASE | ( | void | ) |
Tableau dynamique générique (data est un pointeur universel).