void Astar::starseach(int fid) { int col = ((AstarItem *)close->objectAtIndex(fid))->getcol(); int row = ((AstarItem *)close->objectAtIndex(fid))->getrow(); //搜索目前点的上下左右四个方向 int mycol = col; int myrow = row - 1; if(myrow >= 0 && checkmap(mycol,myrow)){ if(checkOpen(mycol,myrow,fid) && checkclose(mycol,myrow)){ addtoopen(mycol,myrow,fid); } } mycol = col - 1; myrow = row; if(mycol >= 0 && checkmap(mycol,myrow)){ if(checkOpen(mycol,myrow,fid) && checkclose(mycol,myrow)){ addtoopen(mycol,myrow,fid); } } mycol = col; myrow = row + 1; if(myrow < map->getMapSize().width && checkmap(mycol,myrow)){ if(checkOpen(mycol,myrow,fid) && checkclose(mycol,myrow)){ addtoopen(mycol,myrow,fid); } } mycol = col + 1; myrow = row; if(mycol < map->getMapSize().height && checkmap(mycol,myrow)){ if(checkOpen(mycol,myrow,fid) && checkclose(mycol,myrow)){ addtoopen(mycol,myrow,fid); } } }
int main(int argc, char *argv[]) { int ierr=0, returnierr=0; #ifdef EPETRA_MPI MPI_Init(&argc,&argv); Epetra_MpiComm Comm(MPI_COMM_WORLD); #else Epetra_SerialComm Comm; #endif bool verbose = false; // Check if we should print results to standard out if (argc>1) if (argv[1][0]=='-' && argv[1][1]=='v') verbose = true; if (!verbose) { Comm.SetTracebackMode(0); // This should shut down any error traceback reporting } int MyPID = Comm.MyPID(); int NumProc = Comm.NumProc(); if (verbose && MyPID==0) cout << Epetra_Version() << endl << endl; if (verbose) cout << Comm << endl; bool verbose1 = verbose; if (verbose) verbose = (MyPID==0); int NumMyElements = 10000; int NumMyElements1 = NumMyElements; // Used for local map long long NumGlobalElements = NumMyElements*NumProc+EPETRA_MIN(NumProc,3); if (MyPID < 3) NumMyElements++; int IndexBase = 0; bool DistributedGlobal = (NumGlobalElements>NumMyElements); Epetra_Map* Map; // Test exceptions if (verbose) cout << "*******************************************************************************************" << endl << " Testing Exceptions (Expect error messages if EPETRA_NO_ERROR_REPORTS is not defined" << endl << "*******************************************************************************************" << endl << endl << endl; try { if (verbose) cout << "Checking Epetra_Map(-2, IndexBase, Comm)" << endl; Map = new Epetra_Map((long long)-2, IndexBase, Comm); } catch (int Error) { if (Error!=-1) { if (Error!=0) { EPETRA_TEST_ERR(Error,returnierr); if (verbose) cout << "Error code should be -1" << endl; } else { cout << "Error code = " << Error << "Should be -1" << endl; returnierr+=1; } } else if (verbose) cout << "Checked OK\n\n" << endl; } try { if (verbose) cout << "Checking Epetra_Map(2, 3, IndexBase, Comm)" << endl; Map = new Epetra_Map((long long)2, 3, IndexBase, Comm); } catch (int Error) { if (Error!=-4) { if (Error!=0) { EPETRA_TEST_ERR(Error,returnierr); if (verbose) cout << "Error code should be -4" << endl; } else { cout << "Error code = " << Error << "Should be -4" << endl; returnierr+=1; } } else if (verbose) cout << "Checked OK\n\n" << endl; } if (verbose) cerr << flush; if (verbose) cout << flush; Comm.Barrier(); if (verbose) cout << endl << endl << "*******************************************************************************************" << endl << " Testing valid constructor now......................................................" << endl << "*******************************************************************************************" << endl << endl << endl; // Test Epetra-defined uniform linear distribution constructor Map = new Epetra_Map(NumGlobalElements, IndexBase, Comm); if (verbose) cout << "Checking Epetra_Map(NumGlobalElements, IndexBase, Comm)" << endl; ierr = checkmap(*Map, NumGlobalElements, NumMyElements, 0, IndexBase, Comm, DistributedGlobal); EPETRA_TEST_ERR(ierr,returnierr); if (verbose && ierr==0) cout << "Checked OK\n\n" <<endl; delete Map; // Test User-defined linear distribution constructor Map = new Epetra_Map(NumGlobalElements, NumMyElements, IndexBase, Comm); if (verbose) cout << "Checking Epetra_Map(NumGlobalElements, NumMyElements, IndexBase, Comm)" << endl; ierr = checkmap(*Map, NumGlobalElements, NumMyElements, 0, IndexBase, Comm, DistributedGlobal); EPETRA_TEST_ERR(ierr,returnierr); if (verbose && ierr==0) cout << "Checked OK\n\n" <<endl; delete Map; // Test User-defined arbitrary distribution constructor // Generate Global Element List. Do in reverse for fun! long long * MyGlobalElements = new long long[NumMyElements]; int MaxMyGID = (Comm.MyPID()+1)*NumMyElements-1+IndexBase; if (Comm.MyPID()>2) MaxMyGID+=3; for (int i = 0; i<NumMyElements; i++) MyGlobalElements[i] = MaxMyGID-i; Map = new Epetra_Map(NumGlobalElements, NumMyElements, MyGlobalElements, IndexBase, Comm); if (verbose) cout << "Checking Epetra_Map(NumGlobalElements, NumMyElements, MyGlobalElements, IndexBase, Comm)" << endl; ierr = checkmap(*Map, NumGlobalElements, NumMyElements, MyGlobalElements, IndexBase, Comm, DistributedGlobal); EPETRA_TEST_ERR(ierr,returnierr); if (verbose && ierr==0) cout << "Checked OK\n\n" <<endl; // Test Copy constructor Epetra_Map* Map1 = new Epetra_Map(*Map); // Test SameAs() method bool same = Map1->SameAs(*Map); EPETRA_TEST_ERR(!(same==true),ierr);// should return true since Map1 is a copy of Map Epetra_BlockMap* Map2 = new Epetra_Map(NumGlobalElements, NumMyElements, MyGlobalElements, IndexBase, Comm); same = Map2->SameAs(*Map); EPETRA_TEST_ERR(!(same==true),ierr); // Map and Map2 were created with the same sets of parameters delete Map2; // now test SameAs() on a map that is different Map2 = new Epetra_Map(NumGlobalElements, NumMyElements, MyGlobalElements, IndexBase-1, Comm); same = Map2->SameAs(*Map); EPETRA_TEST_ERR(!(same==false),ierr); // IndexBases are different delete Map2; // Back to testing copy constructor if (verbose) cout << "Checking Epetra_Map(*Map)" << endl; ierr = checkmap(*Map1, NumGlobalElements, NumMyElements, MyGlobalElements, IndexBase, Comm, DistributedGlobal); EPETRA_TEST_ERR(ierr,returnierr); if (verbose && ierr==0) cout << "Checked OK\n\n" <<endl; Epetra_Map* SmallMap = 0; if (verbose1) { // Build a small map for test cout. Use 10 elements from current map long long* MyEls = Map->MyGlobalElements64(); int IndBase = Map->IndexBase(); int MyLen = EPETRA_MIN(10+Comm.MyPID(),Map->NumMyElements()); SmallMap = new Epetra_Map((long long)-1, MyLen, MyEls, IndBase, Comm); } delete [] MyGlobalElements; delete Map; delete Map1; // Test reference-counting in Epetra_Map if (verbose) cout << "Checking Epetra_Map reference counting" << endl; ierr = checkMapDataClass(Comm, verbose); EPETRA_TEST_ERR(ierr,returnierr); if (verbose && ierr==0) cout << "Checked OK\n\n" <<endl; // Test LocalMap constructor Epetra_LocalMap* LocalMap = new Epetra_LocalMap((long long)NumMyElements1, IndexBase, Comm); if (verbose) cout << "Checking Epetra_LocalMap(NumMyElements1, IndexBase, Comm)" << endl; ierr = checkmap(*LocalMap, NumMyElements1, NumMyElements1, 0, IndexBase, Comm, false); EPETRA_TEST_ERR(ierr,returnierr); if (verbose && ierr==0) cout << "Checked OK\n\n" <<endl; // Test Copy constructor Epetra_LocalMap* LocalMap1 = new Epetra_LocalMap(*LocalMap); if (verbose) cout << "Checking Epetra_LocalMap(*LocalMap)" << endl; ierr = checkmap(*LocalMap1, NumMyElements1, NumMyElements1, 0, IndexBase, Comm, false); EPETRA_TEST_ERR(ierr,returnierr); if (verbose && ierr==0) cout << "Checked OK\n\n" <<endl; delete LocalMap1; delete LocalMap; // Test reference-counting in Epetra_LocalMap if (verbose) cout << "Checking Epetra_LocalMap reference counting" << endl; ierr = checkLocalMapDataClass(Comm, verbose); EPETRA_TEST_ERR(ierr,returnierr); if (verbose && ierr==0) cout << "Checked OK\n\n" <<endl; // Test output if (verbose1) { if (verbose) cout << "Test ostream << operator" << endl << flush; cout << *SmallMap; delete SmallMap; } #ifdef EPETRA_MPI MPI_Finalize(); #endif return returnierr; }
int main(int argc, char *argv[]) { int pkgfmt = 0; /* Makes more sense as a pointer, but */ /* 18N is compromised. */ char file[PATH_MAX+1], *abi_sym_ptr, *vfstab_file = NULL; char *all_pkgs[4] = {"all", NULL}; char **category = NULL; char *catg_arg = NULL; int c; int n = 0; char *prog, *Rvalue = NULL, *dvalue = NULL; int dbcreate = 0; int pathtype; /* initialize locale mechanism */ #if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */ #define TEXT_DOMAIN "SYS_TEST" #endif (void) textdomain(TEXT_DOMAIN); /* determine program name */ prog = set_prog_name(argv[0]); /* establish installation root directory */ if (!set_inst_root(getenv("PKG_INSTALL_ROOT"))) { progerr(gettext(ERR_ROOT_SET)); quit(1); } /* check if not ABI compliant mode */ abi_sym_ptr = getenv("PKG_NONABI_SYMLINKS"); if (abi_sym_ptr && strncasecmp(abi_sym_ptr, "TRUE", 4) == 0) { set_nonABI_symlinks(); } /* bugId 4012147 */ if ((uniTmp = getenv("PKG_NO_UNIFIED")) != NULL) map_client = 0; while ((c = getopt(argc, argv, "Y:R:e:p:d:nLli:vaV:Mm:cqxfQP:?")) != EOF) { switch (c) { case 'p': pathlist[npaths] = strtok(optarg, " , "); if (pathlist[npaths++] == NULL) { progerr(gettext(ERR_POPTION)); quit(1); } while (pathlist[npaths] = strtok(NULL, " , ")) { if (npaths++ >= MAXPATHS) { progerr(gettext(ERR_MAXPATHS), MAXPATHS); quit(1); } } break; case 'd': dvalue = optarg; dflag = 1; break; case 'n': nflag++; break; case 'M': map_client = 0; break; /* * Allow admin to establish the client filesystem using a * vfstab-like file of stable format. */ case 'V': vfstab_file = flex_device(optarg, 2); map_client = 1; break; case 'f': #if 0 if (getuid()) { progerr(gettext(ERR_NOTROOT), prog); quit(1); } #endif fflag++; break; case 'i': setpathlist(optarg); break; case 'v': vflag++; break; case 'l': lflag++; break; case 'L': Lflag++; break; case 'x': if (aflag < 0) aflag = 0; if (cflag < 0) cflag = 0; xflag++; break; case 'q': qflag++; break; case 'a': if (cflag < 0) cflag = 0; aflag = 1; break; case 'c': if (aflag < 0) aflag = 0; cflag = 1; break; case 'e': envfile = optarg; break; case 'm': mapfile = optarg; break; case 'R': Rvalue = optarg; Rflag = 1; break; case 'Y': catg_arg = strdup(optarg); if ((category = get_categories(catg_arg)) == NULL) { progerr(gettext(ERR_CAT_INV), catg_arg); quit(1); } else if (is_not_valid_length(category)) { progerr(gettext(ERR_CAT_LNGTH)); quit(1); } break; case 'Q': dbcreate++; break; case 'P': ppathlist[npaths] = strtok(optarg, " , "); if ((ppathlist[npaths] == NULL) || (ppathlist[npaths][0] == '-')) { progerr(gettext(ERR_PARTIAL_POPTION)); quit(1); } npaths++; while (ppathlist[npaths] = strtok(NULL, " , ")) { if (npaths++ >= MAXPATHS) { progerr(gettext(ERR_MAXPATHS), MAXPATHS); quit(1); } } break; default: usage(); } } /* Check for incompatible options */ if (dflag && Rflag) usage(); /* Check for root dir and device dir if set */ if (Rflag) { if (!set_inst_root(Rvalue)) { progerr(gettext(ERR_ROOT_CMD)); quit(1); } } if (dflag) device = flex_device(dvalue, 1); if (lflag || Lflag) { /* we're only supposed to list information */ if ((cflag >= 0) || (aflag >= 0) || qflag || xflag || fflag || nflag || vflag) usage(); } set_PKGpaths(get_inst_root()); if (catg_arg != NULL && device == NULL) { if (argc - optind) { usage(); } pkg = gpkglist(pkgdir, all_pkgs, category); if (pkg == NULL) { progerr(gettext(ERR_CAT_FND), catg_arg); quit(1); } else { for (pkgcnt = 0; pkg[pkgcnt] != NULL; pkgcnt++); } } else if (catg_arg != NULL && optind < argc) { usage(); } else { pkg = &argv[optind]; pkgcnt = (argc - optind); } environ = NULL; /* Sever the parent environment. */ if (vcfile() == 0) { quit(99); } errflg = 0; if (mapfile) { /* check for incompatible options */ if (device || pkgcnt) usage(); put_path_params(); /* Restore what's needed. */ /* send pathtype if partial path */ pathtype = (ppathlist[0] != NULL) ? 1 : 0; if (checkmap(0, (device != NULL), mapfile, envfile, NULL, NULL, pathtype)) errflg++; } else if (device) { /* check for incompatible options */ if ((cflag >= 0) || (aflag >= 0)) usage(); if (qflag || xflag || nflag || envfile) usage(); tmpdir = NULL; if ((spooldir = devattr(device, "pathname")) == NULL) spooldir = device; if (isdir(spooldir)) { char template[] = "/var/tmp/spoolXXXXXX"; close(mkstemp(template));
int gameloop(void) { int viewx, viewy, ex = 0, option, redraw = 1, nx, ny, mb; viewx = men.x - (WIN_X-1)/2 /*10*/; if( viewx < 0 ) viewx = 0; if( viewx > DIM_X-WIN_X+1/*40*/ ) viewx = DIM_X-WIN_X+1/*40*/; viewy = men.y - (WIN_Y-1)/2 /*5*/; if( viewy < 0 ) viewy = 0; if( viewy > DIM_Y-WIN_Y+1/*20*/ ) viewy = DIM_Y-WIN_Y+1/*20*/; while(ex==0) { if(redraw > 0) { display_map( viewx, viewy ); redraw = 0; } displaymen( viewx, viewy ); processing( viewx, viewy ); clearmen( viewx, viewy); mb = m_button(); if(mb==1) { if(m_ypos() < 180) { nx = ((men.x - viewx)*16) - m_xpos(); ny = ((men.y - viewy)*16) - m_ypos(); if( (nx > 0) & (checkmap( men.x-1, men.y ) > 0) ) men.x--; if( (nx < -16) & (checkmap( men.x+1, men.y ) > 0) ) men.x++; if( (ny > 0) & (checkmap( men.x, men.y-1 ) > 0) ) men.y--; if( (ny < -16) & (checkmap( men.x, men.y+1 ) > 0) ) men.y++; redraw=1; } else { nx = m_xpos(); if( nx > 220 & nx < 240 ) fenceit( viewx, viewy ); if( nx > 240 & nx < 260 ) homeit(viewx, viewy ); if( nx > 260 & nx < 280 ) { displayall(); redraw = 2; } if( nx > 280 & nx < 300 ) ex=1; } delay(250); } if(bioskey(1)!=0) { option = bioskey(0); } else { option = 0; } switch(option) { case 283: ex = 1; break; case 19712: if( (men.x < DIM_X-1/*59*/) & (checkmap( men.x + 1 , men.y ) > 0) ) men.x++; redraw = 1; break; case 19200: if( (men.x > 0) & (checkmap( men.x - 1 , men.y ) > 0) ) men.x--; redraw = 1; break; case 20480: if( (men.y < DIM_Y/*30*/) & (checkmap( men.x , men.y + 1 ) > 0) ) men.y++; redraw = 1; break; case 18432: if( (men.y > 0) & (checkmap( men.x , men.y - 1 ) > 0) ) men.y--; redraw = 1; break; case 18688: displayall(); redraw = 2; break; case 20992: fenceit( viewx, viewy ); break; case 18176: homeit( viewx, viewy ); break; default: break; } check_greble( viewx, viewy ); if( redraw == 1 ) { redraw = 0; if( ( men.x - 2 ) < viewx ) { viewx = men.x - (WIN_X-1)/2 /*10*/; if( viewx < 0 ) viewx = 0; redraw = 1; } if( ( men.x + 2 ) > ( viewx + WIN_X-1/*20*/ ) ) { viewx = men.x - (WIN_X-1)/2 /*10*/; if( viewx > DIM_X-WIN_X+1/*40*/ ) viewx = DIM_X-WIN_X+1/*40*/; redraw = 1; } if( ( men.y - 2 ) < viewy ) { viewy = men.y - (WIN_Y-1)/2 /*5*/; if( viewy < 0 ) viewy = 0; redraw = 1; } if( ( men.y + 2 ) > ( viewy + WIN_Y-1/*10*/ ) ) { viewy = men.y - (WIN_Y-1)/2 /*5*/; if( viewy > DIM_Y-WIN_Y+1 /*20*/ ) viewy = DIM_Y-WIN_Y+1 /*20*/; redraw = 1; } } } }