OOP _gst_re_search (OOP srcOOP, OOP patternOOP, int from, int to) { int res = 0; const char *src; struct pre_pattern_buffer *regex; struct pre_registers *regs; RegexCaching caching; OOP resultOOP; if (!regexClassOOP) init_re (); caching = lookupRegex (patternOOP, ®ex); if (caching != REGEX_CACHE_HIT && compileRegex (patternOOP, regex) != NULL) return NULL; /* now search */ src = &STRING_OOP_AT (OOP_TO_OBJ (srcOOP), 1); regs = (struct pre_registers *) calloc (1, sizeof (struct pre_registers)); res = pre_search (regex, src, to, from - 1, to - from + 1, regs); if (caching == REGEX_NOT_CACHED) pre_free_pattern (regex); resultOOP = make_re_results (srcOOP, regs); pre_free_registers(regs); free(regs); return resultOOP; }
// DO NOT CALL THIS FUNCTION DIRECTLY // call pre_skip_backward instead // NOTE : this function handles skipping for real laserdisc players that don't support it bool ldp::skip_backward(Uint16 frames_to_skip, Uint16 target_frame) { bool result = false; char frame[6] = {0}; sprintf(frame, "%05d", target_frame); result = pre_search(frame, true); pre_play(); return(result); }
int main(void) { Node *n8 = create_node(1000,NULL,NULL); Node *n1 = create_node(55,NULL,n8); Node *n2 = create_node(100,NULL,NULL); Node *n3 = create_node(1,n1,n2); Node *n4 = create_node(2,NULL,NULL); Node *n5 = create_node(3,NULL,NULL); Node *n6 = create_node(4,n4,n5); Node *n7 = create_node(5,n3,n6); root r = init_bitree(n7); pre_search(r); printf("\n"); mid_search(r); printf("\n"); last_search(r); printf("\n"); destroy_bitree(r); return 0; }