1 // I/O of floats.
2 
3 #ifndef _CL_FLOAT_IO_H
4 #define _CL_FLOAT_IO_H
5 
6 #include "cln/number_io.h"
7 #include "cln/float.h"
8 
9 namespace cln {
10 
11 // Undocumented input functions
12 
13 // Wandelt eine Zeichenkette mit Float-Syntax in ein Float um.
14 // read_float(base,sign,string,index1,index4,index2,index3)
15 // > base: Lesebasis (=10)
16 // > sign: Vorzeichen (/=0 falls negativ)
17 // > string: Simple-String (enthält Ziffern und evtl. Punkt und Exponentmarker)
18 // > index1: Index vom Mantissenanfang (excl. Vorzeichen)
19 // > index4: Index nach dem Mantissenende
20 // > index2: Index beim Ende der Characters
21 // > index3: Index nach dem Dezimalpunkt (=index4 falls keiner da)
22 //   (also Mantisse mit index4-index1 Characters: Ziffern und max. 1 '.')
23 //   (also index4-index3 Nachkommaziffern)
24 //   (also bei index4<index2: index4 = Index des Exponent-Markers,
25 //    index4+1 = Index des Exponenten-Vorzeichens oder der ersten
26 //    Exponenten-Ziffer)
27 // < ergebnis: Float
28 extern const cl_F read_float (unsigned int base, float_format_t prec,
29                   cl_signean sign, const char * string, uintC index1, uintC index4, uintC index2, uintC index3);
30 
31 // The following does strictly the same as the general read_complex.
32 // It is here only so that you don't need the complex and rational number
33 // readers in order to read a float number. ("Treeshaking")
34 extern const cl_F read_float (const cl_read_flags& flags, const char * string, const char * string_limit, const char * * end_of_parse);
35 extern const cl_F read_float (std::istream& stream, const cl_read_flags& flags);
36 
37 // Documented input functions
38 
39 inline std::istream& operator>> (std::istream& stream, cl_F& result)
40 {
41 	extern cl_read_flags cl_F_read_flags;
42 	result = read_float(stream,cl_F_read_flags);
43 	return stream;
44 }
45 
46 
47 // Undocumented output functions
48 
49 
50 // Documented output functions
51 
52 // Gibt ein Float aus.
53 // print_float(stream,z);
54 // > z: Float
55 // > stream: Stream
56 extern void print_float (std::ostream& stream, const cl_print_flags& flags, const cl_F& z);
57 extern void print_float (std::ostream& stream, const cl_print_number_flags& flags, const cl_F& z);
58 extern void print_float (std::ostream& stream, const cl_print_real_flags& flags, const cl_F& z);
59 extern void print_float (std::ostream& stream, const cl_print_float_flags& flags, const cl_F& z);
60 
61 // Gibt ein Float binär (sehr primitiv) aus.
62 // print_float_binary(stream,z);
63 // > z: Float
64 // > stream: Stream
65 extern void print_float_binary (std::ostream& stream, const cl_F& z);
66 
67 // The following does strictly the same as the general `fprint' for numbers.
68 // It is here only so that you don't need the complex printer
69 // in order to print a float. ("Treeshaking")
70 
fprint(std::ostream & stream,const cl_F & x)71 inline void fprint (std::ostream& stream, const cl_F& x)
72 {
73 	extern cl_print_flags default_print_flags;
74 	print_float(stream,default_print_flags,x);
75 }
76 
77 CL_DEFINE_PRINT_OPERATOR(cl_F)
78 
79 }  // namespace cln
80 
81 #endif /* _CL_FLOAT_IO_H */
82