// Copyright 2021 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CORE_FXCRT_SPAN_UTIL_H_
#define CORE_FXCRT_SPAN_UTIL_H_

#include <string.h>

#include "third_party/base/check_op.h"
#include "third_party/base/span.h"

namespace fxcrt {

// Bounds-checked copies from spans into spans.
template <typename T,
          typename U,
          typename = pdfium::internal::EnableIfLegalSpanConversion<T, U>>
void spancpy(pdfium::span<T> dst, pdfium::span<U> src) {
  if (src.size_bytes()) {
    CHECK_GE(dst.size_bytes(), src.size_bytes());
    memcpy(dst.data(), src.data(), src.size_bytes());
  }
}

// Bounds-checked moves from spans into spans.
template <typename T,
          typename U,
          typename = pdfium::internal::EnableIfLegalSpanConversion<T, U>>
void spanmove(pdfium::span<T> dst, pdfium::span<U> src) {
  if (src.size_bytes()) {
    CHECK_GE(dst.size_bytes(), src.size_bytes());
    memmove(dst.data(), src.data(), src.size_bytes());
  }
}

// Bounds-checked sets into spans.
template <typename T>
void spanset(pdfium::span<T> dst, uint8_t val) {
  if (dst.size_bytes()) {
    memset(dst.data(), val, dst.size_bytes());
  }
}

// Bounds-checked zeroing of spans.
template <typename T>
void spanclr(pdfium::span<T> dst) {
  if (dst.size_bytes()) {
    memset(dst.data(), 0, dst.size_bytes());
  }
}

}  // namespace fxcrt

#endif  // CORE_FXCRT_SPAN_UTIL_H_
