Current section

Files

Jump to
bigi src bigi_ffi.mjs
Raw

src/bigi_ffi.mjs

import { Ok, Error } from "./gleam.mjs";
import { Lt, Eq, Gt } from "../gleam_stdlib/gleam/order.mjs";
export function from(int) {
return BigInt(int);
}
export function to(bigint) {
if (bigint > Number.MAX_SAFE_INTEGER || bigint < Number.MIN_SAFE_INTEGER) {
return new Error(undefined);
} else {
return new Ok(Number(bigint));
}
}
export function to_string(bigint) {
return bigint.toString();
}
export function zero() {
return 0n;
}
export function compare(a, b) {
if (a < b) {
return new Gt();
} else if (a > b) {
return new Lt();
} else {
return new Eq();
}
}
export function absolute(bigint) {
if (bigint < 0) {
return -bigint;
} else {
return bigint;
}
}
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
export function multiply(a, b) {
return a * b;
}
export function divide(a, b) {
if (b === 0n) {
return 0n;
}
return a / b;
}
export function divide_no_zero(a, b) {
if (b === 0n) {
return new Error(undefined);
}
return new Ok(divide(a, b));
}
export function remainder(a, b) {
if (b === 0n) {
return 0n;
}
return a % b;
}
export function remainder_no_zero(a, b) {
if (b === 0n) {
return new Error(undefined);
}
return new Ok(remainder(a, b));
}
export function modulo(a, b) {
if (b === 0n) {
return 0n;
}
return ((a % b) + b) % b;
}
export function modulo_no_zero(a, b) {
if (b === 0n) {
return new Error(undefined);
}
return new Ok(modulo(a, b));
}
export function power(a, b) {
return a ** b;
}