/**** Local functions definitions. ****/ static TA_RetCode rangeTestFunction( TA_Libc *libHandle, TA_Integer startIdx, TA_Integer endIdx, TA_Real *outputBuffer, TA_Integer *outBegIdx, TA_Integer *outNbElement, TA_Integer *lookback, void *opaqueData, unsigned int outputNb ) { TA_RetCode retCode; TA_RangeTestParam *testParam; (void)outputNb; testParam = (TA_RangeTestParam *)opaqueData; if( testParam->test->theFunction == TA_MIN_TEST ) { retCode = TA_MIN( libHandle, startIdx, endIdx, testParam->close, testParam->test->optInTimePeriod_0, outBegIdx, outNbElement, outputBuffer ); *lookback = TA_MIN_Lookback( testParam->test->optInTimePeriod_0 ); } else if( testParam->test->theFunction == TA_MAX_TEST ) { retCode = TA_MAX( libHandle, startIdx, endIdx, testParam->close, testParam->test->optInTimePeriod_0, outBegIdx, outNbElement, outputBuffer ); *lookback = TA_MAX_Lookback( testParam->test->optInTimePeriod_0 ); } else retCode = TA_INTERNAL_ERROR(129); return retCode; }
/**** Local functions definitions. ****/ static TA_RetCode rangeTestFunction( TA_Integer startIdx, TA_Integer endIdx, TA_Real *outputBuffer, TA_Integer *outputBufferInt, TA_Integer *outBegIdx, TA_Integer *outNbElement, TA_Integer *lookback, void *opaqueData, unsigned int outputNb, unsigned int *isOutputInteger ) { TA_RetCode retCode; TA_RangeTestParam *testParam; TA_Real *dummyBufferReal; TA_Real *out1Real; TA_Real *out2Real; TA_Integer *dummyBufferInt; TA_Integer *out1Int; TA_Integer *out2Int; (void)outputNb; (void)outputBufferInt; *isOutputInteger = 0; testParam = (TA_RangeTestParam *)opaqueData; dummyBufferReal = TA_Malloc( ((endIdx-startIdx)+1)*sizeof(TA_Real)); if( !dummyBufferReal ) return TA_ALLOC_ERR; dummyBufferInt = TA_Malloc( ((endIdx-startIdx)+1)*sizeof(TA_Integer)); if( !dummyBufferInt ) { TA_Free( dummyBufferReal ); return TA_ALLOC_ERR; } switch( outputNb ) { case 0: out1Real = outputBuffer; out2Real = dummyBufferReal; out1Int = outputBufferInt; out2Int = dummyBufferInt; break; case 1: out1Real = dummyBufferReal; out2Real = outputBuffer; out1Int = dummyBufferInt; out2Int = outputBufferInt; break; default: TA_Free( dummyBufferReal ); return TA_BAD_PARAM; } switch( testParam->test->theFunction ) { case TA_MIN_TEST: retCode = TA_MIN( startIdx, endIdx, testParam->close, testParam->test->optInTimePeriod, outBegIdx, outNbElement, outputBuffer ); *lookback = TA_MIN_Lookback( testParam->test->optInTimePeriod ); break; case TA_MAX_TEST: retCode = TA_MAX( startIdx, endIdx, testParam->close, testParam->test->optInTimePeriod, outBegIdx, outNbElement, outputBuffer ); *lookback = TA_MAX_Lookback( testParam->test->optInTimePeriod ); break; case TA_MINMAX_TEST: retCode = TA_MINMAX( startIdx, endIdx, testParam->close, testParam->test->optInTimePeriod, outBegIdx, outNbElement, out1Real, out2Real ); *lookback = TA_MINMAX_Lookback( testParam->test->optInTimePeriod ); break; case TA_MINMAXINDEX_TEST: retCode = TA_MINMAXINDEX( startIdx, endIdx, testParam->close, testParam->test->optInTimePeriod, outBegIdx, outNbElement, out1Int, out2Int ); *lookback = TA_MINMAXINDEX_Lookback( testParam->test->optInTimePeriod ); *isOutputInteger = 1; break; case TA_MININDEX_TEST: retCode = TA_MININDEX( startIdx, endIdx, testParam->close, testParam->test->optInTimePeriod, outBegIdx, outNbElement, out1Int ); *lookback = TA_MININDEX_Lookback( testParam->test->optInTimePeriod ); *isOutputInteger = 1; break; case TA_MAXINDEX_TEST: retCode = TA_MAXINDEX( startIdx, endIdx, testParam->close, testParam->test->optInTimePeriod, outBegIdx, outNbElement, out1Int ); *lookback = TA_MAXINDEX_Lookback( testParam->test->optInTimePeriod ); *isOutputInteger = 1; break; default: retCode = TA_INTERNAL_ERROR(129); break; } TA_Free( dummyBufferReal ); TA_Free( dummyBufferInt ); return retCode; }