func mergeDelta[DPS dataPointSlice[DP], DP dataPoint[DP]]()

in processor/lsmintervalprocessor/internal/merger/datapoints.go [81:114]


func mergeDelta[DPS dataPointSlice[DP], DP dataPoint[DP]](
	from DPS,
	toMetricID identity.Metric,
	toMetric pdataMetric,
	addDP addDPFunc[DP],
	maxExponentialHistogramBuckets int,
) error {
	var errs []error
	for i := 0; i < from.Len(); i++ {
		fromDP := from.At(i)
		var err error
		if toDP, exists := addDP(toMetricID, toMetric, fromDP); exists {
			switch fromDP := any(fromDP).(type) {
			case pmetric.NumberDataPoint:
				err = mergeDeltaSumDP(fromDP, any(toDP).(pmetric.NumberDataPoint))
			case pmetric.HistogramDataPoint:
				err = mergeDeltaHistogramDP(fromDP, any(toDP).(pmetric.HistogramDataPoint))
			case pmetric.ExponentialHistogramDataPoint:
				err = mergeDeltaExponentialHistogramDP(
					fromDP, any(toDP).(pmetric.ExponentialHistogramDataPoint),
					maxExponentialHistogramBuckets,
				)
			}
			toDP.SetTimestamp(fromDP.Timestamp())
		}
		if err != nil {
			errs = append(errs, err)
		}
	}
	if len(errs) > 0 {
		return fmt.Errorf("failed to merge delta datapoints: %w", errors.Join(errs...))
	}
	return nil
}