Mercurial > hg > xemacs-beta
annotate src/number-mp.h @ 5015:d95c102a96d3
cleanups for specifier font stages, from ben-unicode-internal (preparation for eliminating shadowed warnings)
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-02-08 Ben Wing <ben@xemacs.org>
* faces.c:
* faces.c (face_property_matching_instance):
* faces.c (ensure_face_cachel_contains_charset):
* faces.h (FACE_FONT):
* lisp.h:
* lisp.h (enum font_specifier_matchspec_stages):
* objects-msw.c:
* objects-msw.c (mswindows_font_spec_matches_charset):
* objects-msw.c (mswindows_find_charset_font):
* objects-tty.c:
* objects-tty.c (tty_font_spec_matches_charset):
* objects-tty.c (tty_find_charset_font):
* objects-xlike-inc.c:
* objects-xlike-inc.c (XFUN):
* objects-xlike-inc.c (xft_find_charset_font):
* objects.c:
* objects.c (font_instantiate):
* objects.c (FROB):
* specifier.c:
* specifier.c (charset_matches_specifier_tag_set_p):
* specifier.c (call_charset_predicate):
* specifier.c (define_specifier_tag):
* specifier.c (Fdefine_specifier_tag):
* specifier.c (setup_charset_initial_specifier_tags):
* specifier.c (specifier_instance_from_inst_list):
* specifier.c (FROB):
* specifier.c (vars_of_specifier):
* specifier.h:
Rename the specifier-font-matching stages in preparation for
eliminating shadowed warnings, some other related fixes from
ben-unicode-internal.
1. Rename raw enums:
initial -> STAGE_INITIAL
final -> STAGE_FINAL
impossible -> NUM_MATCHSPEC_STAGES
2. Move `enum font_specifier_matchspec_stages' from
specifier.h to lisp.h.
3. Whitespace changes to match coding standards.
4. Eliminate unused second argument STAGE in charset predicates
that don't use it -- the code that calls the charset predicates
is now smart enough to supply the right number of arguments
automatically.
5. Add some long(ish) comments and authorial notices, esp. in
objects.c.
6. In specifier.c, change Vcharset_tag_lists from a vector over
leading bytes to a hash table over charsets. This change is
unnecessary currently but doesn't hurt and will be required
when we merge in Unicode-internal.
7. In specifier.c, extract out the code that calls charset predicates
into a function call_charset_predicate().
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Mon, 08 Feb 2010 16:51:25 -0600 |
parents | 2fc0e2f18322 |
children | ba07c880114a |
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 | |
6 XEmacs is free software; you can redistribute it and/or modify it | |
7 under the terms of the GNU General Public License as published by the | |
8 Free Software Foundation; either version 2, or (at your option) any | |
9 later version. | |
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 | |
17 along with XEmacs; see the file COPYING. If not, write to | |
4802
2fc0e2f18322
Don't create any bignums before pdumping. Add bignum, ratio, and bigfloat
Jerry James <james@xemacs.org>
parents:
1983
diff
changeset
|
18 the Free Software Foundation, Inc., 51 Franklin St - Fifth Floor, |
2fc0e2f18322
Don't create any bignums before pdumping. Add bignum, ratio, and bigfloat
Jerry James <james@xemacs.org>
parents:
1983
diff
changeset
|
19 Boston, MA 02111-1301, USA. */ |
1983 | 20 |
21 /* Synched up with: Not in FSF. */ | |
22 | |
23 /* This library defines the following types: | |
24 bignum = MINT | |
25 | |
26 The MP library does not include support for ratios or bigfloats. | |
27 */ | |
28 | |
29 #ifndef INCLUDED_number_mp_h_ | |
30 #define INCLUDED_number_mp_h_ | |
31 | |
32 /* BSD MP libraries without MP_PREFIX define a function named pow in mp.h that | |
33 has a different prototype from the one in math.h. We don't use that | |
34 function anyway, so we do this for safety purposes. However, this means | |
35 that number-mp.h must always be included before math.h. */ | |
36 #define pow mp_pow | |
37 #include <mp.h> | |
38 #undef pow | |
39 | |
40 #ifdef MP_PREFIX | |
41 #define MP_GCD mp_gcd | |
42 #define MP_ITOM mp_itom | |
43 #define MP_MADD mp_madd | |
44 #define MP_MCMP mp_mcmp | |
45 #define MP_MDIV mp_mdiv | |
46 #define MP_MFREE mp_mfree | |
47 #define MP_MSUB mp_msub | |
48 #define MP_MULT mp_mult | |
49 #define MP_SDIV mp_sdiv | |
50 #ifdef HAVE_MP_MOVE | |
51 #define MP_MOVE(x,y) mp_move (x, y) | |
52 #else | |
53 #define MP_MOVE(x,y) mp_madd (x, bignum_zero, y) | |
54 #endif | |
55 #else | |
56 #define MP_GCD gcd | |
57 #define MP_ITOM itom | |
58 #define MP_MADD madd | |
59 #define MP_MCMP mcmp | |
60 #define MP_MDIV mdiv | |
61 #define MP_MFREE mfree | |
62 #define MP_MSUB msub | |
63 #define MP_MULT mult | |
64 #define MP_SDIV sdiv | |
65 #ifdef HAVE_MP_MOVE | |
66 #define MP_MOVE(x,y) move (x, y) | |
67 #else | |
68 #define MP_MOVE(x,y) madd (x, bignum_zero, y) | |
69 #endif | |
70 #endif | |
71 | |
72 typedef MINT *bignum; | |
73 | |
74 extern void init_number_mp(void); | |
75 | |
76 | |
77 /********************************* Bignums **********************************/ | |
78 | |
79 #define HAVE_BIGNUM 1 | |
80 | |
81 extern MINT *bignum_zero, *intern_bignum; | |
82 extern MINT *bignum_min_int, *bignum_max_int, *bignum_max_uint; | |
83 extern MINT *bignum_min_long, *bignum_max_long, *bignum_max_ulong; | |
84 extern short div_rem; | |
85 | |
86 /***** Bignum: basic functions *****/ | |
87 #define bignum_init(b) (b = MP_ITOM (0)) | |
88 #define bignum_fini(b) MP_MFREE (b) | |
89 #define bignum_hashcode(b) bignum_to_uint (b) | |
90 #define bignum_sign(b) MP_MCMP (b, bignum_zero) | |
91 #define bignum_evenp(b) (MP_SDIV (b, 2, intern_bignum, &div_rem), \ | |
92 div_rem == 0) | |
93 #define bignum_oddp(b) (MP_SDIV (b, 2, intern_bignum, &div_rem), \ | |
94 div_rem != 0) | |
95 | |
96 /***** Bignum: size *****/ | |
97 #define bignum_fits_int_p(b) (MP_MCMP (b, bignum_min_int) >= 0 && \ | |
98 MP_MCMP (b, bignum_max_int) <= 0) | |
99 #define bignum_fits_uint_p(b) (MP_MCMP (b, bignum_zero) >= 0 && \ | |
100 MP_MCMP (b, bignum_max_uint) <= 0) | |
101 #define bignum_fits_long_p(b) (MP_MCMP (b, bignum_min_long) >= 0 && \ | |
102 MP_MCMP (b, bignum_max_long) <= 0) | |
103 #define bignum_fits_ulong_p(b) (MP_MCMP (b, bignum_zero) >= 0 && \ | |
104 MP_MCMP (b, bignum_max_ulong) <= 0) | |
105 | |
106 /***** Bignum: conversions *****/ | |
107 extern char *bignum_to_string(bignum, int); | |
108 extern int bignum_to_int(bignum); | |
109 extern unsigned int bignum_to_uint(bignum); | |
110 extern long bignum_to_long(bignum); | |
111 extern unsigned long bignum_to_ulong(bignum); | |
112 extern double bignum_to_double(bignum); | |
113 | |
114 /***** Bignum: converting assignments *****/ | |
115 #define bignum_set(b1, b2) MP_MOVE (b2, b1) | |
116 extern int bignum_set_string(bignum, const char *, int); | |
117 extern void bignum_set_long(bignum, long); | |
118 extern void bignum_set_ulong(bignum, unsigned long); | |
119 extern void bignum_set_double(bignum, double); | |
120 | |
121 /***** Bignum: comparisons *****/ | |
122 #define bignum_cmp(b1,b2) MP_MCMP (b1, b2) | |
123 #define bignum_lt(b1,b2) (MP_MCMP (b1, b2) < 0) | |
124 #define bignum_le(b1,b2) (MP_MCMP (b1, b2) <= 0) | |
125 #define bignum_eql(b1,b2) (MP_MCMP (b1, b2) == 0) | |
126 #define bignum_ge(b1,b2) (MP_MCMP (b1, b2) >= 0) | |
127 #define bignum_gt(b1,b2) (MP_MCMP (b1, b2) > 0) | |
128 | |
129 /***** Bignum: arithmetic *****/ | |
130 #define bignum_neg(b,b2) MP_MSUB (bignum_zero, b2, b) | |
131 #define bignum_abs(b,b2) (MP_MCMP (b2, bignum_zero) < 0 \ | |
132 ? MP_MSUB (bignum_zero, b2, b) \ | |
133 : MP_MADD (bignum_zero, b2, b)) | |
134 #define bignum_add(b,b1,b2) MP_MADD (b1, b2, b) | |
135 #define bignum_sub(b,b1,b2) MP_MSUB (b1, b2, b) | |
136 #define bignum_mul(b,b1,b2) MP_MULT (b1, b2, b) | |
137 extern int bignum_divisible_p(bignum, bignum); | |
138 #define bignum_div(b,b1,b2) MP_MDIV (b1, b2, b, intern_bignum) | |
139 extern void bignum_ceil(bignum, bignum, bignum); | |
140 extern void bignum_floor(bignum, bignum, bignum); | |
141 #define bignum_mod(b,b1,b2) MP_MDIV (b1, b2, intern_bignum, b) | |
142 extern void bignum_pow(bignum, bignum, unsigned long); | |
143 #define bignum_gcd(res,b1,b2) MP_GCD (b1, b2, res) | |
144 extern void bignum_lcm(bignum, bignum, bignum); | |
145 | |
146 /***** Bignum: bit manipulations *****/ | |
147 extern void bignum_and(bignum, bignum, bignum); | |
148 extern void bignum_ior(bignum, bignum, bignum); | |
149 extern void bignum_xor(bignum, bignum, bignum); | |
150 extern void bignum_not(bignum, bignum); | |
151 extern void bignum_setbit(bignum, unsigned long); | |
152 extern void bignum_clrbit(bignum, unsigned long); | |
153 extern int bignum_testbit(bignum, unsigned long); | |
154 extern void bignum_lshift(bignum, bignum, unsigned long); | |
155 extern void bignum_rshift(bignum, bignum, unsigned long); | |
156 | |
157 /***** Bignum: random numbers *****/ | |
158 extern void bignum_random_seed(unsigned long); | |
159 extern void bignum_random(bignum, bignum); | |
160 | |
161 #endif /* INCLUDED_number_mp_h_ */ |