File: arithmetic.ha

package info (click to toggle)
hare 0.26.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,352 kB
  • sloc: asm: 1,374; makefile: 123; sh: 117; lisp: 101
file content (28 lines) | stat: -rw-r--r-- 959 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// SPDX-License-Identifier: MPL-2.0
// (c) Hare authors <https://harelang.org>

use time;

// Compares two [[moment]]s. Returns -1 if a precedes b, 0 if a and b are
// simultaneous, or +1 if b precedes a.
//
// [[tscmismatch]] is returned if the [[timescale]]s of the two moments are
// different.
export fn compare(a: *moment, b: *moment) (i8 | tscmismatch) = {
	check_timescales(a.tsc, b.tsc)?;
	return time::compare(to_instant(*a), to_instant(*b));
};

// Returns the [[time::duration]] between two [[moment]]s, from a to b.
//
// [[tscmismatch]] is returned if the [[timescale]]s of the two moments are
// different.
export fn diff(a: *moment, b: *moment) (time::duration | tscmismatch) = {
	check_timescales(a.tsc, b.tsc)?;
	return time::diff(to_instant(*a), to_instant(*b));
};

// Adds a [[time::duration]] to a [[moment]] with [[time::add]].
export fn add(m: *moment, x: time::duration) moment = {
	return new(m.tsc, time::add(to_instant(*m), x));
};