Refactored structure and accessors for arrayed objects (at the VM level)
[panda.git] / goo / st-large-integer.h
blobeecd89420b1c3842d58fdbe1464578da2f99f3ab
1 /*
2 * st-large-integer.h
4 * Copyright (C) 2008 Vincent Geddes
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
25 #ifndef __ST_LARGE_INTEGER__
26 #define __ST_LARGE_INTEGER__
28 #include <tommath.h>
29 #include <st-heap-object.h>
30 #include <st-types.h>
32 typedef struct
34 STHeader header;
36 mp_int value;
38 } STLargeInteger;
41 st_oop st_large_integer_new (mp_int * value);
43 st_oop st_large_integer_new_from_smi (st_smi integer);
45 st_oop st_large_integer_new_from_string (const char *string, guint radix);
47 char *st_large_integer_to_string (st_oop integer, guint radix);
50 st_oop st_large_integer_add (st_oop a, st_oop b, bool *error);
52 st_oop st_large_integer_sub (st_oop a, st_oop b, bool *error);
54 st_oop st_large_integer_mul (st_oop a, st_oop b, bool *error);
56 st_oop st_large_integer_div (st_oop a, st_oop b, bool *error);
58 st_oop st_large_integer_mod (st_oop a, st_oop b, bool *error);
60 st_oop st_large_integer_gcd (st_oop a, st_oop b, bool *error);
62 st_oop st_large_integer_lcm (st_oop a, st_oop b, bool *error);
64 st_oop st_large_integer_bitor (st_oop a, st_oop b, bool *error);
66 st_oop st_large_integer_bitand (st_oop a, st_oop b, bool *error);
68 st_oop st_large_integer_bitxor (st_oop a, st_oop b, bool *error);
70 st_oop st_large_integer_bitshift (st_oop a, int shift, bool *error);
72 st_oop st_large_integer_sqr (st_oop a, bool *error);
74 st_oop st_large_integer_neg (st_oop a, bool *error);
76 st_oop st_large_integer_abs (st_oop a, bool *error);
78 bool st_large_integer_eq (st_oop a, st_oop b, bool *error);
80 bool st_large_integer_lt (st_oop a, st_oop b, bool *error);
82 bool st_large_integer_gt (st_oop a, st_oop b, bool *error);
84 bool st_large_integer_le (st_oop a, st_oop b, bool *error);
86 bool st_large_integer_ge (st_oop a, st_oop b, bool *error);
88 bool st_large_integer_is_positive (st_oop a, bool *error);
90 bool st_large_integer_is_prime (st_oop a, bool *error);
93 INLINE mp_int *st_large_integer_value (st_oop integer);
95 const STDescriptor *st_large_integer_descriptor (void);
97 /* inline definitions */
98 #define ST_LARGE_INTEGER(oop) ((STLargeInteger *) ST_POINTER (oop))
100 INLINE mp_int *
101 st_large_integer_value (st_oop integer)
103 return & ST_LARGE_INTEGER (integer)->value;
106 #endif /* __ST_LARGE_INTEGER */