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
25 #ifndef __ST_LARGE_INTEGER__
26 #define __ST_LARGE_INTEGER__
29 #include <st-heap-object.h>
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))
101 st_large_integer_value (st_oop integer
)
103 return & ST_LARGE_INTEGER (integer
)->value
;
106 #endif /* __ST_LARGE_INTEGER */