-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlong_arithmetic.h
51 lines (34 loc) · 1.35 KB
/
long_arithmetic.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#ifndef _LONG_ARITHMETIC_H_
#define _LONG_ARITHMETIC_H_
#define FLG_NEGATIVE 0x01
#define FLG_ZERO 0x02
#define SET_NUM_FLG(num, flg) {(num)->flags = (num)->flags | (flg);}
#define UNSET_NUM_FLG(num, flg) {(num)->flags = (num)->flags & ~(flg);}
#define ISSET_NUM_FLG(num, flg) ((num)->flags & (flg))
#define DEFAUL_DIGITS_SIZE 4
typedef struct long_num
{
int flags;
int size;
unsigned int *digits;
} long_num;
long_num* ln_create(void);
void ln_destroy(long_num*);
long_num* ln_create_from_hex_string(char *, int);
void ln_add(const long_num*, const long_num*, long_num*);
void ln_sub(const long_num*, const long_num*, long_num*);
void ln_mult(const long_num*, const long_num*, long_num*);
void ln_div(const long_num*, const long_num*, long_num*);
void ln_mod(const long_num*, const long_num*, long_num*);
void ln_exp(const long_num*, const long_num*, long_num*);
void ln_low_add(const long_num*, const long_num*, long_num*);
void ln_low_sub(const long_num*, const long_num*, long_num*);
void ln_extend_num(long_num*, int, int);
void ln_print_hex(const long_num*);
int ln_cmp(const long_num*, const long_num*);
int ln_low_cmp(const long_num*, const long_num*);
int ln_sign(const long_num*);
void ln_cpy(const long_num*, long_num*);
void ln_low_cpy(const long_num*, long_num*);
int ln_is_zero(const long_num*);
#endif /* #ifndef _LONG_ARITHMETIC_H_ */