int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]) {

   int to_copy = (rates_total - prev_calculated) * (prev_calculated < rates_total) + (1) * (prev_calculated == rates_total);
   CopyBuffer(RSIHandle, 0, 0, to_copy, ExtRSIBuffer);

//--- ZigZagExtremaOnBuffer.mqh calculation function
   ZZOnBuffer(rates_total, prev_calculated, ExtRSIBuffer, ExtOutputBuffer, InpSearchMode, InpDepth, InpDeviation, InpBackstep);

   return(rates_total);
}

To get only highs or only lows there is an additional input of type EnSearchmode:

//+------------------------------------------------------------------+
//| ZigZag calculation                                               |
//+------------------------------------------------------------------+
int ZZOnBuffer(const int rates,              //On a non indicator array, Arraysize can be used as 'rates_total'
               const int calculated,
               const double &src[],         //source buffer for calculation
               double &dst[],               //destination buffer for calculation buffer
               EnSearchMode mode_search,   //Set output buffer to High only, Low only or both in
               const int &depth,
               const int &deviation,
               const int &backstep          //ZZ input parameters
              ) {      ...
                        ...

Only Highs:

Only Lows:

Both highs and lows in one buffer:

")

It is not restricted to indicator buffers, you can use it on any array, just set "rates" to the length of the array instead of rates_total.

The absolute minimum number of bars that this function can hadle is 100. So although you can use this calculation function on an array of a few hundred bars, in indicator buffers, rates_total is usually a few thousand.