```   1 ------------------------------------------------------------------------------
2 ------------------------------------------------------------------------------
3 -- This file is part of 'Finite Field Arithmetic', aka 'FFA'.               --
4 --                                                                          --
5 -- (C) 2017 Stanislav Datskovskiy ( www.loper-os.org )                      --
6 -- http://wot.deedbot.org/17215D118B7239507FAFED98B98228A001ABFFC7.html     --
7 --                                                                          --
8 -- You do not have, nor can you ever acquire the right to use, copy or      --
9 -- distribute this software ; Should you use this software for any purpose, --
10 -- or copy and distribute it to anyone or in any manner, you are breaking   --
11 -- the laws of whatever soi-disant jurisdiction, and you promise to         --
12 -- continue doing so for the indefinite future. In any case, please         --
13 -- always : read and understand any software ; verify any PGP signatures    --
14 -- that you use - for any purpose.                                          --
15 --                                                                          --
17 ------------------------------------------------------------------------------
18 ------------------------------------------------------------------------------
19
20 with W_Pred;   use W_Pred;
21 with FZ_Arith; use FZ_Arith;
22
23
24 package body FZ_Cmp is
25
26    ---------------------------------------------
27    -- Arithmetical Predicate Operations on FZ --
28    ---------------------------------------------
29
30    -- 1 iff X == Y (branch-free); else 0
31    function FZ_EqP(X : in FZ; Y : in FZ) return WBool is
32       A : WBool := 1;
33    begin
34       for i in X'Range loop
35          A := A and W_EqP(X(i), Y(i));
36       end loop;
37       return A;
38    end FZ_EqP;
39
40
41    -- 1 iff X < Y (branch-free); else 0
42    function FZ_LessThanP(X : in FZ; Y : in FZ) return WBool is
43       Scratch : FZ(X'Range);
44       Borrow  : WBool := 0;
45    begin
46       FZ_Sub(X, Y, Scratch, Borrow);
47       return Borrow;
48    end FZ_LessThanP;
49
50
51    -- 1 iff X > Y (branch-free); else 0
52    function FZ_GreaterThanP(X : in FZ; Y: in FZ) return WBool is
53       Scratch : FZ(X'Range);
54       Borrow  : WBool := 0;
55    begin
56       FZ_Sub(Y, X, Scratch, Borrow);
57       return Borrow;
58    end FZ_GreaterThanP;
59
60 end FZ_Cmp;
```