libpulsar
A modular compiler for the pulsar programming language
Loading...
Searching...
No Matches
Macros
dynarr.h File Reference

Defines a dynamically-allocated array template. More...

#include <stdlib.h>
#include "def.h"
#include "capture.h"
#include "abort.h"

Go to the source code of this file.

Macros

#define PS_DYNARR_INITIAL_CAP   4
 
#define PS_DYNARR_GROWTH_FACTOR   2
 
#define _ps_dynarr_ptr(arr)   ((char*)arr + sizeof((arr)->header))
 
#define _ps_dynarr_size(arr, cap)    sizeof(*arr) + (cap) * sizeof(*(arr)->contents)
 
#define ps_dynarr(T)
 
#define ps_dynarr_new(T)
 
#define ps_push(__arrptr, __new_elem)
 
#define ps_add(__arrptr, __capture)
 
#define ps_dynarr_free(__arr)   free(__arr)
 
#define arr(__arr)   ((__arr)->contents)
 
#define for(__arr, __capture)
 

Detailed Description

Defines a dynamically-allocated array template.

Author
Ethan Uppal

Definition in file dynarr.h.

Macro Definition Documentation

◆ _ps_dynarr_ptr

#define _ps_dynarr_ptr (   arr)    ((char*)arr + sizeof((arr)->header))

Definition at line 24 of file dynarr.h.

◆ _ps_dynarr_size

#define _ps_dynarr_size (   arr,
  cap 
)     sizeof(*arr) + (cap) * sizeof(*(arr)->contents)

Definition at line 25 of file dynarr.h.

◆ arr

#define arr (   __arr)    ((__arr)->contents)

Definition at line 67 of file dynarr.h.

◆ for

#define for (   __arr,
  __capture 
)
Value:
do { \
for (usize i = 0; i < (__arr)->length; i++) { \
$run(__capture, ($arr(__arr)[i])); \
} \
} while (0)
#define usize
Definition def.h:50
static void usize length
Definition lexer.h:71

Definition at line 69 of file dynarr.h.

◆ ps_add

#define ps_add (   __arrptr,
  __capture 
)
Value:
do { \
auto_t __arr = *(__arrptr); \
if (__arr->length + 1 > __arr->capacity) { \
__arr->capacity *= PS_DYNARR_GROWTH_FACTOR; \
__arr = realloc(__arr, _ps_dynarr_size(__arr, __arr->capacity)); \
} \
if (__arr) { \
$run(__capture, &__arr->contents[__arr->length++]); \
} else { \
PS_NO_MEMORY(); \
} \
*(__arrptr) = __arr; \
} while (0)
#define auto_t
Definition def.h:53
#define _ps_dynarr_size(arr, cap)
Definition dynarr.h:25
#define PS_DYNARR_GROWTH_FACTOR
Definition dynarr.h:21

Definition at line 50 of file dynarr.h.

◆ ps_dynarr

#define ps_dynarr (   T)
Value:
{ \
usize capacity; \
T contents[]; \
}
#define T(token_type)
Definition token_type.h:10

Definition at line 28 of file dynarr.h.

◆ ps_dynarr_free

#define ps_dynarr_free (   __arr)    free(__arr)

Definition at line 65 of file dynarr.h.

◆ PS_DYNARR_GROWTH_FACTOR

#define PS_DYNARR_GROWTH_FACTOR   2

Definition at line 21 of file dynarr.h.

◆ PS_DYNARR_INITIAL_CAP

#define PS_DYNARR_INITIAL_CAP   4

Definition at line 17 of file dynarr.h.

◆ ps_dynarr_new

#define ps_dynarr_new (   T)
Value:
({ \
if (!arr) PS_NO_MEMORY(); \
if (arr) { \
arr->length = 0; \
arr->capacity = PS_DYNARR_INITIAL_CAP; \
} \
arr; \
})
#define PS_NO_MEMORY()
Aborts the program due to exhaustion of virtual memory.
Definition abort.h:65
#define PS_DYNARR_INITIAL_CAP
Definition dynarr.h:17
#define arr(__arr)
Definition dynarr.h:67

Definition at line 35 of file dynarr.h.

◆ ps_push

#define ps_push (   __arrptr,
  __new_elem 
)
Value:
ps_add( \
__arrptr, $(__elem) in { *(__elem) = (__new_elem); })
#define in
#define ps_add(__arrptr, __capture)
Definition dynarr.h:50

Definition at line 46 of file dynarr.h.