Mercurial > hg > xemacs-beta
annotate src/number-mp.h @ 5518:3cc7470ea71c
gnuclient: if TMPDIR was set and connect failed, try again with /tmp
2011-06-03 Aidan Kehoe <kehoea@parhasard.net>
* gnuslib.c (connect_to_unix_server):
Retry with /tmp as a directory in which to search for Unix sockets
if an attempt to connect with some other directory failed (which
may be because gnuclient and gnuserv don't share an environment
value for TMPDIR, or because gnuserv was compiled with USE_TMPDIR
turned off).
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Fri, 03 Jun 2011 18:40:57 +0100 |
parents | 2aa9cd456ae7 |
children | c9e5612f5424 |
rev | line source |
---|---|
1983 | 1 /* Definitions of numeric types for XEmacs using the MP library. |
2 Copyright (C) 2004 Jerry James. | |
3 | |
4 This file is part of XEmacs. | |
5 | |
5405
2aa9cd456ae7
Move src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
5231
diff
changeset
|
6 XEmacs is free software: you can redistribute it and/or modify it |
1983 | 7 under the terms of the GNU General Public License as published by the |
5405
2aa9cd456ae7
Move src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
5231
diff
changeset
|
8 Free Software Foundation, either version 3 of the License, or (at your |
2aa9cd456ae7
Move src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
5231
diff
changeset
|
9 option) any later version. |
1983 | 10 |
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
5405
2aa9cd456ae7
Move src/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
5231
diff
changeset
|
17 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
1983 | 18 |
19 /* Synched up with: Not in FSF. */ | |
20 | |
21 /* This library defines the following types: | |
22 bignum = MINT | |
23 | |
24 The MP library does not include support for ratios or bigfloats. | |
25 */ | |
26 | |
27 #ifndef INCLUDED_number_mp_h_ | |
28 #define INCLUDED_number_mp_h_ | |
29 | |
30 /* BSD MP libraries without MP_PREFIX define a function named pow in mp.h that | |
31 has a different prototype from the one in math.h. We don't use that | |
32 function anyway, so we do this for safety purposes. However, this means | |
33 that number-mp.h must always be included before math.h. */ | |
34 #define pow mp_pow | |
35 #include <mp.h> | |
36 #undef pow | |
37 | |
38 #ifdef MP_PREFIX | |
39 #define MP_GCD mp_gcd | |
40 #define MP_ITOM mp_itom | |
41 #define MP_MADD mp_madd | |
42 #define MP_MCMP mp_mcmp | |
43 #define MP_MDIV mp_mdiv | |
44 #define MP_MFREE mp_mfree | |
45 #define MP_MSUB mp_msub | |
46 #define MP_MULT mp_mult | |
47 #define MP_SDIV mp_sdiv | |
48 #ifdef HAVE_MP_MOVE | |
49 #define MP_MOVE(x,y) mp_move (x, y) | |
50 #else | |
51 #define MP_MOVE(x,y) mp_madd (x, bignum_zero, y) | |
52 #endif | |
53 #else | |
54 #define MP_GCD gcd | |
55 #define MP_ITOM itom | |
56 #define MP_MADD madd | |
57 #define MP_MCMP mcmp | |
58 #define MP_MDIV mdiv | |
59 #define MP_MFREE mfree | |
60 #define MP_MSUB msub | |
61 #define MP_MULT mult | |
62 #define MP_SDIV sdiv | |
63 #ifdef HAVE_MP_MOVE | |
64 #define MP_MOVE(x,y) move (x, y) | |
65 #else | |
66 #define MP_MOVE(x,y) madd (x, bignum_zero, y) | |
67 #endif | |
68 #endif | |
69 | |
70 typedef MINT *bignum; | |
71 | |
72 extern void init_number_mp(void); | |
73 | |
74 | |
75 /********************************* Bignums **********************************/ | |
76 | |
77 #define HAVE_BIGNUM 1 | |
78 | |
79 extern MINT *bignum_zero, *intern_bignum; | |
80 extern MINT *bignum_min_int, *bignum_max_int, *bignum_max_uint; | |
81 extern MINT *bignum_min_long, *bignum_max_long, *bignum_max_ulong; | |
82 extern short div_rem; | |
83 | |
84 /***** Bignum: basic functions *****/ | |
85 #define bignum_init(b) (b = MP_ITOM (0)) | |
86 #define bignum_fini(b) MP_MFREE (b) | |
87 #define bignum_hashcode(b) bignum_to_uint (b) | |
88 #define bignum_sign(b) MP_MCMP (b, bignum_zero) | |
89 #define bignum_evenp(b) (MP_SDIV (b, 2, intern_bignum, &div_rem), \ | |
90 div_rem == 0) | |
91 #define bignum_oddp(b) (MP_SDIV (b, 2, intern_bignum, &div_rem), \ | |
92 div_rem != 0) | |
93 | |
94 /***** Bignum: size *****/ | |
95 #define bignum_fits_int_p(b) (MP_MCMP (b, bignum_min_int) >= 0 && \ | |
96 MP_MCMP (b, bignum_max_int) <= 0) | |
97 #define bignum_fits_uint_p(b) (MP_MCMP (b, bignum_zero) >= 0 && \ | |
98 MP_MCMP (b, bignum_max_uint) <= 0) | |
99 #define bignum_fits_long_p(b) (MP_MCMP (b, bignum_min_long) >= 0 && \ | |
100 MP_MCMP (b, bignum_max_long) <= 0) | |
101 #define bignum_fits_ulong_p(b) (MP_MCMP (b, bignum_zero) >= 0 && \ | |
102 MP_MCMP (b, bignum_max_ulong) <= 0) | |
103 | |
104 /***** Bignum: conversions *****/ | |
105 extern char *bignum_to_string(bignum, int); | |
106 extern int bignum_to_int(bignum); | |
107 extern unsigned int bignum_to_uint(bignum); | |
108 extern long bignum_to_long(bignum); | |
109 extern unsigned long bignum_to_ulong(bignum); | |
110 extern double bignum_to_double(bignum); | |
111 | |
112 /***** Bignum: converting assignments *****/ | |
113 #define bignum_set(b1, b2) MP_MOVE (b2, b1) | |
114 extern int bignum_set_string(bignum, const char *, int); | |
115 extern void bignum_set_long(bignum, long); | |
116 extern void bignum_set_ulong(bignum, unsigned long); | |
117 extern void bignum_set_double(bignum, double); | |
118 | |
119 /***** Bignum: comparisons *****/ | |
120 #define bignum_cmp(b1,b2) MP_MCMP (b1, b2) | |
121 #define bignum_lt(b1,b2) (MP_MCMP (b1, b2) < 0) | |
122 #define bignum_le(b1,b2) (MP_MCMP (b1, b2) <= 0) | |
123 #define bignum_eql(b1,b2) (MP_MCMP (b1, b2) == 0) | |
124 #define bignum_ge(b1,b2) (MP_MCMP (b1, b2) >= 0) | |
125 #define bignum_gt(b1,b2) (MP_MCMP (b1, b2) > 0) | |
126 | |
127 /***** Bignum: arithmetic *****/ | |
128 #define bignum_neg(b,b2) MP_MSUB (bignum_zero, b2, b) | |
129 #define bignum_abs(b,b2) (MP_MCMP (b2, bignum_zero) < 0 \ | |
130 ? MP_MSUB (bignum_zero, b2, b) \ | |
131 : MP_MADD (bignum_zero, b2, b)) | |
132 #define bignum_add(b,b1,b2) MP_MADD (b1, b2, b) | |
133 #define bignum_sub(b,b1,b2) MP_MSUB (b1, b2, b) | |
134 #define bignum_mul(b,b1,b2) MP_MULT (b1, b2, b) | |
135 extern int bignum_divisible_p(bignum, bignum); | |
136 #define bignum_div(b,b1,b2) MP_MDIV (b1, b2, b, intern_bignum) | |
137 extern void bignum_ceil(bignum, bignum, bignum); | |
138 extern void bignum_floor(bignum, bignum, bignum); | |
139 #define bignum_mod(b,b1,b2) MP_MDIV (b1, b2, intern_bignum, b) | |
140 extern void bignum_pow(bignum, bignum, unsigned long); | |
141 #define bignum_gcd(res,b1,b2) MP_GCD (b1, b2, res) | |
142 extern void bignum_lcm(bignum, bignum, bignum); | |
143 | |
144 /***** Bignum: bit manipulations *****/ | |
145 extern void bignum_and(bignum, bignum, bignum); | |
146 extern void bignum_ior(bignum, bignum, bignum); | |
147 extern void bignum_xor(bignum, bignum, bignum); | |
148 extern void bignum_not(bignum, bignum); | |
149 extern void bignum_setbit(bignum, unsigned long); | |
150 extern void bignum_clrbit(bignum, unsigned long); | |
151 extern int bignum_testbit(bignum, unsigned long); | |
152 extern void bignum_lshift(bignum, bignum, unsigned long); | |
153 extern void bignum_rshift(bignum, bignum, unsigned long); | |
154 | |
155 /***** Bignum: random numbers *****/ | |
156 extern void bignum_random_seed(unsigned long); | |
157 extern void bignum_random(bignum, bignum); | |
158 | |
159 #endif /* INCLUDED_number_mp_h_ */ |