]> www.ginac.de Git - cln.git/blob - src/rational/output/cl_RA_dprint.cc
* */*: cl_istream -> std::istream, cl_ostream -> std::ostream.
[cln.git] / src / rational / output / cl_RA_dprint.cc
1 // print_rational().
2
3 // General includes.
4 #include "cl_sysdep.h"
5
6 // Specification.
7 #include "cln/rational_io.h"
8
9
10 // Implementation.
11
12 #include "cln/output.h"
13 #include "cln/integer_io.h"
14 #include "cln/rational.h"
15 #include "cl_RA.h"
16
17 namespace cln {
18
19 void print_rational (std::ostream& stream, const cl_print_rational_flags& flags, const cl_RA& z)
20 {
21         var unsigned int base = flags.rational_base;
22         if (flags.rational_readably)
23                 // Radix-Specifier ausgeben:
24                 switch (base) {
25                 case 2:
26                         fprintchar(stream,'#');
27                         fprintchar(stream,'b');
28                         break;
29                 case 8:
30                         fprintchar(stream,'#');
31                         fprintchar(stream,'o');
32                         break;
33                 case 16:
34                         fprintchar(stream,'#');
35                         fprintchar(stream,'x');
36                         break;
37                 case 10:
38                         if (integerp(z)) {
39                                 DeclareType(cl_I,z);
40                                 // Basis 10 bei Integers durch
41                                 // nachgestellten Punkt kennzeichnen:
42                                 print_integer(stream,base,z);
43                                 fprintchar(stream,'.');
44                                 return;
45                         }
46                 default:
47                         // Basis in #nR-Schreibweise ausgeben:
48                         fprintchar(stream,'#');
49                         print_integer(stream,10,base);
50                         fprintchar(stream,'r');
51                         break;
52                 }
53         if (integerp(z)) {
54                 DeclareType(cl_I,z);
55                 // Integer in Basis base ausgeben:
56                 print_integer(stream,base,z);
57         } else {
58                 DeclareType(cl_RT,z);
59                 // Ratio in Basis base ausgeben; Zähler / Nenner
60                 print_integer(stream,base,numerator(z));
61                 fprintchar(stream,'/');
62                 print_integer(stream,base,denominator(z));
63         }
64 }
65
66 }  // namespace cln