mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 23:04:08 +10:00
Added memory allocation
This commit is contained in:
23
using-toy.md
23
using-toy.md
@@ -94,3 +94,26 @@ The first argument must be an interpreter. The third argument is a pointer to a
|
|||||||
|
|
||||||
The second arguments to these functions are either the function to be called as a `Literal`, or the name of the function within the interpreter's scope. The latter API simply finds the specified `Literal` if it exists and calls the former. As with most APIs, these return `false` if something went wrong.
|
The second arguments to these functions are either the function to be called as a `Literal`, or the name of the function within the interpreter's scope. The latter API simply finds the specified `Literal` if it exists and calls the former. As with most APIs, these return `false` if something went wrong.
|
||||||
|
|
||||||
|
## Memory Allocation
|
||||||
|
|
||||||
|
Depending on your platform of choice, you may want to alter how the memory is allocated within Toy. You can do this with the simple memory API:
|
||||||
|
|
||||||
|
```c
|
||||||
|
//signature returns the new pointer to be used
|
||||||
|
typedef void* (*AllocatorFn)(void* pointer, size_t oldSize, size_t newSize);
|
||||||
|
TOY_API void setAllocator(AllocatorFn);
|
||||||
|
```
|
||||||
|
|
||||||
|
Pass it a function which matches the above signature, and it'll be callable via the following macros:
|
||||||
|
|
||||||
|
* ALLOCATE(type, count)
|
||||||
|
* FREE(type, pointer)
|
||||||
|
* GROW_ARRAY(type, pointer, oldCount, newCount)
|
||||||
|
* SHRINK_ARRAY(type, pointer, oldCount, newCount)
|
||||||
|
* FREE_ARRAY(type, pointer, oldCount)
|
||||||
|
|
||||||
|
Also, the following macros are provided to calculate the ideal array capacities (the latter of which is for rapidly growing structures):
|
||||||
|
|
||||||
|
* GROW_CAPACITY(capacity)
|
||||||
|
* GROW_CAPACITY_FAST(capacity)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user