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
00041 #ifndef __NUSMV_CORE_UTILS_BIG_WORD_NUMBER_PRIVATE_H__
00042 #define __NUSMV_CORE_UTILS_BIG_WORD_NUMBER_PRIVATE_H__
00043
00044 #if HAVE_CONFIG_H
00045 #include "nusmv-config.h"
00046 #endif
00047
00048 #if !NUSMV_HAVE_BIGNUMBERS
00049 #error "big number cannot be compiled as it was not configured"
00050 #endif
00051
00052
00053 #include "nusmv/core/utils/WordNumber.h"
00054 #include "nusmv/core/utils/BigWordNumber_private.h"
00055
00056 #include "nusmv/core/utils/utils.h"
00057
00058 #include "nusmv/core/utils/bignumbers/bignumbers.h"
00059 #include "nusmv/core/utils/ustring.h"
00060
00061
00068 typedef struct wordnumvale_intern {
00069 int width;
00070 Number dat;
00071 } WordNumberValue_intern;
00072
00078 typedef WordNumberValue_intern* WordNumberValue_intern_ptr;
00079
00080
00087
00088 typedef struct WordNumber_TAG
00089 {
00090 WordNumberValue_intern value;
00091
00092 } WordNumber;
00093
00101 WordNumberValue_intern
00102 WordNumber_create_WordNumberValue_intern(Number, int);
00103
00111 WordNumberValue_intern
00112 WordNumber_copy_WordNumberValue_intern(WordNumberValue_intern*);
00113
00114 void WordNumber_free_WordNumberValue_intern(WordNumberValue_intern*);
00115
00116
00117
00118
00119
00120 char*
00121 WordNumber_Internal_value_to_based_string(WordNumberValue_intern value,
00122 int base, boolean
00123 isSigned);
00124
00129 WordNumberValue
00130 word_number_to_signed_c_value(const WordNumber_ptr self);
00131
00132 void
00133 WNV_free_WordNumberValue_intern(WordNumberValue_intern_ptr value);
00134
00142 WordNumberValue_intern
00143 WordNumber_evaluate_unsigned_extend(WordNumberValue_intern v,
00144 int numberOfTimes);
00145
00153 WordNumberValue_intern
00154 WordNumber_evaluate_signed_extend(WordNumberValue_intern v,
00155 int numberOfTimes);
00156
00164 WordNumberValue_intern
00165 WordNumber_evaluate_right_rotate(WordNumberValue_intern v,
00166 int numberOfBits);
00167
00175 WordNumberValue_intern
00176 WordNumber_evaluate_left_rotate(WordNumberValue_intern v,
00177 int numberOfBits);
00178
00186 WordNumberValue_intern
00187 WordNumber_evaluate_left_shift(WordNumberValue_intern v,
00188 int numberOfBits);
00189
00197 WordNumberValue_intern
00198 WordNumber_evaluate_sright_shift(WordNumberValue_intern v,
00199 int numberOfBits);
00200
00208 WordNumberValue_intern
00209 WordNumber_evaluate_uright_shift(WordNumberValue_intern v,
00210 int numberOfBits);
00211
00236 WordNumberValue_intern
00237 WordNumber_evaluate_select(WordNumberValue_intern v1,
00238 int highBit,
00239 int lowBit);
00240
00247 WordNumberValue_intern
00248 WordNumber_evaluate_unary_minus(WordNumberValue_intern v);
00249
00257 WordNumberValue_intern
00258 WordNumber_evaluate_concat(WordNumberValue_intern v1,
00259 WordNumberValue_intern v2);
00260
00268 WordNumberValue_intern
00269 WordNumber_evaluate_implies(WordNumberValue_intern v1,
00270 WordNumberValue_intern v2);
00271
00279 WordNumberValue_intern
00280 WordNumber_evaluate_xnor(WordNumberValue_intern v1,
00281 WordNumberValue_intern v2);
00282
00290 WordNumberValue_intern
00291 WordNumber_evaluate_xor(WordNumberValue_intern v1,
00292 WordNumberValue_intern v2);
00293
00301 WordNumberValue_intern
00302 WordNumber_evaluate_or(WordNumberValue_intern v1,
00303 WordNumberValue_intern v2);
00304
00312 WordNumberValue_intern
00313 WordNumber_evaluate_and(WordNumberValue_intern v1,
00314 WordNumberValue_intern v2);
00315
00333 WordNumberValue_intern
00334 WordNumber_evaluate_srem(WordNumberValue_intern v1,
00335 WordNumberValue_intern v2);
00336
00354 WordNumberValue_intern
00355 WordNumber_evaluate_urem(WordNumberValue_intern v1,
00356 WordNumberValue_intern v2);
00357
00376 WordNumberValue_intern
00377 WordNumber_evaluate_sdiv(WordNumberValue_intern v1,
00378 WordNumberValue_intern v2);
00379
00386 WordNumberValue_intern
00387 WordNumber_evaluate_not(WordNumberValue_intern v1);
00388
00395 WordNumberValue_intern
00396 WordNumber_evaluate_udiv(WordNumberValue_intern v1,
00397 WordNumberValue_intern v2);
00398
00406 WordNumberValue_intern
00407 WordNumber_evaluate_mul(WordNumberValue_intern v1,
00408 WordNumberValue_intern v2);
00409
00417 WordNumberValue_intern
00418 WordNumber_evaluate_minus(WordNumberValue_intern v1,
00419 WordNumberValue_intern v2);
00420
00428 WordNumberValue_intern
00429 WordNumber_evaluate_plus(WordNumberValue_intern v1,
00430 WordNumberValue_intern v2);
00431
00432
00433
00434 #endif