]> www.ginac.de Git - cln.git/blob - src/integer/conv/cl_I_from_DS.cc
Don't generate cln.texi from cln.tex any more.
[cln.git] / src / integer / conv / cl_I_from_DS.cc
1 // DS_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 DS_to_I (const uintD* MSDptr, uintC len)
23 {
24       // erst normalisieren.
25       // Dabei evtl. MSDptr erhöhen und len erniedrigen:
26       if (!(len==0)) // leere DS ist normalisiert
27         { var uintC count = len-1;
28           if ((sintD)mspref(MSDptr,0) >= 0)
29             // Zahl >= 0
30             { // versuche maximal len-1 führende Nullen-Digits zu streichen:
31               while (!(count==0) && (mspref(MSDptr,0)==0) && ((sintD)mspref(MSDptr,1)>=0))
32                 { msshrink(MSDptr); len--; count--; } // Nulldigit streichen
33             }
34             else
35             // Zahl < 0
36             // versuche maximal len-1 führende Einsen-Digits zu streichen:
37             { while (!(count==0) && ((sintD)mspref(MSDptr,0)==-1) && ((sintD)mspref(MSDptr,1)<0))
38                 { msshrink(MSDptr); len--; count--; } // Einsen-digit streichen
39         }   }
40       // Eventuell ist jetzt noch bei der DS 0 ausnahmsweise len=1,
41       // aber NDS_to_I wird auch damit fertig.
42       return NDS_to_I(MSDptr,len);
43 }
44
45 }  // namespace cln