示例#1
0
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);
    }
}
示例#2
0
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));
}
示例#3
0
void TEditor::find()
{
    TFindDialogRec findRec( findStr, editorFlags );
    if( editorDialog( edFind, &findRec ) != cmCancel )
        {
        strcpy( findStr, findRec.find );
        editorFlags = findRec.options & ~efDoReplace;
        doSearchReplace();
        }
}
示例#4
0
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]);
}
示例#5
0
文件: editDB.c 项目: Cindera/vSearch
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;
}
示例#6
0
文件: editDB.c 项目: Cindera/vSearch
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;
}