packages feed

ivory-backend-c-0.1.0.0: runtime/ivory.h

#ifndef IVORY_H
#define IVORY_H

#include<stdint.h>
#include<math.h>
#include<stdbool.h>
#include<string.h>
#include<limits.h>

#include "ivory_asserts.h"

#define FOREVER true
#define FOREVER_INC

/* abs implementations */

#if (CHAR_MIN < 0)
static inline char abs_char(char i) {
  COMPILER_ASSERTS(i != CHAR_MIN);
  return i >= 0 ? i : -i;
}
#else
static inline char abs_char(char i) {
  return i;
}
#endif

static inline int8_t abs_i8(int8_t i) {
  COMPILER_ASSERTS(i != INT8_MIN);
  return i >= 0 ? i : -i;
}

static inline int16_t abs_i16(int16_t i) {
  COMPILER_ASSERTS(i != INT16_MIN);
  return i >= 0 ? i : -i;
}

static inline int32_t abs_i32(int32_t i) {
  COMPILER_ASSERTS(i != INT32_MIN);
  return i >= 0 ? i : -i;
}

static inline int64_t abs_i64(int64_t i) {
  COMPILER_ASSERTS(i != INT64_MIN);
  return i >= 0 ? i : -i;
}

/* signum implementations */

#if (CHAR_MIN < 0)
static inline char signum_char(char i) {
  if (i > 0) return 1;
  if (i < 0) return (-1);
  return 0;
}
#else
static inline char signum_char(char i) {
  if (i > 0) return 1;
  return 0;
}
#endif

static inline int8_t signum_i8(int8_t i) {
  if (i > 0) return 1;
  if (i < 0) return (-1);
  return 0;
}

static inline int16_t signum_i16(int16_t i) {
  if (i > 0) return 1;
  if (i < 0) return (-1);
  return 0;
}

static inline int32_t signum_i32(int32_t i) {
  if (i > 0) return 1;
  if (i < 0) return (-1);
  return 0;
}

static inline int64_t signum_i64(int64_t i) {
  if (i > 0) return 1;
  if (i < 0) return (-1);
  return 0;
}

static inline float signum_float(float i) {
  if (i > 0) return 1;
  if (i < 0) return (-1);
  return 0;
}

static inline double signum_double(double i) {
  if (i > 0) return 1;
  if (i < 0) return (-1);
  return 0;
}

static inline uint8_t signum_u8(uint8_t i) {
  if (i > 0) return 1;
  return 0;
}

static inline uint16_t signum_u16(uint16_t i) {
  if (i > 0) return 1;
  return 0;
}

static inline uint32_t signum_u32(uint32_t i) {
  if (i > 0) return 1;
  return 0;
}

static inline uint64_t signum_u64(uint64_t i) {
  if (i > 0) return 1;
  return 0;
}

/* index type */

/* machine-depdentent size */
typedef int idx;

#endif // IVORY_H