         static int SarextLookback( double           optInStartValue  /* From -179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 to 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 */, double           optInOffsetOnReverse  /* From 0 to 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 */, double           optInAccelerationInitLong  /* From 0 to 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 */, double           optInAccelerationLong  /* From 0 to 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 */, double           optInAccelerationMaxLong  /* From 0 to 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 */, double           optInAccelerationInitShort  /* From 0 to 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 */, double           optInAccelerationShort  /* From 0 to 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 */, double           optInAccelerationMaxShort  /* From 0 to 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 */ );

#if defined( _MANAGED ) && defined( USE_SUBARRAY )
         static enum class RetCode Sarext( int    startIdx,
                                           int    endIdx,
                                           SubArray<double>^ inHigh,
                                           SubArray<double>^ inLow,
                                           double optInStartValue,
                                           double optInOffsetOnReverse,
                                           double optInAccelerationInitLong,
                                           double optInAccelerationLong,
                                           double optInAccelerationMaxLong,
                                           double optInAccelerationInitShort,
                                           double optInAccelerationShort,
                                           double optInAccelerationMaxShort,
                                           [Out]int%    outBegIdx,
                                           [Out]int%    outNBElement,
                                           SubArray<double>^  outReal );

         static enum class RetCode Sarext( int    startIdx,
                                           int    endIdx,
                                           SubArray<float>^ inHigh,
                                           SubArray<float>^ inLow,
                                           double optInStartValue,
                                           double optInOffsetOnReverse,
                                           double optInAccelerationInitLong,
                                           double optInAccelerationLong,
                                           double optInAccelerationMaxLong,
                                           double optInAccelerationInitShort,
                                           double optInAccelerationShort,
                                           double optInAccelerationMaxShort,
                                           [Out]int%    outBegIdx,
                                           [Out]int%    outNBElement,
                                           SubArray<double>^  outReal );

         static enum class RetCode Sarext( int    startIdx,
                                           int    endIdx,
                                           cli::array<double>^ inHigh,
                                           cli::array<double>^ inLow,
                                           double optInStartValue,
                                           double optInOffsetOnReverse,
                                           double optInAccelerationInitLong,
                                           double optInAccelerationLong,
                                           double optInAccelerationMaxLong,
                                           double optInAccelerationInitShort,
                                           double optInAccelerationShort,
                                           double optInAccelerationMaxShort,
                                           [Out]int%    outBegIdx,
                                           [Out]int%    outNBElement,
                                           cli::array<double>^  outReal )
         { return Sarext( startIdx, endIdx,
                         gcnew SubArrayFrom1D<double>(inHigh,0),
                         gcnew SubArrayFrom1D<double>(inLow,0),
                         optInStartValue,
                         optInOffsetOnReverse,
                         optInAccelerationInitLong,
                         optInAccelerationLong,
                         optInAccelerationMaxLong,
                         optInAccelerationInitShort,
                         optInAccelerationShort,
                         optInAccelerationMaxShort,
             outBegIdx,
             outNBElement,
               gcnew SubArrayFrom1D<double>(outReal,0) );
         }
         static enum class RetCode Sarext( int    startIdx,
                                           int    endIdx,
                                           cli::array<float>^ inHigh,
                                           cli::array<float>^ inLow,
                                           double optInStartValue,
                                           double optInOffsetOnReverse,
                                           double optInAccelerationInitLong,
                                           double optInAccelerationLong,
                                           double optInAccelerationMaxLong,
                                           double optInAccelerationInitShort,
                                           double optInAccelerationShort,
                                           double optInAccelerationMaxShort,
                                           [Out]int%    outBegIdx,
                                           [Out]int%    outNBElement,
                                           cli::array<double>^  outReal )
         { return Sarext( startIdx, endIdx,
                         gcnew SubArrayFrom1D<float>(inHigh,0),
                         gcnew SubArrayFrom1D<float>(inLow,0),
                         optInStartValue,
                         optInOffsetOnReverse,
                         optInAccelerationInitLong,
                         optInAccelerationLong,
                         optInAccelerationMaxLong,
                         optInAccelerationInitShort,
                         optInAccelerationShort,
                         optInAccelerationMaxShort,
             outBegIdx,
             outNBElement,
               gcnew SubArrayFrom1D<double>(outReal,0) );
         }
#elif defined( _MANAGED )
         static enum class RetCode Sarext( int    startIdx,
                                           int    endIdx,
                                           cli::array<double>^ inHigh,
                                           cli::array<double>^ inLow,
                                           double optInStartValue,
                                           double optInOffsetOnReverse,
                                           double optInAccelerationInitLong,
                                           double optInAccelerationLong,
                                           double optInAccelerationMaxLong,
                                           double optInAccelerationInitShort,
                                           double optInAccelerationShort,
                                           double optInAccelerationMaxShort,
                                           [Out]int%    outBegIdx,
                                           [Out]int%    outNBElement,
                                           cli::array<double>^  outReal );
         static enum class RetCode Sarext( int    startIdx,
                                           int    endIdx,
                                           cli::array<float>^ inHigh,
                                           cli::array<float>^ inLow,
                                           double optInStartValue,
                                           double optInOffsetOnReverse,
                                           double optInAccelerationInitLong,
                                           double optInAccelerationLong,
                                           double optInAccelerationMaxLong,
                                           double optInAccelerationInitShort,
                                           double optInAccelerationShort,
                                           double optInAccelerationMaxShort,
                                           [Out]int%    outBegIdx,
                                           [Out]int%    outNBElement,
                                           cli::array<double>^  outReal );
#endif

#if defined( _MANAGED ) && defined( USE_SUBARRAY )
         static enum class RetCode SarextLogic( int    startIdx,
                                                int    endIdx,
                                                SubArray<double>^ inHigh,
                                                SubArray<double>^ inLow,
                                                double optInStartValue,
                                                double optInOffsetOnReverse,
                                                double optInAccelerationInitLong,
                                                double optInAccelerationLong,
                                                double optInAccelerationMaxLong,
                                                double optInAccelerationInitShort,
                                                double optInAccelerationShort,
                                                double optInAccelerationMaxShort,
                                                [Out]int%    outBegIdx,
                                                [Out]int%    outNBElement,
                                                SubArray<double>^  outReal );

         static enum class RetCode SarextLogic( int    startIdx,
                                                int    endIdx,
                                                SubArray<float>^ inHigh,
                                                SubArray<float>^ inLow,
                                                double optInStartValue,
                                                double optInOffsetOnReverse,
                                                double optInAccelerationInitLong,
                                                double optInAccelerationLong,
                                                double optInAccelerationMaxLong,
                                                double optInAccelerationInitShort,
                                                double optInAccelerationShort,
                                                double optInAccelerationMaxShort,
                                                [Out]int%    outBegIdx,
                                                [Out]int%    outNBElement,
                                                SubArray<double>^  outReal );

         static enum class RetCode SarextLogic( int    startIdx,
                                                int    endIdx,
                                                cli::array<double>^ inHigh,
                                                cli::array<double>^ inLow,
                                                double optInStartValue,
                                                double optInOffsetOnReverse,
                                                double optInAccelerationInitLong,
                                                double optInAccelerationLong,
                                                double optInAccelerationMaxLong,
                                                double optInAccelerationInitShort,
                                                double optInAccelerationShort,
                                                double optInAccelerationMaxShort,
                                                [Out]int%    outBegIdx,
                                                [Out]int%    outNBElement,
                                                cli::array<double>^  outReal )
         { return SarextLogic( startIdx, endIdx,
                         gcnew SubArrayFrom1D<double>(inHigh,0),
                         gcnew SubArrayFrom1D<double>(inLow,0),
                         optInStartValue,
                         optInOffsetOnReverse,
                         optInAccelerationInitLong,
                         optInAccelerationLong,
                         optInAccelerationMaxLong,
                         optInAccelerationInitShort,
                         optInAccelerationShort,
                         optInAccelerationMaxShort,
             outBegIdx,
             outNBElement,
               gcnew SubArrayFrom1D<double>(outReal,0) );
         }
         static enum class RetCode SarextLogic( int    startIdx,
                                                int    endIdx,
                                                cli::array<float>^ inHigh,
                                                cli::array<float>^ inLow,
                                                double optInStartValue,
                                                double optInOffsetOnReverse,
                                                double optInAccelerationInitLong,
                                                double optInAccelerationLong,
                                                double optInAccelerationMaxLong,
                                                double optInAccelerationInitShort,
                                                double optInAccelerationShort,
                                                double optInAccelerationMaxShort,
                                                [Out]int%    outBegIdx,
                                                [Out]int%    outNBElement,
                                                cli::array<double>^  outReal )
         { return SarextLogic( startIdx, endIdx,
                         gcnew SubArrayFrom1D<float>(inHigh,0),
                         gcnew SubArrayFrom1D<float>(inLow,0),
                         optInStartValue,
                         optInOffsetOnReverse,
                         optInAccelerationInitLong,
                         optInAccelerationLong,
                         optInAccelerationMaxLong,
                         optInAccelerationInitShort,
                         optInAccelerationShort,
                         optInAccelerationMaxShort,
             outBegIdx,
             outNBElement,
               gcnew SubArrayFrom1D<double>(outReal,0) );
         }
#elif defined( _MANAGED )
         static enum class RetCode SarextLogic( int    startIdx,
                                                int    endIdx,
                                                cli::array<double>^ inHigh,
                                                cli::array<double>^ inLow,
                                                double optInStartValue,
                                                double optInOffsetOnReverse,
                                                double optInAccelerationInitLong,
                                                double optInAccelerationLong,
                                                double optInAccelerationMaxLong,
                                                double optInAccelerationInitShort,
                                                double optInAccelerationShort,
                                                double optInAccelerationMaxShort,
                                                [Out]int%    outBegIdx,
                                                [Out]int%    outNBElement,
                                                cli::array<double>^  outReal );
         static enum class RetCode SarextLogic( int    startIdx,
                                                int    endIdx,
                                                cli::array<float>^ inHigh,
                                                cli::array<float>^ inLow,
                                                double optInStartValue,
                                                double optInOffsetOnReverse,
                                                double optInAccelerationInitLong,
                                                double optInAccelerationLong,
                                                double optInAccelerationMaxLong,
                                                double optInAccelerationInitShort,
                                                double optInAccelerationShort,
                                                double optInAccelerationMaxShort,
                                                [Out]int%    outBegIdx,
                                                [Out]int%    outNBElement,
                                                cli::array<double>^  outReal );
#endif

         #define TA_SAREXT Core::Sarext
         #define TA_SAREXT_Lookback Core::SarextLookback
         #define TA_SAREXT_Logic Core::SarextLogic
