PageRenderTime 152ms CodeModel.GetById 47ms app.highlight 43ms RepoModel.GetById 0ms app.codeStats 0ms

/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