aboutsummaryrefslogtreecommitdiffstats
path: root/src/zcmpmag.c
blob: 59cc415665a79dcb3cc9658b11e89b66a288703e (plain) (blame)
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
29
/* See LICENSE file for copyright and license details. */
#include "internals.h"


int
zcmpmag(z_t a, z_t b)
{
	size_t i, j;
	if (EXPECT(zzero(a), 0))
		return -!zzero(b);
	if (EXPECT(zzero(b), 0))
		return 1;
	i = a->used - 1;
	j = b->used - 1;
	for (; i > j; i--) {
		if (a->chars[i])
			return +1;
		a->used--;
	}
	for (; j > i; j--) {
		if (b->chars[j])
			return -1;
		b->used--;
	}
	for (; i; i--)
		if (a->chars[i] != b->chars[i])
			return (a->chars[i] > b->chars[i]) * 2 - 1;
	return a->chars[0] < b->chars[0] ? -1 : a->chars[0] > b->chars[0];
}