/cln-1.3.2/src/integer/elem/cl_I_plus1.cc
C++ | 37 lines | 22 code | 8 blank | 7 comment | 3 complexity | 5379fbd688cbc6115ca7c0d6a0fcdf43 MD5 | raw file
Possible License(s): GPL-2.0
1// plus1().
2
3// General includes.
4#include "base/cl_sysdep.h"
5
6// Specification.
7#include "cln/integer.h"
8
9
10// Implementation.
11
12#include "integer/cl_I.h"
13#include "base/digitseq/cl_DS.h"
14
15namespace cln {
16
17const cl_I plus1 (const cl_I& x)
18{
19 if (fixnump(x))
20 { // x ist Fixnum
21 if (x.word != cl_combine(cl_FN_tag,bit(cl_value_len-1)-1))
22 // bleibt Fixnum: direkt 1 addieren
23 // This assumes cl_value_shift + cl_value_len == cl_pointer_size.
24 { return cl_I_from_word(x.word + cl_combine(0,1)); }
25 }
26 // die sichere Methode
27 { CL_ALLOCA_STACK;
28 var uintD* MSDptr;
29 var uintC len;
30 var uintD* LSDptr;
31 I_to_NDS_1(x, MSDptr=,len=,LSDptr=); // NDS zu x bilden.
32 DS_1_plus(LSDptr,len); // zur NDS 1 addieren
33 return DS_to_I(MSDptr,len); // wieder zum Integer machen
34 }
35}
36
37} // namespace cln