<commit_before>// Public domain. See "unlicense" statement at the end of this file.

// Notes on config files:
//
// - Comments are C style: // and /* ... */
// - Objects start with [MY_OBJECT]
// - The contents of an object are wrapped in { ... } pairs
// - Each key/value pair is terminated with a semi-colon

ta_config_obj* ta_allocate_config_object()
{
    ta_config_obj* pObj = calloc(1, sizeof(*pObj));
    if (pObj == NULL) {
        return NULL;<commit_msg>Document a todo.<commit_after>// Public domain. See "unlicense" statement at the end of this file.

// Notes on config files:
//
// - Comments are C style: // and /* ... */
// - Objects start with [MY_OBJECT]
// - The contents of an object are wrapped in { ... } pairs
// - Each key/value pair is terminated with a semi-colon

// TODO:
// - Improve this by doing a single allocation of a mutable string and use offsets into this allocation
//   for the name/value pairs. Place null terminators at ']', '=' and ';' characters. This will eliminate
//   per-variable data movement.

ta_config_obj* ta_allocate_config_object()
{
    ta_config_obj* pObj = calloc(1, sizeof(*pObj));
    if (pObj == NULL) {
        return NULL;
{'fraction_non_alphanumeric': 0.12984822934232715, 'fraction_numerical': 0.0016863406408094434, 'mean_word_length': 2.8167202572347265, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6843099', 'n_tokens_mistral': 361, 'n_tokens_neox': 351, 'n_words': 141}