sc_addr sc_generator::generate_find_internal(const char *idtf,sc_type type,sc_segment *seg) { if (!seg) seg = active_segment; sc_addr el = (idtf && idtf[0])?session->find_by_idtf(idtf,seg):0; if (!el) return generate_internal(idtf,type,seg); if (type && type != session->get_type(el)) return 0; return el; }
char* markov_generate_to_string(MarkovData* data, int max_words) { const int initial_size = 1024; TextBuffer* buffer = init_textbuffer(initial_size); int err = generate_internal(data, max_words, write_word_to_string, buffer); if (err) { free(buffer->text); free(buffer); return NULL; } buffer->text[buffer->used - 1] = '\0'; buffer->text = realloc(buffer->text, sizeof(char[buffer->used])); char* output = buffer->text; free(buffer); return output; }
int markov_generate_to_stream(MarkovData* data, FILE* dest, int max_words) { return generate_internal(data, max_words, write_word_to_stream, dest); }