]> www.ginac.de Git - cln.git/blob - src/integer/conv/cl_I_from_UDS.cc
* src/integer/conv/cl_I_to_digits (I_to_digits): Fix an elusive stack
[cln.git] / src / integer / conv / cl_I_from_UDS.cc
1 // UDS_to_I().
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 // Specification.
7 #include "cl_I.h"
8
9
10 // Implementation.
11
12 #include "cln/number.h"
13 #include "cl_DS.h"
14
15 #undef MAYBE_INLINE
16 #define MAYBE_INLINE inline
17 #include "cl_I_from_NDS.cc"
18
19 namespace cln {
20
21 MAYBE_INLINE2
22 const cl_I UDS_to_I (uintD* MSDptr, uintC len)
23 {
24         while ( (!(len==0)) && (mspref(MSDptr,0)==0) ) // solange len>0 und MSD = 0,
25                 { msshrink(MSDptr); len--; } // Nulldigit streichen
26         // Dann wie bei NUDS_to_I :
27         if ((!(len==0)) && ((sintD)mspref(MSDptr,0) < 0))
28                 // Falls die Länge >0 und das Most significant Bit = 1 sind,
29                 // die Digit Sequence um ein Nulldigit erweitern:
30                 { lsprefnext(MSDptr) = 0; len++; }
31         return NDS_to_I(MSDptr,len);
32 }
33
34 }  // namespace cln