PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 1ms 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. // General includes.
  3. #include "base/cl_sysdep.h"
  4. // Specification.
  5. #include "cln/integer.h"
  6. // Implementation.
  7. #include "integer/cl_I.h"
  8. #include "base/digitseq/cl_DS.h"
  9. namespace cln {
  10. const cl_I plus1 (const cl_I& x)
  11. {
  12. if (fixnump(x))
  13. { // x ist Fixnum
  14. if (x.word != cl_combine(cl_FN_tag,bit(cl_value_len-1)-1))
  15. // bleibt Fixnum: direkt 1 addieren
  16. // This assumes cl_value_shift + cl_value_len == cl_pointer_size.
  17. { return cl_I_from_word(x.word + cl_combine(0,1)); }
  18. }
  19. // die sichere Methode
  20. { CL_ALLOCA_STACK;
  21. var uintD* MSDptr;
  22. var uintC len;
  23. var uintD* LSDptr;
  24. I_to_NDS_1(x, MSDptr=,len=,LSDptr=); // NDS zu x bilden.
  25. DS_1_plus(LSDptr,len); // zur NDS 1 addieren
  26. return DS_to_I(MSDptr,len); // wieder zum Integer machen
  27. }
  28. }
  29. } // namespace cln