diff options
| author | Mattias Andrée <m@maandree.se> | 2026-01-23 16:11:20 +0100 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-01-23 16:11:20 +0100 |
| commit | 1902d4efc986d2d7e6fd1fbdd74339da0a95ea61 (patch) | |
| tree | a98eea88c17f1b67434de1e457014a1f8171d59d | |
| parent | Add libj2_str_to_j2i.3 (diff) | |
| download | libj2-1902d4efc986d2d7e6fd1fbdd74339da0a95ea61.tar.gz libj2-1902d4efc986d2d7e6fd1fbdd74339da0a95ea61.tar.bz2 libj2-1902d4efc986d2d7e6fd1fbdd74339da0a95ea61.tar.xz | |
Man pages
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to '')
38 files changed, 831 insertions, 119 deletions
diff --git a/libj2_j2i_add_j2i.3 b/libj2_j2i_add_j2i.3 index 760bb3f..0efda2b 100644 --- a/libj2_j2i_add_j2i.3 +++ b/libj2_j2i_add_j2i.3 @@ -75,7 +75,6 @@ in their name), detect arithmetic overflow. The result is truncated to the least significant bits, as many as can be stored, in case of overflow; that is, modular arithmetics is used. - .PP The arguments are assumed to be .RI non- NULL . @@ -133,4 +132,6 @@ functions were added in version 1.1 of .SH SEE ALSO .BR libj2 (7), .BR libj2_j2i_sub_j2i (3), -.BR libj2_j2u_sub_j2u (3) +.BR libj2_j2u_sub_j2u (3), +.BR libj2_j2i_mul_j2i (3), +.BR libj2_j2i_divmod_j2i (3) diff --git a/libj2_j2i_cmp_j2i.3 b/libj2_j2i_cmp_j2i.3 index 6da4b5b..2c30909 100644 --- a/libj2_j2i_cmp_j2i.3 +++ b/libj2_j2i_cmp_j2i.3 @@ -9,12 +9,15 @@ libj2_j2i_cmp_j2i \- Compare two values int \fBlibj2_j2i_cmp_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2i_cmp_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ji_cmp_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2i_cmp_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2i_cmp_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ji_cmp_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); + int \fBlibj2_j2u_cmp_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2u_cmp_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ju_cmp_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2u_cmp_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2u_cmp_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ju_cmp_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); diff --git a/libj2_j2i_divmod_j2i.3 b/libj2_j2i_divmod_j2i.3 new file mode 100644 index 0000000..25c8413 --- /dev/null +++ b/libj2_j2i_divmod_j2i.3 @@ -0,0 +1,188 @@ +.TH LIBJ2_J2I_DIVMOD_J2I 3 LIBJ2 +.SH NAME +libj2_j2i_divmod_j2i \- Calculate quotient and remainder + +.SH SYNOPSIS +.nf +#include <libj2.h> + +intmax_t \fBlibj2_j2i_divmod_j2i\fP( + struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); +void \fBlibj2_j2i_divmod_j2i_to_j2i\fP( + struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, + struct libj2_j2i *\fIq\fP); +void \fBlibj2_j2i_divmod_j2i_to_j2i_j2i\fP( + const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, + struct libj2_j2i *\fIq\fP, struct libj2_j2i *\fIr\fP); + +intmax_t \fBlibj2_j2i_divmod_ji\fP( + struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); +void \fBlibj2_j2i_divmod_ji_to_j2i\fP( + struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, + struct libj2_j2i *\fIq\fP); +void \fBlibj2_j2i_divmod_ji_to_j2i_j2i\fP( + const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, + struct libj2_j2i *\fIq\fP, struct libj2_j2i *\fIr\fP); + +uintmax_t \fBlibj2_j2u_divmod_j2u\fP( + struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); +void \fBlibj2_j2u_divmod_j2u_to_j2u\fP( + struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, + struct libj2_j2u *\fIq\fP); +void \fBlibj2_j2u_divmod_j2u_to_j2u_j2u\fP( + const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, + struct libj2_j2u *\fIq\fP, struct libj2_j2u *\fIr\fP); + +uintmax_t \fBlibj2_j2u_divmod_ju\fP( + struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); +void \fBlibj2_j2u_divmod_ju_to_j2u\fP( + struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, + struct libj2_j2u *\fIq\fP); +void \fBlibj2_j2u_divmod_ju_to_j2u_j2u\fP( + const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, + struct libj2_j2u *\fIq\fP, struct libj2_j2u *\fIr\fP); + +intmax_t \fBlibj2_j2i_rdivmod_j2i\fP( + struct libj2_j2i *\fIb\fP, const struct libj2_j2i *\fIa\fP); +void \fBlibj2_j2i_rdivmod_j2i_to_j2i\fP( + struct libj2_j2i *\fIb\fP, const struct libj2_j2i *\fIa\fP, + struct libj2_j2i *\fIq\fP); + +uintmax_t \fBlibj2_j2u_rdivmod_j2u\fP( + struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP); +void \fBlibj2_j2u_rdivmod_j2u_to_j2u\fP( + struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP, + struct libj2_j2u *\fIq\fP); +.fi +.PP +Link with +.IR -lj2 . + +.SH DESCRIPTION +The above listed functions calculate the +calculate the quotient between +.I a +and +.IR b , +and as a side-effect calculates the remainder +(for no additional computational cost). +.PP +The +.BR libj2_j2i_divmod_j2i (), +.BR libj2_j2i_divmod_ji (), +.BR libj2_j2u_divmod_j2u (), +and +.BR libj2_j2u_divmod_ju () +functions return the quotient, the remainder +of the functions store the quotient in +.IR q . +.PP +The +.BR libj2_j2i_divmod_j2i (), +.BR libj2_j2i_divmod_j2i_to_j2i (), +.BR libj2_j2i_divmod_ji (), +.BR libj2_j2i_divmod_ji_to_j2i (), +.BR libj2_j2u_divmod_j2u (), +.BR libj2_j2u_divmod_j2u_to_j2u (), +.BR libj2_j2u_divmod_ju (), +and +.BR libj2_j2u_divmod_ju_to_j2u () +functions store the remainder in +.IR a . +.PP +The +.BR libj2_j2i_rdivmod_j2i () +and +.BR libj2_j2u_rdivmod_j2u () +functions store the remainder in +.IR b . +.PP +The +.BR libj2_j2i_divmod_j2i_to_j2i_j2i (), +.BR libj2_j2i_divmod_ji_to_j2i_j2i (), +.BR libj2_j2u_divmod_j2u_to_j2u_j2u (), +and +.BR libj2_j2u_divmod_ju_to_j2u_j2u () +functions store the remainder in +.IR r . +.PP +If +.I b +is -1 and +.I a +is the largest negative value that can be +represented, the computation will overflow +such that the quotient will be largest negative +value, rather than the largest positive value +plus one. For the +.BR libj2_j2i_divmod_j2i () +and +.BR libj2_j2i_divmod_ji () +functions, the quotient will truncate to zero +in that case. +.PP +The quotient is rounded towards zero. +The remainder is defined such that the +product of the rounded quotient and the +divisor is equal to the difference between +the dividend and the remainder. +.PP +The remainder of the functions do not +return any value. +.PP +The arguments are assumed to be +.RI non- NULL . + +.SH RETURN VALUE +The +.BR libj2_j2i_divmod_j2i () +and +.BR libj2_j2i_divmod_ji () +functions return the quotient truncated to an +.BR intmax_t. +.PP +The +.BR libj2_j2u_divmod_j2u () +and +.BR libj2_j2u_divmod_ju () +functions return the quotient truncated to a +.BR uintmax_t. + +.SH ERRORS +The above listed functions cannot fail. + +.SH HISTORY +The +.BR libj2_j2u_divmod_j2u (), +.BR libj2_j2u_divmod_j2u_to_j2u (), +.BR libj2_j2u_divmod_j2u_to_j2u_j2u (), +.BR libj2_j2u_divmod_ju (), +.BR libj2_j2u_divmod_ju_to_j2u (), +.BR libj2_j2u_divmod_ju_to_j2u_j2u (), +.BR libj2_j2u_rdivmod_j2u (), +and +.BR libj2_j2u_rdivmod_j2u_to_j2u () +functions were added in version 1.0 of +.BR libj2 . +.PP +The +.BR libj2_j2i_divmod_j2i (), +.BR libj2_j2i_divmod_j2i_to_j2i (), +.BR libj2_j2i_divmod_j2i_to_j2i_j2i (), +.BR libj2_j2i_divmod_ji (), +.BR libj2_j2i_divmod_ji_to_j2i (), +.BR libj2_j2i_divmod_ji_to_j2i_j2i (), +.BR libj2_j2i_rdivmod_j2i (), +and +.BR libj2_j2i_rdivmod_j2i_to_j2i () +functions were added in version 1.1 of +.BR libj2 . + +.SH SEE ALSO +.BR libj2 (7), +.BR libj2_j2i_div_j2i (3), +.BR libj2_j2i_mod_j2i (3), +.BR libj2_j2i_add_j2i (3), +.BR libj2_j2i_sub_j2i (3), +.BR libj2_j2u_sub_j2u (3), +.BR libj2_j2i_mul_j2i (3) diff --git a/libj2_j2i_divmod_j2i.c b/libj2_j2i_divmod_j2i.c index a9b6a9b..0bb065c 100644 --- a/libj2_j2i_divmod_j2i.c +++ b/libj2_j2i_divmod_j2i.c @@ -3,24 +3,6 @@ #ifndef TEST extern inline intmax_t libj2_j2i_divmod_j2i(struct libj2_j2i *a, const struct libj2_j2i *b); -/* TODO Add man pages - libj2_j2i_divmod_j2i - libj2_j2i_divmod_j2i_to_j2i - libj2_j2i_divmod_j2i_to_j2i_j2i - libj2_j2i_divmod_ji - libj2_j2i_divmod_ji_to_j2i - libj2_j2i_divmod_ji_to_j2i_j2i - libj2_j2u_divmod_j2u - libj2_j2u_divmod_j2u_to_j2u - libj2_j2u_divmod_j2u_to_j2u_j2u - libj2_j2u_divmod_ju - libj2_j2u_divmod_ju_to_j2u - libj2_j2u_divmod_ju_to_j2u_j2u - libj2_j2i_rdivmod_j2i - libj2_j2i_rdivmod_j2i_to_j2i - libj2_j2u_rdivmod_j2u - libj2_j2u_rdivmod_j2u_to_j2u -*/ #else diff --git a/libj2_j2i_eq_j2i.3 b/libj2_j2i_eq_j2i.3 index ac5ce87..85b786c 100644 --- a/libj2_j2i_eq_j2i.3 +++ b/libj2_j2i_eq_j2i.3 @@ -9,12 +9,15 @@ libj2_j2i_eq_j2i \- Check two values for equality int \fBlibj2_j2i_eq_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2i_eq_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ji_eq_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2i_eq_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2i_eq_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ji_eq_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); + int \fBlibj2_j2u_eq_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2u_eq_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ju_eq_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2u_eq_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2u_eq_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ju_eq_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); diff --git a/libj2_j2i_ge_j2i.3 b/libj2_j2i_ge_j2i.3 index bc6990e..62a8ce0 100644 --- a/libj2_j2i_ge_j2i.3 +++ b/libj2_j2i_ge_j2i.3 @@ -9,12 +9,15 @@ libj2_j2i_ge_j2i \- Check value greater than or equal to another value int \fBlibj2_j2i_ge_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2i_ge_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ji_ge_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2i_ge_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2i_ge_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ji_ge_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); + int \fBlibj2_j2u_ge_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2u_ge_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ju_ge_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2u_ge_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2u_ge_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ju_ge_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); diff --git a/libj2_j2i_gt_j2i.3 b/libj2_j2i_gt_j2i.3 index bf3b9d2..407edd5 100644 --- a/libj2_j2i_gt_j2i.3 +++ b/libj2_j2i_gt_j2i.3 @@ -9,12 +9,15 @@ libj2_j2i_gt_j2i \- Check value greater than another value int \fBlibj2_j2i_gt_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2i_gt_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ji_gt_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2i_gt_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2i_gt_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ji_gt_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); + int \fBlibj2_j2u_gt_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2u_gt_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ju_gt_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2u_gt_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2u_gt_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ju_gt_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); diff --git a/libj2_j2i_le_j2i.3 b/libj2_j2i_le_j2i.3 index 8654f86..522c7aa 100644 --- a/libj2_j2i_le_j2i.3 +++ b/libj2_j2i_le_j2i.3 @@ -9,12 +9,15 @@ libj2_j2i_le_j2i \- Check value less than or equal to another value int \fBlibj2_j2i_le_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2i_le_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ji_le_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2i_le_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2i_le_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ji_le_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); + int \fBlibj2_j2u_le_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2u_le_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ju_le_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2u_le_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2u_le_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ju_le_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); diff --git a/libj2_j2i_lsh.3 b/libj2_j2i_lsh.3 index ce5885e..26c2455 100644 --- a/libj2_j2i_lsh.3 +++ b/libj2_j2i_lsh.3 @@ -9,17 +9,22 @@ libj2_j2i_lsh \- Left-shift bits void \fBlibj2_j2i_lsh\fP(struct libj2_j2i *\fIa\fP, unsigned \fIb\fP); void \fBlibj2_j2i_lsh_to_j2i\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP); void \fBlibj2_ji_lsh_to_j2i\fP(intmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP); -void \fBlibj2_j2u_lsh\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); -void \fBlibj2_j2u_lsh_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_ju_lsh_to_j2u\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); + int \fBlibj2_j2i_lsh_overflow\fP(struct libj2_j2i *\fIa\fP, unsigned \fIb\fP); int \fBlibj2_j2i_lsh_to_j2i_overflow\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP); int \fBlibj2_ji_lsh_to_j2i_overflow\fP(intmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP); + +int \fBlibj2_j2i_lsh_overflow_p\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP); +int \fBlibj2_ji_lsh_overflow_p\fP(intmax_t \fIa\fP, unsigned \fIb\fP); + +void \fBlibj2_j2u_lsh\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_lsh_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); +void \fBlibj2_ju_lsh_to_j2u\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); + int \fBlibj2_j2u_lsh_overflow\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); int \fBlibj2_j2u_lsh_to_j2u_overflow\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); int \fBlibj2_ju_lsh_to_j2u_overflow\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); -int \fBlibj2_j2i_lsh_overflow_p\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP); -int \fBlibj2_ji_lsh_overflow_p\fP(intmax_t \fIa\fP, unsigned \fIb\fP); + int \fBlibj2_j2u_lsh_overflow_p\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); int \fBlibj2_ju_lsh_overflow_p\fP(uintmax_t \fIa\fP, unsigned \fIb\fP); .fi diff --git a/libj2_j2i_lt_j2i.3 b/libj2_j2i_lt_j2i.3 index ac92433..5ab7f39 100644 --- a/libj2_j2i_lt_j2i.3 +++ b/libj2_j2i_lt_j2i.3 @@ -9,12 +9,15 @@ libj2_j2i_lt_j2i \- Check value less than another value int \fBlibj2_j2i_lt_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2i_lt_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ji_lt_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2i_lt_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2i_lt_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ji_lt_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); + int \fBlibj2_j2u_lt_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2u_lt_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ju_lt_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2u_lt_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2u_lt_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ju_lt_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); diff --git a/libj2_j2i_max_j2i.3 b/libj2_j2i_max_j2i.3 index 9d8e672..a1cd5a9 100644 --- a/libj2_j2i_max_j2i.3 +++ b/libj2_j2i_max_j2i.3 @@ -10,6 +10,7 @@ void \fBlibj2_j2i_max_j2i\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i * void \fBlibj2_j2i_max_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP); void \fBlibj2_j2i_max_ji\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); void \fBlibj2_j2i_max_ji_to_j2i\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP); + void \fBlibj2_j2u_max_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); void \fBlibj2_j2u_max_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_j2u_max_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); diff --git a/libj2_j2i_min_j2i.3 b/libj2_j2i_min_j2i.3 index 3ccd8e0..b8e9f1e 100644 --- a/libj2_j2i_min_j2i.3 +++ b/libj2_j2i_min_j2i.3 @@ -10,6 +10,7 @@ void \fBlibj2_j2i_min_j2i\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i * void \fBlibj2_j2i_min_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP); void \fBlibj2_j2i_min_ji\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); void \fBlibj2_j2i_min_ji_to_j2i\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP); + void \fBlibj2_j2u_min_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); void \fBlibj2_j2u_min_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_j2u_min_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); diff --git a/libj2_j2i_mod_j2i.3 b/libj2_j2i_mod_j2i.3 new file mode 100644 index 0000000..b8ede9c --- /dev/null +++ b/libj2_j2i_mod_j2i.3 @@ -0,0 +1,94 @@ +.TH LIBJ2_J2I_MOD_J2I 3 LIBJ2 +.SH NAME +libj2_j2i_mod_j2i \- Calculate remainder of division + +.SH SYNOPSIS +.nf +#include <libj2.h> + +void \fBlibj2_j2i_mod_j2i\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); +void \fBlibj2_j2i_mod_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP); +void \fBlibj2_j2i_mod_ji\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); +void \fBlibj2_j2i_mod_ji_to_j2i\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP); + +void \fBlibj2_j2u_mod_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); +void \fBlibj2_j2u_mod_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); +void \fBlibj2_j2u_mod_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); +void \fBlibj2_j2u_mod_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); + +void \fBlibj2_j2i_rmod_j2i\fP(struct libj2_j2i *\fIb\fP, const struct libj2_j2i *\fIa\fP); +void \fBlibj2_j2u_rmod_j2u\fP(struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP); +.fi +.PP +Link with +.IR -lj2 . + +.SH DESCRIPTION +The above listed functions calculate the +calculate the divide +.I a +by +.I b +and stores the remainder in +.IR r , +or in the first argument for the functions +without an +.I r +argument. +.PP +The quotient is discarded. +.PP +The quotient is rounded towards zero. +The remainder is defined such that the +product of the rounded quotient and the +divisor is equal to the difference between +the dividend and the remainder. +.PP +The arguments are assumed to be +.RI non- NULL . + +.SH RETURN VALUE +None. + +.SH ERRORS +The above listed functions cannot fail. + +.SH HISTORY +The +.BR libj2_j2u_mod_j2u (), +.BR libj2_j2u_mod_j2u_to_j2u (), +.BR libj2_j2u_mod_ju (), +.BR libj2_j2u_mod_ju_to_j2u (), +and +.BR libj2_j2u_rmod_j2u () +functions were added in version 1.0 of +.BR libj2 . +.PP +The +.BR libj2_j2i_mod_j2i (), +.BR libj2_j2i_mod_j2i_to_j2i (), +.BR libj2_j2i_mod_ji (), +.BR libj2_j2i_mod_ji_to_j2i (), +and +.BR libj2_j2i_rmod_j2i () +functions were added in version 1.1 of +.BR libj2 . + +.SH NOTES +If you want both the quotient and +the remainder, a +.B divmod +function (see +.BR libj2_j2i_divmod_j2i (3)) +can be used to calculate both at the +same time, for the computational +cost of calculating one. + +.SH SEE ALSO +.BR libj2 (7), +.BR libj2_j2i_divmod_j2i (3), +.BR libj2_j2i_div_j2i (3), +.BR libj2_j2i_add_j2i (3), +.BR libj2_j2i_sub_j2i (3), +.BR libj2_j2u_sub_j2u (3), +.BR libj2_j2i_mul_j2i (3) diff --git a/libj2_j2i_mod_j2i.c b/libj2_j2i_mod_j2i.c index 661376a..81831b9 100644 --- a/libj2_j2i_mod_j2i.c +++ b/libj2_j2i_mod_j2i.c @@ -3,18 +3,6 @@ #ifndef TEST extern inline void libj2_j2i_mod_j2i(struct libj2_j2i *a, const struct libj2_j2i *b); -/* TODO Add man pages - libj2_j2i_mod_j2i - libj2_j2i_mod_j2i_to_j2i - libj2_j2i_mod_ji - libj2_j2i_mod_ji_to_j2i - libj2_j2u_mod_j2u - libj2_j2u_mod_j2u_to_j2u - libj2_j2u_mod_ju - libj2_j2u_mod_ju_to_j2u - libj2_j2i_rmod_j2i - libj2_j2u_rmod_j2u - */ #else diff --git a/libj2_j2i_mul_j2i.3 b/libj2_j2i_mul_j2i.3 new file mode 100644 index 0000000..b0fb217 --- /dev/null +++ b/libj2_j2i_mul_j2i.3 @@ -0,0 +1,276 @@ +.TH LIBJ2_J2I_MUL_J2I 3 LIBJ2 +.SH NAME +libj2_j2i_mul_j2i \- Calculate product + +.SH SYNOPSIS +.nf +#include <libj2.h> + +enum libj2_overflow { + \fILIBJ2_NO_OVERFLOW\fP = 0, + \fILIBJ2_POSITIVE_OVERFLOW\fP = 1, + \fILIBJ2_POSITIVE_OVERFLOW_UNKNOWN\fP = 2, + \fILIBJ2_NEGATIVE_OVERFLOW\fP = -1, + \fILIBJ2_NEGATIVE_OVERFLOW_UNKNOWN\fP = -2 +}; + +#define \fILIBJ2_OVERFLOW\fP LIBJ2_POSITIVE_OVERFLOW +#define \fILIBJ2_OVERFLOW_UNKNOWN\fP LIBJ2_POSITIVE_OVERFLOW_UNKNOWN + +void \fBlibj2_j2i_mul_j2i\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); +void \fBlibj2_j2i_mul_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP); +void \fBlibj2_j2i_mul_ji\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); +void \fBlibj2_j2i_mul_ji_to_j2i\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP); +void \fBlibj2_ji_mul_j2i_to_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP); +void \fBlibj2_ji_mul_ji_to_j2i\fP(intmax_t \fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP); + +int \fBlibj2_j2i_mul_j2i_overflow\fP(struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); +int \fBlibj2_j2i_mul_j2i_to_j2i_overflow\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP); +int \fBlibj2_j2i_mul_ji_overflow\fP(struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); +int \fBlibj2_j2i_mul_ji_to_j2i_overflow\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP); +int \fBlibj2_ji_mul_j2i_to_j2i_overflow\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP); + +int \fBlibj2_j2i_mul_j2i_overflow_p\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); +int \fBlibj2_j2i_mul_ji_overflow_p\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); +int \fBlibj2_ji_mul_j2i_overflow_p\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + +enum libj2_overflow \fBlibj2_j2i_mul_j2i_overflow_p_quick\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); +enum libj2_overflow \fBlibj2_j2i_mul_ji_overflow_p_quick\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); +enum libj2_overflow \fBlibj2_ji_mul_j2i_overflow_p_quick\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + +int \fBlibj2_j2i_mul_j2i_to_j2i_overflow_p\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP, int *\fIr_set\fP); +int \fBlibj2_j2i_mul_ji_to_j2i_overflow_p\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP, struct libj2_j2i *\fIr\fP, int *\fIr_set\fP); +int \fBlibj2_ji_mul_j2i_to_j2i_overflow_p\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP, struct libj2_j2i *\fIr\fP, int *\fIr_set\fP); + +void \fBlibj2_j2u_mul_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); +void \fBlibj2_j2u_mul_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); +void \fBlibj2_j2u_mul_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); +void \fBlibj2_j2u_mul_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); +void \fBlibj2_ju_mul_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); +void \fBlibj2_ju_mul_ju_to_j2u\fP(uintmax_t \fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); +void \fBlibj2_j2u_mul_j2u_destructive\fP(struct libj2_j2u *restrict \fIa\fP, struct libj2_j2u *restrict \fIb\fP); + +int \fBlibj2_j2u_mul_j2u_overflow\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); +int \fBlibj2_j2u_mul_j2u_to_j2u_overflow\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); +int \fBlibj2_j2u_mul_ju_overflow\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); +int \fBlibj2_j2u_mul_ju_to_j2u_overflow\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); +int \fBlibj2_ju_mul_j2u_to_j2u_overflow\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); +int \fBlibj2_j2u_mul_j2u_overflow_destructive\fP(struct libj2_j2u *restrict \fIa\fP, struct libj2_j2u *restrict \fIb\fP); + +int \fBlibj2_j2u_mul_j2u_overflow_p\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); +int \fBlibj2_j2u_mul_ju_overflow_p\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); +int \fBlibj2_ju_mul_j2u_overflow_p\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); + +enum libj2_overflow \fBlibj2_j2u_mul_j2u_overflow_p_quick\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); +enum libj2_overflow \fBlibj2_j2u_mul_ju_overflow_p_quick\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); +enum libj2_overflow \fBlibj2_ju_mul_j2u_overflow_p_quick\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); + +int \fBlibj2_j2u_mul_j2u_to_j2u_overflow_p\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP, int *\fIr_set\fP); +int \fBlibj2_j2u_mul_ju_to_j2u_overflow_p\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP, int *\fIr_set\fP); +int \fBlibj2_ju_mul_j2u_to_j2u_overflow_p\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP, int *\fIr_set\fP); +.fi +.PP +Link with +.IR -lj2 . + +.SH DESCRIPTION +The above listed functions calculate the +product of the values of +.I a +and +.IR b . +The functions with the parameter +.I r +store the result in +.IR r , +the other functions store the result in +.IR a , +except the functions +.BR libj2_j2i_mul_j2i_overflow_p (), +.BR libj2_j2i_mul_ji_overflow_p (), +.BR libj2_ji_mul_j2i_overflow_p (), +.BR libj2_j2u_mul_j2u_overflow_p (), +.BR libj2_j2u_mul_ju_overflow_p (), +.BR libj2_ju_mul_j2u_overflow_p (), +.BR libj2_j2i_mul_j2i_overflow_p_quick (), +.BR libj2_j2i_mul_ji_overflow_p_quick (), +.BR libj2_ji_mul_j2i_overflow_p_quick (), +.BR libj2_j2u_mul_j2u_overflow_p_quick (), +.BR libj2_j2u_mul_ju_overflow_p_quick (), +and +.BR libj2_ju_mul_j2u_overflow_p_quick () +only predict overflow, and do not calculate +the sum, and therefore does store it anywhere. +.PP +Additionally, in situations where the +.BR libj2_j2i_mul_j2i_overflow_p_quick (), +.BR libj2_j2i_mul_ji_overflow_p_quick (), +.BR libj2_ji_mul_j2i_overflow_p_quick (), +.BR libj2_j2u_mul_j2u_overflow_p_quick (), +.BR libj2_j2u_mul_ju_overflow_p_quick (), +and +.BR libj2_ju_mul_j2u_overflow_p_quick () +functions return +.I LIBJ2_POSITIVE_OVERFLOW_UNKNOWN +or +.IR LIBJ2_NEGATIVE_OVERFLOW_UNKNOWN , +the +.BR libj2_j2i_mul_j2i_to_j2i_overflow_p () +.BR libj2_j2i_mul_ji_to_j2i_overflow_p () +.BR libj2_ji_mul_j2i_to_j2i_overflow_p () +.BR libj2_j2u_mul_j2u_to_j2u_overflow_p () +.BR libj2_j2u_mul_ju_to_j2u_overflow_p (), +and +.BR libj2_ju_mul_j2u_to_j2u_overflow_p () +functions will calculate the product, store it in +.I r +and set +.I *r_set +to 1; in other situations, those functions will +not modify +.I r +but will set +.I *r_set +to 0. +.PP +The value-returning functions (that is, those +with word +.B overflow +in their name), detect arithmetic overflow. +.PP +The result is truncated to the least significant +bits, as many as can be stored, in case of overflow; +that is, modular arithmetics is used. +.PP +The +.BR libj2_j2u_mul_j2u_destructive () +and +.BR libj2_j2u_mul_j2u_overflow_destructive () +functions modifies +.I b +arbitrarily, and do not support +.I a +and +.I b +being the same pointer. +.PP +The arguments are assumed to be +.RI non- NULL . + +.SH RETURN VALUE +For functions with a return value, the functions +return +1 if the result is positive but too large +to be represented, -1 if the result is negative +(not only possible with functions where the result is a +.IR "struct libj2_j2i" ) +but too large, and 0 otherwise. +For the +.BR libj2_j2i_mul_j2i_overflow_p_quick (), +.BR libj2_j2i_mul_ji_overflow_p_quick (), +.BR libj2_ji_mul_j2i_overflow_p_quick (), +.BR libj2_j2u_mul_j2u_overflow_p_quick (), +.BR libj2_j2u_mul_ju_overflow_p_quick (), +and +.BR libj2_ju_mul_j2u_overflow_p_quick () +functions, the return value is a +.BR "enum libj2_overflow" , +which may be unsigned, so to check if the +return value was negative, it is best to +first cast it to an integer, or compare it +directly to the negative constants. Additionally, +these functions will return +.I LIBJ2_POSITIVE_OVERFLOW_UNKNOWN +if the result is positive but if could not +be determined without calculating the +product whether the product is too large to +be represented, and +.I LIBJ2_NEGATIVE_OVERFLOW_UNKNOWN +if the result is negative but if could not +be determined without calculating the +product whether the product is too large to +be represented. +.PP +Since the +.BR libj2_j2u_mul_j2u_overflow_p_quick (), +.BR libj2_j2u_mul_ju_overflow_p_quick (), +and +.BR libj2_ju_mul_j2u_overflow_p_quick () +functions operate on unsigned integers, they +will never return +.I LIBJ2_NEGATIVE_OVERFLOW +or +.IR LIBJ2_NEGATIVE_OVERFLOW_UNKNOWN . + +.SH ERRORS +The above listed functions cannot fail. + +.SH HISTORY +The +.BR libj2_j2u_mul_j2u (), +.BR libj2_j2u_mul_j2u_to_j2u (), +.BR libj2_j2u_mul_ju (), +.BR libj2_j2u_mul_ju_to_j2u (), +.BR libj2_ju_mul_j2u_to_j2u (), +.BR libj2_ju_mul_ju_to_j2u (), +.BR libj2_j2u_mul_j2u_destructive (), +.BR libj2_j2u_mul_j2u_overflow (), +.BR libj2_j2u_mul_j2u_to_j2u_overflow (), +.BR libj2_j2u_mul_ju_overflow (), +.BR libj2_j2u_mul_ju_to_j2u_overflow (), +.BR libj2_ju_mul_j2u_to_j2u_overflow (), +.BR libj2_j2u_mul_j2u_overflow_destructive (), +.BR libj2_j2u_mul_j2u_overflow_p (), +.BR libj2_j2u_mul_ju_overflow_p (), +.BR libj2_ju_mul_j2u_overflow_p (), +.BR libj2_j2u_mul_j2u_overflow_p_quick (), +.BR libj2_j2u_mul_ju_overflow_p_quick (), +.BR libj2_ju_mul_j2u_overflow_p_quick (), +.BR libj2_j2u_mul_j2u_to_j2u_overflow_p (), +.BR libj2_j2u_mul_ju_to_j2u_overflow_p (), +and +.BR libj2_ju_mul_j2u_to_j2u_overflow_p () +functions and the +.IR LIBJ2_NO_OVERFLOW , +.IR LIBJ2_OVERFLOW , +and +.IR LIBJ2_OVERFLOW_UNKNOWN +constants were added in version 1.0 of +.BR libj2 . +.PP +The +.BR libj2_j2i_mul_j2i (), +.BR libj2_j2i_mul_j2i_to_j2i (), +.BR libj2_j2i_mul_ji (), +.BR libj2_j2i_mul_ji_to_j2i (), +.BR libj2_ji_mul_j2i_to_j2i (), +.BR libj2_ji_mul_ji_to_j2i (), +.BR libj2_j2i_mul_j2i_overflow (), +.BR libj2_j2i_mul_j2i_to_j2i_overflow (), +.BR libj2_j2i_mul_ji_overflow (), +.BR libj2_j2i_mul_ji_to_j2i_overflow (), +.BR libj2_ji_mul_j2i_to_j2i_overflow (), +.BR libj2_j2i_mul_j2i_overflow_p (), +.BR libj2_j2i_mul_ji_overflow_p (), +.BR libj2_ji_mul_j2i_overflow_p (), +.BR libj2_j2i_mul_j2i_overflow_p_quick (), +.BR libj2_j2i_mul_ji_overflow_p_quick (), +.BR libj2_ji_mul_j2i_overflow_p_quick (), +.BR libj2_j2i_mul_j2i_to_j2i_overflow_p (), +.BR libj2_j2i_mul_ji_to_j2i_overflow_p (), +and +.BR libj2_ji_mul_j2i_to_j2i_overflow_p () +functions and the +.IR LIBJ2_POSITIVE_OVERFLOW , +.IR LIBJ2_POSITIVE_OVERFLOW_UNKNOWN , +.IR LIBJ2_NEGATIVE_OVERFLOW , +and +.IR LIBJ2_NEGATIVE_OVERFLOW_UNKNOWN +constants were added in version 1.1 of +.BR libj2 . + +.SH SEE ALSO +.BR libj2 (7), +.BR libj2_j2i_add_j2i (3), +.BR libj2_j2i_sub_j2i (3), +.BR libj2_j2u_sub_j2u (3), +.BR libj2_j2i_divmod_j2i (3) diff --git a/libj2_j2i_mul_j2i.c b/libj2_j2i_mul_j2i.c index 5d2c825..ff93594 100644 --- a/libj2_j2i_mul_j2i.c +++ b/libj2_j2i_mul_j2i.c @@ -3,50 +3,6 @@ #ifndef TEST extern inline void libj2_j2i_mul_j2i(struct libj2_j2i *a, const struct libj2_j2i *b); -/* TODO Add man pages - libj2_j2i_mul_j2i - libj2_j2i_mul_j2i_to_j2i - libj2_j2i_mul_ji - libj2_j2i_mul_ji_to_j2i - libj2_ji_mul_j2i_to_j2i - libj2_ji_mul_ji_to_j2i - libj2_j2u_mul_j2u - libj2_j2u_mul_j2u_to_j2u - libj2_j2u_mul_ju - libj2_j2u_mul_ju_to_j2u - libj2_ju_mul_j2u_to_j2u - libj2_ju_mul_ju_to_j2u - libj2_j2u_mul_j2u_destructive - libj2_j2i_mul_j2i_overflow - libj2_j2i_mul_j2i_to_j2i_overflow - libj2_j2i_mul_ji_overflow - libj2_j2i_mul_ji_to_j2i_overflow - libj2_ji_mul_j2i_to_j2i_overflow - libj2_j2u_mul_j2u_overflow - libj2_j2u_mul_j2u_to_j2u_overflow - libj2_j2u_mul_ju_overflow - libj2_j2u_mul_ju_to_j2u_overflow - libj2_ju_mul_j2u_to_j2u_overflow - libj2_j2u_mul_j2u_overflow_destructive - libj2_j2i_mul_j2i_overflow_p - libj2_j2i_mul_ji_overflow_p - libj2_ji_mul_j2i_overflow_p - libj2_j2u_mul_j2u_overflow_p - libj2_j2u_mul_ju_overflow_p - libj2_ju_mul_j2u_overflow_p - libj2_j2i_mul_j2i_overflow_p_quick - libj2_j2i_mul_ji_overflow_p_quick - libj2_ji_mul_j2i_overflow_p_quick - libj2_j2u_mul_j2u_overflow_p_quick - libj2_j2u_mul_ju_overflow_p_quick - libj2_ju_mul_j2u_overflow_p_quick - libj2_j2i_mul_j2i_to_j2i_overflow_p - libj2_j2i_mul_ji_to_j2i_overflow_p - libj2_ji_mul_j2i_to_j2i_overflow_p - libj2_j2u_mul_j2u_to_j2u_overflow_p - libj2_j2u_mul_ju_to_j2u_overflow_p - libj2_ju_mul_j2u_to_j2u_overflow_p - */ #else diff --git a/libj2_j2i_ne_j2i.3 b/libj2_j2i_ne_j2i.3 index 0ee7f94..23911ce 100644 --- a/libj2_j2i_ne_j2i.3 +++ b/libj2_j2i_ne_j2i.3 @@ -9,12 +9,15 @@ libj2_j2i_ne_j2i \- Check two values for inequality int \fBlibj2_j2i_ne_j2i\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2i_ne_ji\fP(const struct libj2_j2i *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ji_ne_j2i\fP(intmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2i_ne_j2u\fP(const struct libj2_j2i *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2i_ne_ju\fP(const struct libj2_j2i *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ji_ne_j2u\fP(intmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); + int \fBlibj2_j2u_ne_j2i\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2i *\fIb\fP); int \fBlibj2_j2u_ne_ji\fP(const struct libj2_j2u *\fIa\fP, intmax_t \fIb\fP); int \fBlibj2_ju_ne_j2i\fP(uintmax_t \fIa\fP, const struct libj2_j2i *\fIb\fP); + int \fBlibj2_j2u_ne_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); int \fBlibj2_j2u_ne_ju\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); int \fBlibj2_ju_ne_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); diff --git a/libj2_j2i_rsh.3 b/libj2_j2i_rsh.3 index f5c6061..f0ceaa8 100644 --- a/libj2_j2i_rsh.3 +++ b/libj2_j2i_rsh.3 @@ -9,17 +9,22 @@ libj2_j2i_rsh \- Right-shift bits void \fBlibj2_j2i_rsh\fP(struct libj2_j2i *\fIa\fP, unsigned \fIb\fP); void \fBlibj2_j2i_rsh_to_j2i\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP); void \fBlibj2_ji_rsh_to_j2i\fP(intmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP); -void \fBlibj2_j2u_rsh\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); -void \fBlibj2_j2u_rsh_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_ju_rsh_to_j2u\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); + int \fBlibj2_j2i_rsh_underflow\fP(struct libj2_j2i *\fIa\fP, unsigned \fIb\fP); int \fBlibj2_j2i_rsh_to_j2i_underflow\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP); int \fBlibj2_ji_rsh_to_j2i_underflow\fP(intmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2i *\fIr\fP); + +int \fBlibj2_j2i_rsh_underflow_p\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP); +int \fBlibj2_ji_rsh_underflow_p\fP(intmax_t \fIa\fP, unsigned \fIb\fP); + +void \fBlibj2_j2u_rsh\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_rsh_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); +void \fBlibj2_ju_rsh_to_j2u\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); + int \fBlibj2_j2u_rsh_underflow\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); int \fBlibj2_j2u_rsh_to_j2u_underflow\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); int \fBlibj2_ju_rsh_to_j2u_underflow\fP(uintmax_t \fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); -int \fBlibj2_j2i_rsh_underflow_p\fP(const struct libj2_j2i *\fIa\fP, unsigned \fIb\fP); -int \fBlibj2_ji_rsh_underflow_p\fP(intmax_t \fIa\fP, unsigned \fIb\fP); + int \fBlibj2_j2u_rsh_underflow_p\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); int \fBlibj2_ju_rsh_underflow_p\fP(uintmax_t \fIa\fP, unsigned \fIb\fP); .fi diff --git a/libj2_j2i_sub_j2i.3 b/libj2_j2i_sub_j2i.3 index 3890d23..466c84a 100644 --- a/libj2_j2i_sub_j2i.3 +++ b/libj2_j2i_sub_j2i.3 @@ -76,7 +76,6 @@ in their name), detect arithmetic overflow. The result is truncated to the least significant bits, as many as can be stored, in case of overflow; that is, modular arithmetics is used. - .PP The arguments are assumed to be .RI non- NULL . @@ -119,4 +118,6 @@ functions were added in version 1.1 of .SH SEE ALSO .BR libj2 (7), .BR libj2_j2u_sub_j2u (3), -.BR libj2_j2i_add_j2i (3) +.BR libj2_j2i_add_j2i (3), +.BR libj2_j2i_mul_j2i (3), +.BR libj2_j2i_divmod_j2i (3) diff --git a/libj2_j2i_to_str.3 b/libj2_j2i_to_str.3 new file mode 100644 index 0000000..ed64ab8 --- /dev/null +++ b/libj2_j2i_to_str.3 @@ -0,0 +1,107 @@ +.TH LIBJ2_J2I_TO_STR 3 LIBJ2 +.SH NAME +libj2_j2i_to_str \- ASCII-encode a double-max precision integer + +.SH SYNOPSIS +.nf +#include <libj2.h> + +size_t \fBlibj2_j2i_to_str\fP(const struct libj2_j2i *\fIa\fP, char *\fIbuf\fP, + size_t \fIbufsize\fP, const char *\fIdigits\fP); + +size_t \fBlibj2_j2u_to_str\fP(const struct libj2_j2u *\fIa\fP, char *\fIbuf\fP, + size_t \fIbufsize\fP, const char *\fIdigits\fP); +.fi +.PP +Link with +.IR -lj2 . + +.SH DESCRIPTION +The +.BR libj2_j2i_to_str () +and +.BR libj2_j2u_to_str () +functions encode +.I a +in ASCII. The functions write up to +.IR bufsize , +which may be 0, bytes, including a null +byte to termiante the encoding, to +.IR buf . +.PP +.I digits +shall either be +.I NULL +(equivalent to +.BR \(dq0123456789\(dq ) +for the decimal system, or the digits to use +in order of value (zero first). The radix +will be the length of +.IR digits , +which must be atleast 2. +.PP +The string encoding will not contain any leading +zeroes (if the value is zero, the string will be +a single zero). In the case of +.BR libj2_j2i_to_str (), +if +.I a +is negative, the ASCII minus sign +.RB ( - ) +will be used as the prefix sign. No sign is used +for non-negative values. +.PP +If +.I bufsize +is non-zero but not large enough to fully encode +.I a, +.I buf[bufsize-1] +will be set to a null byte. +.PP +The functions assume that +.I a +is +.RI non- NULL . + +.SH RETURN VALUE +The +.BR libj2_j2i_to_str () +and +.BR libj2_j2u_to_str () +functions return the number of bytes needed encode +.I a +with the radix determined by +.I digits +(10 if +.IR NULL ). +This count does not include the NUL byte at the end. + +.SH ERRORS +The +.BR libj2_j2i_to_str () +and +.BR libj2_j2u_to_str () +functions will fail if +.I digits +is +.RI non- NULL +and contains less than 2 symbols or contain +duplicate symbols. However no error code is used, +instead the functions simply return 0. + +.SH HISTORY +The +.BR libj2_j2i_to_str () +and +.BR libj2_j2u_to_str () +functions were added in version 1.1 of +.BR libj2 . + +.SH NOTES +The return value is not affected by +.IR bufsize . + +.SH SEE ALSO +.BR libj2 (7), +.BR libj2_str_to_j2i (3), +.BR libj2_ju_to_j2i (3) diff --git a/libj2_j2i_to_str.c b/libj2_j2i_to_str.c index b938f17..8905aa3 100644 --- a/libj2_j2i_to_str.c +++ b/libj2_j2i_to_str.c @@ -3,10 +3,6 @@ #ifndef TEST extern inline size_t libj2_j2i_to_str(const struct libj2_j2i *a, char *buf, size_t bufsize, const char *digits); -/* TODO Add man pages - * libj2_j2i_to_str - * libj2_j2u_to_str - */ #else diff --git a/libj2_j2u_and_j2u.3 b/libj2_j2u_and_j2u.3 index 90a87d6..1054cee 100644 --- a/libj2_j2u_and_j2u.3 +++ b/libj2_j2u_and_j2u.3 @@ -11,8 +11,9 @@ void \fBlibj2_j2u_and_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struc void \fBlibj2_j2u_and_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); void \fBlibj2_j2u_and_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_ju_and_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_j2u_and_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP -void \fBlibj2_j2u_and_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP + +void \fBlibj2_j2u_and_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_and_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); .fi .PP Link with diff --git a/libj2_j2u_if_j2u.3 b/libj2_j2u_if_j2u.3 index 4ec9270..1790eb9 100644 --- a/libj2_j2u_if_j2u.3 +++ b/libj2_j2u_if_j2u.3 @@ -11,8 +11,9 @@ void \fBlibj2_j2u_if_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct void \fBlibj2_j2u_if_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); void \fBlibj2_j2u_if_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_ju_if_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_j2u_if_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP -void \fBlibj2_j2u_if_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP + +void \fBlibj2_j2u_if_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_if_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); .fi .PP Link with diff --git a/libj2_j2u_imply_j2u.3 b/libj2_j2u_imply_j2u.3 index c6c6b52..1fe8848 100644 --- a/libj2_j2u_imply_j2u.3 +++ b/libj2_j2u_imply_j2u.3 @@ -11,8 +11,9 @@ void \fBlibj2_j2u_imply_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const str void \fBlibj2_j2u_imply_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); void \fBlibj2_j2u_imply_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_ju_imply_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_j2u_imply_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP -void \fBlibj2_j2u_imply_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP + +void \fBlibj2_j2u_imply_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_imply_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); .fi .PP Link with diff --git a/libj2_j2u_nand_j2u.3 b/libj2_j2u_nand_j2u.3 index f231a39..ecf15ca 100644 --- a/libj2_j2u_nand_j2u.3 +++ b/libj2_j2u_nand_j2u.3 @@ -11,8 +11,9 @@ void \fBlibj2_j2u_nand_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const stru void \fBlibj2_j2u_nand_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); void \fBlibj2_j2u_nand_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_ju_nand_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_j2u_nand_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP -void \fBlibj2_j2u_nand_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP + +void \fBlibj2_j2u_nand_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_nand_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); .fi .PP Link with diff --git a/libj2_j2u_nif_j2u.3 b/libj2_j2u_nif_j2u.3 index cab990a..98e3f3a 100644 --- a/libj2_j2u_nif_j2u.3 +++ b/libj2_j2u_nif_j2u.3 @@ -11,8 +11,9 @@ void \fBlibj2_j2u_nif_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struc void \fBlibj2_j2u_nif_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); void \fBlibj2_j2u_nif_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_ju_nif_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_j2u_nif_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP -void \fBlibj2_j2u_nif_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP + +void \fBlibj2_j2u_nif_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_nif_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); .fi .PP Link with diff --git a/libj2_j2u_nimply_j2u.3 b/libj2_j2u_nimply_j2u.3 index 50df73b..273e0e5 100644 --- a/libj2_j2u_nimply_j2u.3 +++ b/libj2_j2u_nimply_j2u.3 @@ -11,8 +11,9 @@ void \fBlibj2_j2u_nimply_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const st void \fBlibj2_j2u_nimply_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); void \fBlibj2_j2u_nimply_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_ju_nimply_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_j2u_nimply_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP -void \fBlibj2_j2u_nimply_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP + +void \fBlibj2_j2u_nimply_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_nimply_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); .fi .PP Link with diff --git a/libj2_j2u_nor_j2u.3 b/libj2_j2u_nor_j2u.3 index d09e58c..d45b6a3 100644 --- a/libj2_j2u_nor_j2u.3 +++ b/libj2_j2u_nor_j2u.3 @@ -11,8 +11,9 @@ void \fBlibj2_j2u_nor_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struc void \fBlibj2_j2u_nor_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); void \fBlibj2_j2u_nor_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_ju_nor_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_j2u_nor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP -void \fBlibj2_j2u_nor_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP + +void \fBlibj2_j2u_nor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_nor_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); .fi .PP Link with diff --git a/libj2_j2u_or_j2u.3 b/libj2_j2u_or_j2u.3 index 786d6d0..900cfdf 100644 --- a/libj2_j2u_or_j2u.3 +++ b/libj2_j2u_or_j2u.3 @@ -11,8 +11,9 @@ void \fBlibj2_j2u_or_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct void \fBlibj2_j2u_or_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); void \fBlibj2_j2u_or_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_ju_or_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_j2u_or_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP -void \fBlibj2_j2u_or_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP + +void \fBlibj2_j2u_or_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_or_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); .fi .PP Link with diff --git a/libj2_j2u_sub_j2u.3 b/libj2_j2u_sub_j2u.3 index 875d8d7..7fb94c5 100644 --- a/libj2_j2u_sub_j2u.3 +++ b/libj2_j2u_sub_j2u.3 @@ -127,4 +127,6 @@ overflow. Positive overflow is impossible. .SH SEE ALSO .BR libj2 (7), .BR libj2_j2i_sub_j2i (3), -.BR libj2_j2i_add_j2i (3) +.BR libj2_j2i_add_j2i (3), +.BR libj2_j2i_mul_j2i (3), +.BR libj2_j2i_divmod_j2i (3) diff --git a/libj2_j2u_to_j2i.3 b/libj2_j2u_to_j2i.3 new file mode 100644 index 0000000..30687e1 --- /dev/null +++ b/libj2_j2u_to_j2i.3 @@ -0,0 +1,75 @@ +.TH LIBJ2_J2U_TO_J2I 3 LIBJ2 +.SH NAME +libj2_j2u_to_j2i \- Convert between signed and unsigned double-max precision integer + +.SH SYNOPSIS +.nf +#include <libj2.h> + +void \fBlibj2_j2u_to_j2i\fP(const struct libj2_j2u *\fIu\fP, struct libj2_j2i *\fIi\fP); +void \fBlibj2_j2i_to_j2u\fP(const struct libj2_j2i *\fIi\fP, struct libj2_j2u *\fIu\fP); +.fi +.PP +Link with +.IR -lj2 . + +.SH DESCRIPTION +The +.BR libj2_j2u_to_j2i () +function converts +.I u +from unsigned double-max precision +to signed double-max precision and +stored the signed integer in +.IR i . +.PP +The +.BR libj2_j2i_to_j2u () +function converts +.I i +from signed double-max precision +to unsigned double-max precision and +stored the signed integer in +.IR u . +.PP +The arguments are assumed to be +.RI non- NULL . +.PP +.I u +and +.I i +will be represented using the same bit +sequence, by design, this means that if +.I i +is negative (for the +.BR libj2_j2u_to_j2i () +function, this happs when +.I u +is too large to be represented by +.BR "struct libj2_j2i" ), +.I -i +and the unsigned +.I 0-u +will have the same value. + +.SH RETURN VALUE +None. + +.SH ERRORS +The +.BR libj2_j2u_to_j2i () +and +.BR libj2_j2i_to_j2u () +functions cannot fail. + +.SH HISTORY +The +.BR libj2_j2u_to_j2i () +and +.BR libj2_j2i_to_j2u () +functions were added in version 1.1 of +.BR libj2 . + +.SH SEE ALSO +.BR libj2 (7), +.BR libj2_ju_to_j2i (3) diff --git a/libj2_j2u_to_j2i.c b/libj2_j2u_to_j2i.c index f157b79..4fd02a9 100644 --- a/libj2_j2u_to_j2i.c +++ b/libj2_j2u_to_j2i.c @@ -3,10 +3,6 @@ #ifndef TEST extern inline void libj2_j2u_to_j2i(const struct libj2_j2u *a, struct libj2_j2i *res); -/* TODO Add man pages - * libj2_j2u_to_j2i - * libj2_j2i_to_j2u - */ #else diff --git a/libj2_j2u_xnor_j2u.3 b/libj2_j2u_xnor_j2u.3 index 83ad333..4dec2e8 100644 --- a/libj2_j2u_xnor_j2u.3 +++ b/libj2_j2u_xnor_j2u.3 @@ -11,8 +11,9 @@ void \fBlibj2_j2u_xnor_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const stru void \fBlibj2_j2u_xnor_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); void \fBlibj2_j2u_xnor_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_ju_xnor_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_j2u_xnor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP -void \fBlibj2_j2u_xnor_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP + +void \fBlibj2_j2u_xnor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_xnor_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); .fi .PP Link with diff --git a/libj2_j2u_xor_j2u.3 b/libj2_j2u_xor_j2u.3 index d6d779c..cd6588f 100644 --- a/libj2_j2u_xor_j2u.3 +++ b/libj2_j2u_xor_j2u.3 @@ -11,8 +11,9 @@ void \fBlibj2_j2u_xor_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struc void \fBlibj2_j2u_xor_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); void \fBlibj2_j2u_xor_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); void \fBlibj2_ju_xor_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); -void \fBlibj2_j2u_xor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP);\fP -void \fBlibj2_j2u_xor_bit_to_j2u\fP(const struct libj2_j2u *\fIa, unsigned \fIb, struct libj2_j2u *\fIr\fP);\fP + +void \fBlibj2_j2u_xor_bit\fP(struct libj2_j2u *\fIa\fP, unsigned \fIb\fP); +void \fBlibj2_j2u_xor_bit_to_j2u\fP(const struct libj2_j2u *\fIa\fP, unsigned \fIb\fP, struct libj2_j2u *\fIr\fP); .fi .PP Link with diff --git a/libj2_max_j2i.3 b/libj2_max_j2i.3 index 173c1ec..1aeb655 100644 --- a/libj2_max_j2i.3 +++ b/libj2_max_j2i.3 @@ -9,12 +9,15 @@ libj2_max_j2i \- Select maximum of a set of values void \fBlibj2_max_j2i\fP(struct libj2_j2i *\fIa\fP, ... /*, NULL */) void \fBlibj2_max_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, ... /*, NULL, struct libj2_j2i *\fIr\fP */) const struct libj2_j2i *\fBlibj2_max_j2i_return\fP(const struct libj2_j2i *\fIa\fP, ... /*, NULL */) + void \fBlibj2_vmax_j2i\fP(struct libj2_j2i *\fIa\fP, va_list \fIargs\fP) void \fBlibj2_vmax_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, va_list \fIargs\fP) const struct libj2_j2i *\fBlibj2_vmax_j2i_return\fP(const struct libj2_j2i *\fIa\fP, va_list \fIargs\fP) + void \fBlibj2_max_j2u\fP(struct libj2_j2u *\fIa\fP, ... /*, NULL */) void \fBlibj2_max_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, ... /*, NULL, struct libj2_j2u *\fIr\fP */) const struct libj2_j2u *\fBlibj2_max_j2u_return\fP(const struct libj2_j2u *\fIa\fP, ... /*, NULL */) + void \fBlibj2_vmax_j2u\fP(struct libj2_j2u *\fIa\fP, va_list \fIargs\fP) void \fBlibj2_vmax_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, va_list \fIargs\fP) const struct libj2_j2u *\fBlibj2_vmax_j2u_return\fP(const struct libj2_j2u *\fIa\fP, va_list \fIargs\fP) diff --git a/libj2_min_j2i.3 b/libj2_min_j2i.3 index fca9412..bc83832 100644 --- a/libj2_min_j2i.3 +++ b/libj2_min_j2i.3 @@ -9,12 +9,15 @@ libj2_min_j2i \- Select minimum of a set of values void \fBlibj2_min_j2i\fP(struct libj2_j2i *\fIa\fP, ... /*, NULL */) void \fBlibj2_min_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, ... /*, NULL, struct libj2_j2i *\fIr\fP */) const struct libj2_j2i *\fBlibj2_min_j2i_return\fP(const struct libj2_j2i *\fIa\fP, ... /*, NULL */) + void \fBlibj2_vmin_j2i\fP(struct libj2_j2i *\fIa\fP, va_list \fIargs\fP) void \fBlibj2_vmin_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, va_list \fIargs\fP) const struct libj2_j2i *\fBlibj2_vmin_j2i_return\fP(const struct libj2_j2i *\fIa\fP, va_list \fIargs\fP) + void \fBlibj2_min_j2u\fP(struct libj2_j2u *\fIa\fP, ... /*, NULL */) void \fBlibj2_min_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, ... /*, NULL, struct libj2_j2u *\fIr\fP */) const struct libj2_j2u *\fBlibj2_min_j2u_return\fP(const struct libj2_j2u *\fIa\fP, ... /*, NULL */) + void \fBlibj2_vmin_j2u\fP(struct libj2_j2u *\fIa\fP, va_list \fIargs\fP) void \fBlibj2_vmin_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, va_list \fIargs\fP) const struct libj2_j2u *\fBlibj2_vmin_j2u_return\fP(const struct libj2_j2u *\fIa\fP, va_list \fIargs\fP) diff --git a/libj2_minus_j2i.3 b/libj2_minus_j2i.3 index 64aeda7..ca65b47 100644 --- a/libj2_minus_j2i.3 +++ b/libj2_minus_j2i.3 @@ -9,6 +9,7 @@ libj2_minus_j2i \- Additively inverse void \fBlibj2_minus_j2i\fP(struct libj2_j2i *\fIa\fP); void \fBlibj2_minus_j2i_to_j2i\fP(const struct libj2_j2i *\fIa\fP, struct libj2_j2i *\fIr\fP); void \fBlibj2_minus_j2i_to_j2u\fP(const struct libj2_j2i *\fIa\fP, struct libj2_j2u *\fIr\fP); + void \fBlibj2_minus_j2u\fP(struct libj2_j2u *\fIa\fP); void \fBlibj2_minus_j2u_to_j2i\fP(const struct libj2_j2u *\fIa\fP, struct libj2_j2i *\fIr\fP); void \fBlibj2_minus_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, struct libj2_j2u *\fIr\fP); diff --git a/libj2_str_to_j2i.3 b/libj2_str_to_j2i.3 index f8da5f8..cc49d51 100644 --- a/libj2_str_to_j2i.3 +++ b/libj2_str_to_j2i.3 @@ -96,9 +96,9 @@ and 0 otherwise. .I digits1 shall either be .I NULL -(equivlent to +(equivalent to .BR \(dq0123456789\(dq ) -for the decimal system, or the digits use +for the decimal system, or the digits to use in order of value (zero first). The radix will be the length of .IR digits1 , |
