BasicRaycast::BasicRaycast(const OgreNewt::World* world, const Ogre::Vector3& startpt, const Ogre::Vector3& endpt, bool sorted) : Raycast() { go( world, startpt, endpt, sorted ); }
static void handle(int sig) { go(); exit(0); }
int main() { int val; /* Receiver waits for sender. */ chan ch1 = chmake(int, 0); go(sender(chdup(ch1), 1, 333)); val = chr(ch1, int); assert(val == 333); chclose(ch1); /* Sender waits for receiver. */ chan ch2 = chmake(int, 0); go(sender(chdup(ch2), 0, 444)); val = chr(ch2, int); assert(val == 444); chclose(ch2); /* Test two simultaneous senders. */ chan ch3 = chmake(int, 0); go(sender(chdup(ch3), 0, 888)); go(sender(chdup(ch3), 0, 999)); val = chr(ch3, int); assert(val == 888); yield(); val = chr(ch3, int); assert(val == 999); chclose(ch3); /* Test two simultaneous receivers. */ chan ch4 = chmake(int, 0); go(receiver(chdup(ch4), 333)); go(receiver(chdup(ch4), 444)); chs(ch4, int, 333); chs(ch4, int, 444); chclose(ch4); /* Test typed channels. */ chan ch5 = chmake(char, 0); go(charsender(chdup(ch5), 111)); char charval = chr(ch5, char); assert(charval == 111); chclose(ch5); chan ch6 = chmake(struct foo, 0); struct foo foo1 = {555, 222}; go(structsender(chdup(ch6), foo1)); struct foo foo2 = chr(ch6, struct foo); assert(foo2.first == 555 && foo2.second == 222); chclose(ch6); /* Test message buffering. */ chan ch7 = chmake(int, 2); chs(ch7, int, 222); chs(ch7, int, 333); val = chr(ch7, int); assert(val == 222); val = chr(ch7, int); assert(val == 333); chs(ch7, int, 444); val = chr(ch7, int); assert(val == 444); chs(ch7, int, 555); chs(ch7, int, 666); val = chr(ch7, int); assert(val == 555); val = chr(ch7, int); assert(val == 666); chclose(ch7); /* Test simple chdone() scenarios. */ chan ch8 = chmake(int, 0); chdone(ch8, int, 777); val = chr(ch8, int); assert(val == 777); val = chr(ch8, int); assert(val == 777); val = chr(ch8, int); assert(val == 777); chclose(ch8); chan ch9 = chmake(int, 10); chdone(ch9, int, 888); val = chr(ch9, int); assert(val == 888); val = chr(ch9, int); assert(val == 888); chclose(ch9); chan ch10 = chmake(int, 10); chs(ch10, int, 999); chdone(ch10, int, 111); val = chr(ch10, int); assert(val == 999); val = chr(ch10, int); assert(val == 111); val = chr(ch10, int); assert(val == 111); chclose(ch10); chan ch11 = chmake(int, 1); chs(ch11, int, 222); chdone(ch11, int, 333); val = chr(ch11, int); assert(val == 222); val = chr(ch11, int); assert(val == 333); chclose(ch11); /* Test whether chdone() unblocks all receivers. */ chan ch12 = chmake(int, 0); chan ch13 = chmake(int, 0); go(receiver2(chdup(ch12), 444, chdup(ch13))); go(receiver2(chdup(ch12), 444, chdup(ch13))); chdone(ch12, int, 444); val = chr(ch13, int); assert(val == 0); val = chr(ch13, int); assert(val == 0); chclose(ch13); chclose(ch12); /* Test a combination of blocked sender and an item in the channel. */ chan ch14 = chmake(int, 1); chs(ch14, int, 1); go(sender(chdup(ch14), 0, 2)); val = chr(ch14, int); assert(val == 1); val = chr(ch14, int); assert(val == 2); chclose(ch14); pid_t pid; /* Test panic when chs will deadlock. */ pid = fork(); assert(pid >= 0); if (pid == 0) { alarm(1); chan ch = chmake(int, 0); signal(SIGABRT, expected_abort); chs(ch, int, 42); fail(); }
vertex* get_link(vertex *v) { if (!v->link) v->link = v->p->p ? go(get_link(v->p), v->pch) : v->p; return v->link; }
int main(int argc, char**){ srand(time(NULL)); #ifdef VDEBUG if(argc>1) vdebug=true; #endif timeval startTime, endTime; std::cout.sync_with_stdio(0); std::unordered_map<std::string, int> gameParams; std::istringstream istream; std::string oneLine, tmpString; while(std::getline(std::cin, oneLine)){ int paramValue; istream.clear(); istream.str(oneLine); istream >> tmpString >> paramValue; if(tmpString=="ready") break; gameParams[tmpString] = paramValue; } _gameData gameData(gameParams["rows"], gameParams["cols"], gameParams["viewradius2"], gameParams["attackradius2"]); go(); while(std::getline(std::cin, oneLine)){ gettimeofday(&startTime, NULL); istream.clear(); istream.str(oneLine); istream >> tmpString; LOG("turn: " << gameData.turn); if(tmpString=="end"){break;}; gameData.perTurnReset(); while(getline(std::cin, oneLine)){ istream.clear(); istream.str(oneLine); pos f1f2; int f3=-1; istream >> tmpString >> f1f2.row >> f1f2.col >> f3; if(tmpString=="go") break; if(tmpString=="a"){gameData.receiveAnt(f1f2, f3); continue;}; if(tmpString=="w"){gameData.receiveWater(f1f2); continue;}; if(tmpString=="f"){gameData.receiveFood(f1f2); continue;}; if(tmpString=="h"){gameData.receiveHill(f1f2, f3); continue;}; } gameData.processAnts(); gameData.processFood(); gameData.processHills(); gameData.assocFoodWithAnt(); if(gameData.ant_count_water_mark>15){ gameData.captureEnemyHills(); } gameData.clusterAnts(); gameData.computeClusterPrioritiesAndDispatch(); gameData.computeThreat(); gameData.reachEnemy(); gameData.wanderAntsAroundCompositeMod(); if(vdebug){ gameData.debugDraw(); gameData.toPPM(); } gameData.keepHillInSightOverride(); gameData.outputCoordinates(); gettimeofday(&endTime, NULL); LOG("turn took " << elapsedTime(startTime, endTime) << "ms"); go(); } return 0; }
/* * main.c * Author: Ian R Goodbody * Function: Implements maze navigation */ void main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer initRangeFinders(); initMotors(); stop(); P1DIR |= LEFT_LED|RIGHT_LED; P1OUT &= ~(LEFT_LED|RIGHT_LED); int fBuffer[BUFFER_LN]; // Code probably unnecessary but it cannot hurt int lBuffer[BUFFER_LN]; int rBuffer[BUFFER_LN]; int fMedian; int lMedian; int rMedian; unsigned int lWheelSpeed = 4040; unsigned int rWheelSpeed = 4000; unsigned int runTime = 350; int i; fillBuffers(fBuffer, lBuffer, rBuffer); while(1) { P1OUT &= ~(LEFT_LED|RIGHT_LED); // turn off LEDs stop(); for (i = BUFFER_LN; i > 0; i--) { readFront(fBuffer); waitMiliseconds(1); readLeft(lBuffer); waitMiliseconds(1); readRight(rBuffer); waitMiliseconds(1); } fMedian = median(fBuffer); lMedian = median(lBuffer); rMedian = median(rBuffer); if(fMedian < 0x01F0) // Crash into wall test; ~2.5 inch threshold { if(lMedian < 0x01FF) // There is no wall remotely close to the left side, { // Initiate sweeping turn lWheelSpeed = 2600; rWheelSpeed = 5000; } else if(lMedian < 0x0266) // Getting too far from the wall start turning in { P1OUT |= LEFT_LED; // Red LED on, green off P1OUT &= ~RIGHT_LED; rWheelSpeed = 4270; lWheelSpeed = 4040; } else if(lMedian > 0x02E4) // Getting too close to the wall start turning out { P1OUT |= RIGHT_LED; // Green LED on, red off P1OUT &= ~LEFT_LED; rWheelSpeed = 3900; lWheelSpeed = 4040; } else // Acceptable distance from wall, cruise forward normally { //P1OUT |= RIGHT_LED; P1OUT &= ~(RIGHT_LED|LEFT_LED); rWheelSpeed = 4000; lWheelSpeed = 4040; } setLeftWheel(lWheelSpeed, FORWARD); setRightWheel(rWheelSpeed, FORWARD); runTime = 350; } else { // About to run into a wall, initiate hard right turn P1OUT |= RIGHT_LED|LEFT_LED; setLeftWheel(5080,FORWARD); setRightWheel(5260, BACKWARD); runTime = 450; } go(); waitMiliseconds(runTime); } }