19#define _POSIX_C_SOURCE 200809L
25#ifndef KLS_AUTOREGION_AUTOSET_DEFAULT
26#define KLS_AUTOREGION_AUTOSET_DEFAULT 1
29#ifndef KLS_AUTOREGION_ALLOC_DEFAULT
30#define KLS_AUTOREGION_ALLOC_DEFAULT KLS_REGLIST_ALLOC_KLS_BASIC
33#ifndef KLS_AUTOREGION_REGLIST_SIZE_DEFAULT
34#define KLS_AUTOREGION_REGLIST_SIZE_DEFAULT KLS_DEFAULT_SIZE
37#ifndef KLS_AUTOREGION_AUTOSET_TEMP_DEFAULT
38#define KLS_AUTOREGION_AUTOSET_TEMP_DEFAULT 1
41#ifndef KLS_AUTOREGION_ALLOC_TEMP_DEFAULT
42#define KLS_AUTOREGION_ALLOC_TEMP_DEFAULT KLS_REGLIST_ALLOC_KLS_BASIC
45#ifndef KLS_AUTOREGION_REGLIST_TEMP_SIZE_DEFAULT
46#define KLS_AUTOREGION_REGLIST_TEMP_SIZE_DEFAULT KLS_DEFAULT_SIZE
88#define KLS_REGIONTYPE_MAX KLS_Header
94#define KLS_REGION_MAX_NAME_SIZE 15
99#define KLS_REGION_MAX_DESC_SIZE 20
116static const char KOLISEO_DEFAULT_REGION_NAME[] =
"No Name";
117static const char KOLISEO_DEFAULT_REGION_DESC[] =
"No Desc";
160#undef KLS_DEFAULT_HOOKS
161#define KLS_DEFAULT_HOOKS (KLS_Hooks) { \
162 .on_new_handler = &KLS_autoregion_on_new, \
163 .on_free_handler = &KLS_autoregion_on_free, \
164 .on_push_handler = &KLS_autoregion_on_push, \
165 .on_temp_start_handler = &KLS_autoregion_on_temp_start, \
166 .on_temp_free_handler = &KLS_autoregion_on_temp_free, \
167 .on_temp_push_handler = &KLS_autoregion_on_temp_push, \
172#ifndef KOLISEO_HAS_LOCATE
174 ptrdiff_t count,
char *name,
char *desc);
176void *kls_push_zero_named_dbg(Koliseo * kls, ptrdiff_t size, ptrdiff_t align,
177 ptrdiff_t count,
char *name,
char *desc, Koliseo_Loc loc);
178#define kls_push_zero_named(kls, size, align, count, name, desc) kls_push_zero_named_dbg((kls), (size), (align), (count), (name), (desc), KLS_HERE)
181#ifndef KOLISEO_HAS_LOCATE
183 ptrdiff_t count,
int type,
char *name,
char *desc);
185void *kls_push_zero_typed_dbg(Koliseo * kls, ptrdiff_t size, ptrdiff_t align,
186 ptrdiff_t count,
int type,
char *name,
char *desc, Koliseo_Loc loc);
187#define kls_push_zero_typed(kls, size, align, count, type, name, desc) kls_push_zero_typed_dbg((kls), (size), (align), (count), (type), (name), (desc), KLS_HERE)
190#ifndef KOLISEO_HAS_LOCATE
192 ptrdiff_t align, ptrdiff_t count,
char *name,
195void *kls_temp_push_zero_named_dbg(Koliseo_Temp * t_kls, ptrdiff_t size,
196 ptrdiff_t align, ptrdiff_t count,
char *name,
197 char *desc, Koliseo_Loc loc);
198#define kls_temp_push_zero_named(t_kls, size, align, count, name, desc) kls_temp_push_zero_named_dbg((t_kls), (size), (align), (count), (name), (desc), KLS_HERE)
201#ifndef KOLISEO_HAS_LOCATE
203 ptrdiff_t align, ptrdiff_t count,
int type,
204 char *name,
char *desc);
206void *kls_temp_push_zero_typed_dbg(Koliseo_Temp * t_kls, ptrdiff_t size,
207 ptrdiff_t align, ptrdiff_t count,
int type,
208 char *name,
char *desc, Koliseo_Loc loc);
209#define kls_temp_push_zero_typed(t_kls, size, align, count, type, name, desc) kls_temp_push_zero_typed_dbg((t_kls), (size), (align), (count), (type), (name), (desc), KLS_HERE)
212#undef KLS_PUSH_ARR_NAMED
213#define KLS_PUSH_ARR_NAMED(kls, type, count, name, desc) (type*)kls_push_zero_named((kls), sizeof(type), _Alignof(type), (count), (name), (desc))
215#undef KLS_PUSH_ARR_TYPED
216#define KLS_PUSH_ARR_TYPED(kls, type, count, region_type, name, desc) (type*)kls_push_zero_typed((kls), sizeof(type), _Alignof(type), (count), (region_type), (name), (desc))
218#undef KLS_PUSH_ARR_T_NAMED
219#define KLS_PUSH_ARR_T_NAMED(kls_temp, type, count, name, desc) (type*)kls_temp_push_zero_named((kls_temp), sizeof(type), _Alignof(type), (count), (name), (desc))
221#undef KLS_PUSH_ARR_T_TYPED
222#define KLS_PUSH_ARR_T_TYPED(kls_temp, type, count, region_type, name, desc) (type*)kls_temp_push_zero_typed((kls_temp), sizeof(type), _Alignof(type), (count), (region_type), (name), (desc))
225#define KLS_RL_GETLIST() kls_rl_emptyList()
233#define KLS_RL_FREELIST(kls_list) kls_rl_freeList(kls_list)
235#define kls_showList(list) kls_rl_showList((list))
237#define kls_showList_toFile(list, fp) kls_rl_showList_toFile((list), (fp))
238#define KLS_RL_ECHOLIST(kls_list) kls_rl_showList(kls_list)
239#define KLS_RL_PRINTLIST(kls_list,file) kls_rl_showList_toFile(kls_list,file)
248#define KLS_RL_PUSHLIST(kls,reg,kls_list) kls_rl_insord(kls,reg,kls_list)
252#define KLS_RL_PUSHLIST_P(kls,reg,kls_list) kls_rl_insord_p(kls,reg,kls_list)
257#define KLS_RL_DIFF(kls,kls_list1,kls_list2) kls_rl_diff(kls,kls_list1,kls_list2)
const char * kls_reglist_backend_strings[KLS_REGLIST_TOTAL_BACKENDS]
Defines strings for KLS_RegList_Alloc_Backend values.
Definition kls_region.c:21
KLS_Region_List kls_rl_intersect(Koliseo *, KLS_Region_List, KLS_Region_List)
Definition kls_region.c:526
KLS_Region_List kls_rl_insord_p(Koliseo *, KLS_list_element, KLS_Region_List)
Definition kls_region.c:404
KLS_Region_List kls_rl_cons(Koliseo *, KLS_list_element, KLS_Region_List)
Definition kls_region.c:94
bool kls_rl_isLess(KLS_list_element, KLS_list_element)
KLS_Region_List kls_rl_reverse(Koliseo *, KLS_Region_List)
Definition kls_region.c:342
KLS_Region_List kls_rl_append(Koliseo *, KLS_Region_List, KLS_Region_List)
Definition kls_region.c:329
KLS_Region_List kls_rl_delete(Koliseo *, KLS_list_element, KLS_Region_List)
Definition kls_region.c:369
void kls_usageReport(Koliseo *)
Print usage report for passed Koliseo to stdout.
Definition kls_region.c:668
KLS_Region_List kls_rl_diff(Koliseo *, KLS_Region_List, KLS_Region_List)
Definition kls_region.c:547
#define KLS_REGION_MAX_NAME_SIZE
Defines max size for KLS_Region's name field.
Definition kls_region.h:94
KLS_Region_List kls_rl_insord(Koliseo *, KLS_list_element, KLS_Region_List)
Definition kls_region.c:386
KLS_Region * KLS_list_element
Redundant typedef to better denote the actual value field of a KLS_region_list_item.
Definition kls_region.h:119
void kls_rl_showList(KLS_Region_List)
Definition kls_region.c:302
ptrdiff_t kls_type_usage(int, Koliseo *)
Calc memory used by the specific type of KLS_list_element.
Definition kls_region.c:680
KLS_region_list_item * KLS_Region_List
Definition kls_region.h:130
void KLS_autoregion_on_free(struct Koliseo *kls)
Definition kls_region.c:1416
ptrdiff_t kls_regionSize(KLS_list_element)
KLS_Region_List kls_rl_emptyList(void)
Definition kls_region.c:62
void kls_usageReport_toFile(Koliseo *, FILE *)
Prints an usage report for the passed Koliseo to the passed file.
Definition kls_region.c:637
KLS_RegList_Alloc_Backend
Defines allocation backend for KLS_Region_List items.
Definition kls_region.h:54
@ KLS_REGLIST_ALLOC_KLS_BASIC
Definition kls_region.h:56
@ KLS_REGLIST_TOTAL_BACKENDS
Definition kls_region.h:57
@ KLS_REGLIST_ALLOC_LIBC
Definition kls_region.h:55
KLS_Region_List kls_rl_t_cons(Koliseo_Temp *, KLS_list_element, KLS_Region_List)
Definition kls_region.c:196
bool kls_rl_empty(KLS_Region_List)
Definition kls_region.c:67
void KLS_autoregion_on_new(struct Koliseo *kls)
Definition kls_region.c:1337
KLS_Region_List kls_rl_mergeList(Koliseo *, KLS_Region_List, KLS_Region_List)
Definition kls_region.c:496
int kls_rl_length(KLS_Region_List)
Definition kls_region.c:320
void KLS_autoregion_on_temp_push(struct Koliseo_Temp *t_kls, ptrdiff_t padding, const char *caller, void *user)
Definition kls_region.c:1553
void * kls_push_zero_named(Koliseo *kls, ptrdiff_t size, ptrdiff_t align, ptrdiff_t count, char *name, char *desc)
Takes a Koliseo pointer, and ptrdiff_t values for size, align and count.
Definition kls_region.c:960
KLS_list_element kls_rl_head(KLS_Region_List)
Definition kls_region.c:76
void * kls_temp_push_zero_named(Koliseo_Temp *t_kls, ptrdiff_t size, ptrdiff_t align, ptrdiff_t count, char *name, char *desc)
Takes a Koliseo_Temp, and ptrdiff_t values for size, align and count.
Definition kls_region.c:1058
void kls_rl_freeList(KLS_Region_List)
Frees all values and nodes for passed Region list.
Definition kls_region.c:244
KLS_Region_Type
Represents a type index for Regions.
Definition kls_region.h:78
@ KLS_Header
Definition kls_region.h:81
@ KLS_None
Definition kls_region.h:79
@ Temp_KLS_Header
Definition kls_region.h:80
void kls_rl_showList_toFile(KLS_Region_List, FILE *fp)
Definition kls_region.c:263
KLS_Region_List kls_rl_copy(Koliseo *, KLS_Region_List)
Definition kls_region.c:356
void * kls_temp_push_zero_typed(Koliseo_Temp *t_kls, ptrdiff_t size, ptrdiff_t align, ptrdiff_t count, int type, char *name, char *desc)
Takes a Koliseo_Temp, a KLS_Region_Type index, and ptrdiff_t values for size, align and count.
Definition kls_region.c:1254
KLS_Region_List kls_rl_tail(KLS_Region_List)
Definition kls_region.c:85
bool kls_rl_isEqual(KLS_list_element, KLS_list_element)
void KLS_autoregion_on_temp_free(struct Koliseo_Temp *t_kls)
Definition kls_region.c:1520
struct KLS_list_region KLS_region_list_item
Defines the node for a KLS_Region_List.
double kls_usageShare(KLS_list_element, Koliseo *)
void KLS_autoregion_on_push(struct Koliseo *kls, ptrdiff_t padding, const char *caller, void *user)
Definition kls_region.c:1434
void KLS_autoregion_on_temp_start(struct Koliseo_Temp *t_kls)
Definition kls_region.c:1455
ptrdiff_t kls_avg_regionSize(Koliseo *)
Return average region size in usage for the passed Koliseo.
Definition kls_region.c:603
bool kls_rl_member(KLS_list_element, KLS_Region_List)
Definition kls_region.c:307
const char * kls_reglist_backend_string(KLS_RegList_Alloc_Backend kls_be)
Returns the string corresponding to passed kls_be.
Definition kls_region.c:46
#define KLS_REGION_MAX_DESC_SIZE
Defines max size for KLS_Region's desc field.
Definition kls_region.h:99
void * kls_push_zero_typed(Koliseo *kls, ptrdiff_t size, ptrdiff_t align, ptrdiff_t count, int type, char *name, char *desc)
Takes a Koliseo pointer, a KLS_Region_Type index, and ptrdiff_t values for size, align and count.
Definition kls_region.c:1157
ptrdiff_t kls_total_padding(Koliseo *)
Calc memory used as padding for the passed Koliseo.
Definition kls_region.c:708
Definition kls_region.h:135
int kls_autoset_temp_regions
If set to 1, make the Koliseo handle the KLS_Regions for its usage when operating on a Koliseo_Temp i...
Definition kls_region.h:139
ptrdiff_t tkls_reglist_kls_size
Sets the size for reglist_kls when on KLS_REGLIST_ALLOC_KLS_BASIC.
Definition kls_region.h:141
KLS_RegList_Alloc_Backend kls_reglist_alloc_backend
Sets the backend for the KLS_Regions allocation.
Definition kls_region.h:137
KLS_RegList_Alloc_Backend tkls_reglist_alloc_backend
Sets the backend for the KLS_Regions allocation.
Definition kls_region.h:140
ptrdiff_t kls_reglist_kls_size
Sets the size for reglist_kls when on KLS_REGLIST_ALLOC_KLS_BASIC.
Definition kls_region.h:138
int kls_autoset_regions
If set to 1, make the Koliseo handle the KLS_Regions for its usage.
Definition kls_region.h:136
Definition kls_region.h:144
struct Koliseo * reglist_kls
When conf.kls_reglist_alloc_backend is KLS_REGLIST_ALLOC_KLS_BASIC, points to the backing kls for reg...
Definition kls_region.h:146
int max_regions_kls_alloc_basic
Contains maximum number of allocatable KLS_Region when using KLS_REGLIST_ALLOC_KLS_BASIC.
Definition kls_region.h:147
struct Koliseo * t_reglist_kls
When conf.kls_reglist_alloc_backend is KLS_REGLIST_ALLOC_KLS_BASIC, points to the backing kls for t_r...
Definition kls_region.h:149
KLS_Region_List regs
List of allocated Regions.
Definition kls_region.h:145
KLS_Region_List t_regs
List of allocated Regions for a Koliseo_Temp instance.
Definition kls_region.h:148
KLS_Autoregion_Extension_Conf conf
Contains config for autoregion extension.
Definition kls_region.h:150
Represents an allocated memory region in a Koliseo.
Definition kls_region.h:106
int type
Used to identify which type the KLS_Region holds.
Definition kls_region.h:113
char desc[KLS_REGION_MAX_DESC_SIZE+1]
Description field for the KLS_Region.
Definition kls_region.h:112
ptrdiff_t end_offset
Ending offset of memory region.
Definition kls_region.h:108
ptrdiff_t begin_offset
Starting offset of memory region.
Definition kls_region.h:107
char name[KLS_REGION_MAX_NAME_SIZE+1]
Name field for the KLS_Region.
Definition kls_region.h:111
ptrdiff_t padding
Size of padding for the KLS_Region.
Definition kls_region.h:110
ptrdiff_t size
Size of memory for the KLS_Region.
Definition kls_region.h:109
Defines the node for a KLS_Region_List.
Definition kls_region.h:125
struct KLS_list_region * next
Pointer to the next node int the list.
Definition kls_region.h:127
KLS_list_element value
The KLS_Region value.
Definition kls_region.h:126