Data_* right = static_cast<Data_*> (r);

ULong nEl = N_Elements();
assert(nEl);
Ty s = (*right)[0];
if (s != zero) {
  if (nEl == 1) {
    if ((*this)[0] == zero) (*this)[0] = s;
    return this;
  }

  if ((GDL_NTHREADS = parallelize(nEl)) == 1) {
    for (OMPInt i = 0; i < nEl; ++i) if ((*this)[i] == zero) (*this)[i] = s;
  } else {
    TRACEOMP(__FILE__, __LINE__)
#pragma omp parallel for num_threads(GDL_NTHREADS)
      for (OMPInt i = 0; i < nEl; ++i) if ((*this)[i] == zero) (*this)[i] = s;
  }
}
return this;
