// Copyright 2019 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_BYTEORDER_H_
#define CORE_FXCRT_BYTEORDER_H_

#include "build/build_config.h"
#include "third_party/base/sys_byteorder.h"

namespace fxcrt {

// Converts the bytes in |x| from host order (endianness) to little endian, and
// returns the result.
inline uint16_t ByteSwapToLE16(uint16_t x) {
  return pdfium::base::ByteSwapToLE16(x);
}

inline uint32_t ByteSwapToLE32(uint32_t x) {
  return pdfium::base::ByteSwapToLE32(x);
}

// Converts the bytes in |x| from host order (endianness) to big endian, and
// returns the result.
inline uint16_t ByteSwapToBE16(uint16_t x) {
#if defined(ARCH_CPU_LITTLE_ENDIAN)
  return pdfium::base::ByteSwap(x);
#else
  return x;
#endif
}

inline uint32_t ByteSwapToBE32(uint32_t x) {
#if defined(ARCH_CPU_LITTLE_ENDIAN)
  return pdfium::base::ByteSwap(x);
#else
  return x;
#endif
}

}  // namespace fxcrt

#endif  // CORE_FXCRT_BYTEORDER_H_
