int grok_compilen(grok_t *grok, const char *pattern, int length) { grok_log(grok, LOG_COMPILE, "Compiling '%.*s'", length, pattern); /* clear the old tctree data */ tctreeclear(grok->captures_by_name); tctreeclear(grok->captures_by_subname); tctreeclear(grok->captures_by_capture_number); tctreeclear(grok->captures_by_id); grok->pattern = pattern; grok->pattern_len = length; grok->full_pattern = grok_pattern_expand(grok); if (grok->full_pattern == NULL) { grok_log(grok, LOG_COMPILE, "A failure occurred while compiling '%.*s'", length, pattern); grok->errstr = "failure occurred while expanding pattern "\ "(too pattern recursion?)"; return GROK_ERROR_COMPILE_FAILED; } grok->re = pcre_compile(grok->full_pattern, 0, &grok->pcre_errptr, &grok->pcre_erroffset, NULL); if (grok->re == NULL) { grok->errstr = (char *)grok->pcre_errptr; return GROK_ERROR_COMPILE_FAILED; } pcre_fullinfo(grok->re, NULL, PCRE_INFO_CAPTURECOUNT, &grok->pcre_num_captures); grok->pcre_num_captures++; /* include the 0th group */ grok->pcre_capture_vector = calloc(3 * grok->pcre_num_captures, sizeof(int)); /* Walk grok->captures_by_id. * For each, ask grok->re what stringnum it is */ grok_study_capture_map(grok); return GROK_OK; }
void main () { uint32_t key = 123; const char *val = "abcdefkrnglrg"; // Make a new tree TCTREE *tree = tctreenew(); // Put an integer key tctreeput(tree, &key, sizeof(key), val, strlen(val)); // Put a different key key = 122; tctreeput(tree, &key, sizeof(key), val, strlen(val)); // Put the same key twice tctreeput(tree, &key, sizeof(key), val, strlen(val)); // Put the same key but keep the old value tctreeputkeep(tree, &key, sizeof(key), val, strlen(val)); // Get back a value int size; void *newVal = tctreeget(tree, &key, sizeof(key), &size); printf("Got value %s\n", newVal); // Create an iterator tctreeiterinit(tree); // Walk the tree tctreeiternext(tree, &size); tctreeiternext(tree, &size); tctreeiternext(tree, &size); // Clear the tree tctreeclear(tree); // Put one value back in the tree to make sure it's freed on delete tctreeput(tree, &key, sizeof(key), val, strlen(val)); // Delete the tree tctreedel(tree); // Make a list TCLIST *list = tclistnew(); // Push a few times tclistpush(list, &key, sizeof(key)); key += 1; tclistpush(list, &key, sizeof(key)); key += 1; tclistpush(list, &key, sizeof(key)); // Overwrite an existing element tclistover(list, 1, &key, sizeof(key)); // Get a value tclistval(list, 2, &size); // Remove some values newVal = tclistremove(list, 2, &size); free(newVal); newVal = tclistremove(list, 0, &size); free(newVal); // Free the whole list tclistdel(list); }