packages feed

Jikka-5.4.0.0: runtime/include/jikka/divmod.hpp

#ifndef JIKKA_DIVMOD_HPP
#define JIKKA_DIVMOD_HPP
/**
 * @file jikka/divmod.hpp
 * @author Kimiyuki Onaka
 * @copyright Apache License 2.0
 */
#include <cassert>
#include <cstdint>

namespace jikka {

inline int64_t floordiv(int64_t n, int64_t d) {
  assert(d != 0);
  return n / d - ((n ^ d) < 0 && n % d);
}

inline int64_t floormod(int64_t n, int64_t d) {
  assert(d != 0);
  n %= d;
  return (n < 0 ? n + d : n);
}

inline int64_t ceildiv(int64_t n, int64_t d) {
  assert(d != 0);
  return n / d + ((n ^ d) >= 0 && n % d);
}

inline int64_t ceilmod(int64_t n, int64_t d) {
  assert(d != 0);
  return n - ceildiv(n, d) * d;
}

inline int64_t justdiv(int64_t n, int64_t d) {
  assert(d != 0);
  assert(n % d == 0);
  return n / d;
}

} // namespace jikka

#endif // JIKKA_DIVMOD_HPP