static int findRec(nodeptr ref, nodeptr best, int mxtips, int value) { if(isTip(ref->number, mxtips)) { if(ref == best || ref->back == best) return value; else return 0; } else { int d1, d2; if(ref == best || ref->back == best) return value; d1 = findRec(ref->next->back, best, mxtips, value + 1); d2 = findRec(ref->next->next->back, best, mxtips, value + 1); assert((d1 > 0 && d2 == 0) || (d2 > 0 && d1 == 0) || (d1 == 0 && d2 == 0)); return (d1 + d2); } }
static double getNodeDistance(nodeptr ref, nodeptr best, int mxtips) { int d1 = findRec(ref, best, mxtips, 0), d2 = findRec(ref->back, best, mxtips, 0); assert((d1 > 0 && d2 == 0) || (d2 > 0 && d1 == 0) || (d1 == 0 && d2 == 0)); return ((double)(d1 + d2)); }
void TEditor::find() { TFindDialogRec findRec( findStr, editorFlags ); if( editorDialog( edFind, &findRec ) != cmCancel ) { strcpy( findStr, findRec.find ); editorFlags = findRec.options & ~efDoReplace; doSearchReplace(); } }
bool BinTree<T>::findRec(T &d, Node_T *&p) { if(p->m_dato == d) return true; return findRec(d, p->m_pChildren[p->m_dato < d]); }
int main(int argc, char *argv[]) { /***** operator *****/ char ch; FILE *fp = NULL; char *inFileName = NULL; char *rec_deli = NULL; char *queryStr = NULL; char *timeRange_str = NULL; int timeRangeFlag = 0; int exeResult = 0; while( (ch=getopt(argc, argv, "f:d:q:t:a"))!=-1 ){ switch(ch){ case 'f': //-f input file name inFileName = (char *)malloc( (strlen(optarg)+1) * sizeof(char) ); strcpy(inFileName,optarg); //printf("the file name:%s\n", inFileName); break; case 'd': //-d record delimeter rec_deli = (char *)malloc( (strlen(optarg)+1) * sizeof(char) ); handle_nl(optarg); strcpy(rec_deli, optarg); //printf("record delimeter:%s\n", rec_deli); break; case 'q': //query "@field:value\n" queryStr = (char *)malloc( (strlen(optarg)+1) * sizeof(char) ); handle_nl(optarg); strcpy(queryStr, optarg); //printf("queryStr:%s\n", queryStr); break; case 't': //the count field to ++ timeRange_str = (char *)malloc( (strlen(optarg)+1) * sizeof(char) ); strcpy(timeRange_str, optarg); //printf("timeRange_str:%s\n", timeRange_str); timeRangeFlag = 2; break; case 'a': timeRangeFlag = 1; default: break; } } if( inFileName == NULL){ printf("Error:1, no input file\n"); exit(0); } if( rec_deli == NULL ){ printf("Error:2, no delimeter\n"); exit(0); } if( queryStr == NULL ){ printf("Error:3, no queryStr\n"); exit(0); } if( timeRangeFlag == 0){ printf("Error:4, no timeRange, -a or -t\n"); exit(0); } else if( timeRangeFlag == 1 ){ exeResult = findRec(inFileName, rec_deli, queryStr); } else if( timeRangeFlag == 2 && timeRange_str== NULL ){ printf("Error:4, no timeRange_str\n"); exit(0); } else{ findRec_timeRange(inFileName, rec_deli, queryStr, timeRange_str); } if(exeResult == 1){ printf("@result:A\nFile not exist.\n"); } else if(exeResult == 2){ printf("@result:B\nFile exist, but the record include \"%s\" not exist yet.\n", queryStr); } else if(exeResult == 4){ printf("@result:C\nUnexpected error\n"); } else if(exeResult == 3){ printf("@result:D\nWrong record delimeter.\n"); } else{ printf("@result:E\nThe record update \"%s\" success.\n", timeRange_str); } return 0; }
int main(int argc, char *argv[]) { /***** operator *****/ char ch; FILE *fp = NULL; char *inFileName = NULL; char *rec_deli = NULL; char *queryStr = NULL; char *countField = NULL; int setFlag = 0; int getFlag = 0; int unsetFlag = 0; int exeResult = 0; while( (ch=getopt(argc, argv, "f:d:q:c:sug"))!=-1 ){ switch(ch){ case 'f': //-f input file name inFileName = (char *)malloc( (strlen(optarg)+1) * sizeof(char) ); strcpy(inFileName,optarg); //printf("the file name:%s\n", inFileName); break; case 's': //set setFlag = 1; break; case 'u': unsetFlag = 1; break; case 'g': //get getFlag = 1; break; case 'd': //-d record delimeter rec_deli = (char *)malloc( (strlen(optarg)+1) * sizeof(char) ); handle_nl(optarg); strcpy(rec_deli, optarg); //printf("record delimeter:%s\n", rec_deli); break; case 'q': //query "@field:value\n" queryStr = (char *)malloc( (strlen(optarg)+1) * sizeof(char) ); handle_nl(optarg); strcpy(queryStr, optarg); //printf("queryStr:%s\n", queryStr); break; case 'c': //the count field to ++ countField = (char *)malloc( (strlen(optarg)+1) * sizeof(char) ); strcpy(countField, optarg); //printf("countField:%s\n", countField); break; default: break; } } if( inFileName == NULL){ printf("Error:1, no input file\n"); exit(0); } if( rec_deli == NULL ){ printf("Error:2, no delimeter\n"); exit(0); } if( queryStr == NULL ){ printf("Error:3, no queryStr\n"); exit(0); } if( countField== NULL ){ printf("Error:4, no countField\n"); exit(0); } if(getFlag == 1 && setFlag ==0 && unsetFlag ==0){ findRec(inFileName, rec_deli, queryStr, countField, 0); return 0; } else if(getFlag ==0 && setFlag == 1 && unsetFlag ==0){ exeResult = findRec(inFileName, rec_deli, queryStr, countField, 1); } else if(getFlag ==0 && setFlag ==0 && unsetFlag ==1){ exeResult = findRec(inFileName, rec_deli, queryStr, countField, -1); } else{ printf("Error:5, duplicate option\n"); exit(0); } if(exeResult == 1){ printf("@result:A\nFile not exist.\n"); } else if(exeResult == 2){ printf("@result:B\nFile exist, but the record include \"%s\" not exist yet.\n", queryStr); } else if(exeResult == 4){ printf("@result:C\nUnexpected error\n"); } else if(exeResult == 3){ printf("@result:D\nWrong record delimeter.\n"); } else{ printf("@result:E\nThe record update \"%s\" success.\n", countField); } return 0; }