static PaError DoTest( int flags ) { PaStream *stream; PaError err = paNoError; paTestData data; PaStreamParameters outputParameters; InitializeTestData( &data ); outputParameters.device = Pa_GetDefaultOutputDevice(); if (outputParameters.device == paNoDevice) { fprintf(stderr,"Error: No default output device.\n"); goto error; } outputParameters.channelCount = 2; outputParameters.hostApiSpecificStreamInfo = NULL; outputParameters.sampleFormat = paFloat32; outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultHighOutputLatency; /* Open an audio I/O stream. */ err = Pa_OpenStream( &stream, NULL, /* no input */ &outputParameters, SAMPLE_RATE, FRAMES_PER_BUFFER, /* frames per buffer */ paClipOff | flags, /* we won't output out of range samples so don't bother clipping them */ patestCallback, &data ); if( err != paNoError ) goto error; err = Pa_StartStream( stream ); if( err != paNoError ) goto error; printf("hear \"BEEP\"\n" ); fflush(stdout); while( ( err = Pa_IsStreamActive( stream ) ) == 1 ) Pa_Sleep(SLEEP_MSEC); if( err < 0 ) goto error; err = Pa_StopStream( stream ); if( err != paNoError ) goto error; err = Pa_CloseStream( stream ); if( err != paNoError ) goto error; return err; error: return err; }
int main(void) { // Initailize testing data InitializeTestData (); // Add all test data in an array NODE NodeArray[] = {NodeA, NodeB, NodeC, NodeD, NodeE, NodeF}; //The path array count will just have NodeArray count minus 1. // Initialize Path Array. int PathArrayCount = GET_ARRAY_COUNT(NodeArray) -1; PATH ChoosedPath[PathArrayCount]; memset (ChoosedPath, 0, sizeof(ChoosedPath)); while(PathArrayCount--) { int Row = 0, Column = 0; // Initailize pointer PATH PtrPath; //PtrPath = &ChoosedPath[PathArrayCount]; PtrPath.Distance = -1; //for checking // Double for loop for Array for(Row =0; Row< GET_ARRAY_COUNT(NodeArray); Row++) { NODE *Ptr = &NodeArray[Row]; for (Column = 0; Column < Ptr->LinkCount; Column++) { // 現在的值 PATH TmpPath; TmpPath.Distance = Ptr->PtrList[Column].Distance; // 兩個Node Name TmpPath.Node[0] = Ptr; TmpPath.Node[1] = Ptr->PtrList[Column].Node; #if DEBUG_CLOSE printf("TMP %s and %s: %d\n", TmpPath.Node[0].NodeName, TmpPath.Node[1].NodeName, TmpPath.Distance); #endif // Checking if (PtrPath.Distance == -1 || PtrPath.Distance> TmpPath.Distance) { if (!IsChoosed(&TmpPath, ChoosedPath, GET_ARRAY_COUNT(ChoosedPath) ) && !IsReturnToRoot(TmpPath.Node[1], TmpPath.Node[0], ChoosedPath, GET_ARRAY_COUNT(ChoosedPath), NULL) ) { PtrPath = TmpPath; } } } } if (PtrPath.Distance != -1) { memcpy (&ChoosedPath[PathArrayCount], &PtrPath, sizeof (PATH)); printf("===== Ans %s and %s : %d ========= \n", PtrPath.Node[0]->NodeName, PtrPath.Node[1]->NodeName, PtrPath.Distance); } else { // Finish or error. break; } } FreeTestData(); return 0; }