Subversion Repositories planix.SVN

Rev

Rev 22 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 22 Rev 26
Line 11... Line 11...
11
mpint*
11
mpint*
12
uvtomp(uvlong v, mpint *b)
12
uvtomp(uvlong v, mpint *b)
13
{
13
{
14
	int s;
14
	int s;
15
 
15
 
16
	if(b == nil)
16
	if(b == nil){
17
		b = mpnew(VLDIGITS*sizeof(mpdigit));
17
		b = mpnew(VLDIGITS*Dbits);
-
 
18
		setmalloctag(b, getcallerpc(&v));
18
	else
19
	}else
19
		mpbits(b, VLDIGITS*sizeof(mpdigit));
20
		mpbits(b, VLDIGITS*Dbits);
20
	mpassign(mpzero, b);
-
 
21
	if(v == 0)
-
 
22
		return b;
21
	b->sign = 1;
23
	for(s = 0; s < VLDIGITS && v != 0; s++){
22
	for(s = 0; s < VLDIGITS; s++){
24
		b->p[s] = v;
23
		b->p[s] = v;
25
		v >>= sizeof(mpdigit)*8;
24
		v >>= sizeof(mpdigit)*8;
26
	}
25
	}
27
	b->top = s;
26
	b->top = s;
28
	return b;
27
	return mpnorm(b);
29
}
28
}
30
 
29
 
31
uvlong
30
uvlong
32
mptouv(mpint *b)
31
mptouv(mpint *b)
33
{
32
{
34
	uvlong v;
33
	uvlong v;
35
	int s;
34
	int s;
36
 
35
 
37
	if(b->top == 0)
36
	if(b->top == 0 || b->sign < 0)
38
		return 0LL;
37
		return 0LL;
39
 
38
 
40
	mpnorm(b);
-
 
41
	if(b->top > VLDIGITS)
39
	if(b->top > VLDIGITS)
42
		return MAXVLONG;
40
		return -1LL;
43
 
41
 
44
	v = 0ULL;
42
	v = 0ULL;
45
	for(s = 0; s < b->top; s++)
43
	for(s = 0; s < b->top; s++)
46
		v |= (uvlong)b->p[s]<<(s*sizeof(mpdigit)*8);
44
		v |= (uvlong)b->p[s]<<(s*sizeof(mpdigit)*8);
47
 
45