3 #include "base/cl_sysdep.h"
6 #include "integer/bitwise/cl_I_log.h"
11 #include "cln/number.h"
12 #include "integer/cl_I.h"
13 #include "base/digitseq/cl_DS.h"
17 uintD* I_to_DS_n_aux (const cl_I& obj, uintC n, uintD* destptr)
18 { // Nun sind unterhalb von destptr n Digits Platz.
19 // oberen Teil der DS aus obj füllen, dabei destptr erniedrigen:
23 #if (intDsize==64) // && (FN_maxlength==1)
24 lsprefnext(destptr) = FN_to_Q(obj);
25 #else // (intDsize<=32)
26 var uintV wert = FN_to_V(obj);
27 #define FN_maxlength_a (intVsize/intDsize)
28 #define FN_maxlength_b (FN_maxlength<=FN_maxlength_a ? FN_maxlength : FN_maxlength_a)
29 // FN_maxlength Digits ablegen. Davon kann man FN_maxlength_b Digits aus wert nehmen.
30 #if (FN_maxlength_b > 1)
31 doconsttimes(FN_maxlength_b-1,
32 lsprefnext(destptr) = (uintD)wert; wert = wert >> intDsize;
35 lsprefnext(destptr) = (uintD)wert;
36 #if (FN_maxlength > FN_maxlength_b)
37 // Es ist cl_value_len-1 = intVsize, brauche
38 // noch FN_maxlength-FN_maxlength_b = 1 Digit.
39 lsprefnext(destptr) = (sintD)sign_of(FN_to_V(obj));
46 { var uintC len = TheBignum(obj)->length;
48 destptr = copy_loop_lsp(BN_LSDptr(obj),destptr,len); // DS kopieren
50 // unteren Teil mit Fülldigits, gebildet aus dem Vorzeichen, füllen:
52 { destptr = fill_loop_lsp(destptr,n,sign_of_sintD(mspref(destptr,0))); }
53 // destptr zeigt nun aufs untere Ende der DS.