// I_to_DS_n_aux().
// General includes.
#include "cl_sysdep.h"
// Specification.
#include "cl_I_log.h"
// Implementation.
#include "cln/number.h"
#include "cl_I.h"
#include "cl_DS.h"
namespace cln {
uintD* I_to_DS_n_aux (const cl_I& obj, uintC n, uintD* destptr)
{ // Nun sind unterhalb von destptr n Digits Platz.
// oberen Teil der DS aus obj füllen, dabei destptr erniedrigen:
if (fixnump(obj))
// Fixnum:
{
#if (intDsize==64) // && (FN_maxlength==1)
lsprefnext(destptr) = FN_to_Q(obj);
#else // (intDsize<=32)
var uint32 wert = FN_to_L(obj);
#define FN_maxlength_a (intLsize/intDsize)
#define FN_maxlength_b (FN_maxlength<=FN_maxlength_a ? FN_maxlength : FN_maxlength_a)
// FN_maxlength Digits ablegen. Davon kann man FN_maxlength_b Digits aus wert nehmen.
#if (FN_maxlength_b > 1)
doconsttimes(FN_maxlength_b-1,
lsprefnext(destptr) = (uintD)wert; wert = wert >> intDsize;
);
#endif
lsprefnext(destptr) = (uintD)wert;
#if (FN_maxlength > FN_maxlength_b)
// Es ist oint_data_len = intLsize, brauche
// noch FN_maxlength-FN_maxlength_b = 1 Digit.
lsprefnext(destptr) = (sintD)sign_of(FN_to_L(obj));
#endif
#endif
n -= FN_maxlength;
}
else
// Bignum:
{ var uintC len = TheBignum(obj)->length;
n -= len;
destptr = copy_loop_lsp(BN_LSDptr(obj),destptr,len); // DS kopieren
}
// unteren Teil mit Fülldigits, gebildet aus dem Vorzeichen, füllen:
if (!(n==0))
{ destptr = fill_loop_lsp(destptr,n,sign_of_sintD(mspref(destptr,0))); }
// destptr zeigt nun aufs untere Ende der DS.
return destptr;
}
} // namespace cln
syntax highlighted by Code2HTML, v. 0.9.1