70 lines
1.9 KiB
Markdown
70 lines
1.9 KiB
Markdown
# tomlc17 Options
|
|
|
|
## Setting Options: Custom Allocators
|
|
|
|
By default, `tomlc17` uses the standard C library `realloc()` and `free()`
|
|
functions for memory management. You can override this behavior by setting
|
|
custom allocator functions using `toml_set_option()`.
|
|
|
|
This is useful when you need to:
|
|
- Use a custom memory pool or arena allocator
|
|
- Track memory allocations for debugging
|
|
- Enforce memory constraints in embedded or resource-limited environments
|
|
- Integrate with a specialized memory management system
|
|
|
|
### Example: Using Custom Allocators
|
|
|
|
```c
|
|
#include "tomlc17.h"
|
|
#include <stdlib.h>
|
|
|
|
// Custom realloc function
|
|
void* my_realloc(void *ptr, size_t size) {
|
|
// Your custom allocation logic here
|
|
if (size == 0) {
|
|
free(ptr);
|
|
return NULL;
|
|
}
|
|
return realloc(ptr, size);
|
|
}
|
|
|
|
// Custom free function
|
|
void my_free(void *ptr) {
|
|
// Your custom deallocation logic here
|
|
free(ptr);
|
|
}
|
|
|
|
int main() {
|
|
// Set custom allocators
|
|
toml_option_t opt = toml_default_option();
|
|
opt.mem_realloc = my_realloc;
|
|
opt.mem_free = my_free;
|
|
toml_set_option(opt);
|
|
|
|
// Now all subsequent parse calls will use your custom allocators
|
|
toml_result_t result = toml_parse_file_ex("config.toml");
|
|
|
|
if (result.ok) {
|
|
// Use the parsed data
|
|
toml_free(result);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
```
|
|
|
|
### Important Notes
|
|
|
|
- **Initialization:** Call `toml_set_option()` once during program startup, before
|
|
any parsing operations.
|
|
- **Thread Safety:** `toml_set_option()` is not thread-safe. Set options only during
|
|
initialization in a single-threaded context.
|
|
- **Custom Allocator Requirements:** Your custom `mem_realloc` function should behave
|
|
like standard `realloc()`:
|
|
- When `size > 0`: allocate or resize memory, return pointer or NULL on failure
|
|
- When `size == 0`: free memory and return NULL
|
|
- Your custom `mem_free` function should handle NULL pointers gracefully
|
|
|
|
For more details, see the [`toml_set_option()` documentation](API.md#toml_set_option)
|
|
in API.md.
|