00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00039 #ifndef __NUSMV_CORE_UTILS_BIGNUMBERS_BIGNUMBERS_H__
00040
00046 #define __NUSMV_CORE_UTILS_BIGNUMBERS_BIGNUMBERS_H__
00047
00048 #include "nusmv/core/utils/utils.h"
00049
00050
00051
00052
00053
00054
00055
00056
00057
00066 typedef struct {
00067 void *repr;
00068 } Number;
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00084
00085
00086
00087
00093 Number BigNumber_bit_complement(Number* n);
00094
00102 Number BigNumber_twos_complement(Number* n, int width);
00103
00109 Number BigNumber_bit_and(Number* left, Number* right);
00110
00116 Number BigNumber_bit_or(Number* left, Number* right);
00117
00123 Number BigNumber_bit_xor(Number* left, Number* right);
00124
00130 Number BigNumber_bit_left_shift(Number* number, int amount);
00131
00137 Number BigNumber_bit_right_shift(Number* number, int amount);
00138
00144 Number BigNumber_pow2(int widht);
00145
00151 Number BigNumber_max_unsigned_int(int widht);
00152
00161 boolean
00162 BigNumber_to_unsigned_long_long(Number* number,
00163 unsigned long long* target);
00164
00172 void BigNumber_set_bit(Number* number,
00173 int location, int value);
00174
00182 boolean BigNumber_test_bit(Number* number, int location);
00183
00189 Number
00190 BigNumber_make_number_from_unsigned_long_long(unsigned long long n);
00191
00197 Number BigNumber_make_number_from_long(long n);
00198
00206 int BigNumber_assign_number_from_string(char* string,
00207 char* error_char,
00208 int base,
00209 Number* value);
00210
00216 Number BigNumber_multiplication(Number* left, Number* right);
00217
00223 Number BigNumber_plus(Number* left, Number* right);
00224
00230 Number BigNumber_minus(Number* left, Number* right);
00231
00237 Number BigNumber_copy(Number* orig);
00238
00244 boolean BigNumber_less_than(Number* left, Number* right);
00245
00251 boolean BigNumber_equal(Number* left, Number* right);
00252
00258 boolean BigNumber_identity(Number* left, Number* right);
00259
00265 boolean
00266 BigNumber_does_integer_fit_into_number_of_bits(Number* v, int widht);
00267
00276 void
00277 BigNumber_divmod(Number* left, Number* right, Number* q, Number* r);
00278
00284 void BigNumber_free_number(Number* number);
00285
00292 char* BigNumber_print_as_number(Number* number, int base);
00293
00296 #endif