static inline FILE * get_fp(proc_instance_t * proc, time_t sec, wsdata_t * wsd) { if (!sec) { sec = time(NULL); } sysutil_test_time_boundary(&proc->splittime, sec); wslabel_t * label = NULL; if (wsd->label_len) { //get last label label = wsd->labels[wsd->label_len -1]; } label_write_t * lw = listhash_find_attach(proc->file_table, (const char *)&label, sizeof(wslabel_t *)); if (proc->max_records && (lw->records >= proc->max_records)) { lw->current_boundary = 0; //reset boundary - forces opening of new file } if (lw->current_boundary != proc->splittime.current_boundary) { lw->current_boundary = proc->splittime.current_boundary; if (lw->fp) { fclose(lw->fp); if (lw->splitfile) { tool_print("finished writing to %s", lw->splitfile); if (lw->moveprefix) { sysutil_rename_file(lw->splitfile, lw->movefile); tool_print("moved %s to %s", lw->splitfile, lw->movefile); } } } if (!lw->prefix) { lw->prefix = create_prefix(proc->writefile, label, proc->env); if (proc->movefile) { lw->moveprefix = create_prefix(proc->movefile, label, proc->env); } } lw->fp = sysutil_open_timedfile(lw->prefix, proc->extension, proc->splittime.current_boundary, proc->splittime.increment_ts, lw->splitfile, MAX_SPLITFILENAME); if (lw->moveprefix) { sysutil_name_timedfile(lw->moveprefix, proc->extension, proc->splittime.current_boundary, proc->splittime.increment_ts, lw->movefile, MAX_SPLITFILENAME); } lw->records = 0; } lw->records++; return lw->fp; }
void create_prefix(int *infix,int *suffix,int infixhead, int infixrear,int suffixhead,int suffixrear, int *prefix){ if(suffixrear-suffixhead<1) return; int root_v=suffix[suffixrear-1]; prefix[sp++]=root_v; int root_position_infix=findposition_infix(infix,infixhead,infixrear,root_v); int split_suffix=root_position_infix-infixhead+suffixhead; //leftsubtree: create_prefix(infix,suffix,infixhead,root_position_infix,suffixhead,split_suffix,prefix); //rightsubtree: create_prefix(infix,suffix,root_position_infix+1,infixrear,split_suffix,suffixrear-1,prefix); }
irc_prefix* parse_prefix(char *prefix) { irc_prefix *ret; char *save_pointer; if(strstr(prefix, "!") == NULL) { ret = create_prefix(NULL, NULL, prefix); return ret; } char *nick = strtok_r(prefix, "!", &save_pointer); char *user = strtok_r(NULL, "@", &save_pointer); char *host = strtok_r(NULL, "", &save_pointer); ret = create_prefix(nick, user, host); return ret; }
int main(int argc, char const *argv[]) { int infix[]={1,1,1,2,3,3,4,5,5,6,7,8,11,12,14,14,16,18,19}; int suffix[]={1,1,3,2,3,5,6,7,5,4,1,11,14,12,18,16,14,19,8}; int size=sizeof(suffix)/sizeof(int); int *prefix=malloc(sizeof(int)*size); create_prefix(infix,suffix,0,size,0,size,prefix); printf("prefix:\n"); int i; for(i=0;i<size;i++) printf("%d ", prefix[i]); printf("\n"); return 0; }