add config support
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user