1 // Output functions.
2 
3 #ifndef _CL_OUTPUT_H
4 #define _CL_OUTPUT_H
5 
6 #include "cln/types.h"
7 #include "cln/floatformat.h"
8 #include "cln/io.h"
9 #include "cln/string.h"
10 
11 namespace cln {
12 
13 struct cl_print_rational_flags {
14 	// Base in which rational numbers are to be printed.
15 	unsigned int rational_base;
16 	// Flag whether to print radix specifiers in Common Lisp syntax for
17 	// rational numbers (#nR or #b or #o or #x prefixes, trailing dot).
18 	bool rational_readably;
19 // Constructor.
cl_print_rational_flagscl_print_rational_flags20 	cl_print_rational_flags () :
21 		rational_base (10),
22 		rational_readably (false) {}
23 };
24 
25 struct cl_print_float_flags {
26 	// Flag whether to prefer type specific exponent markers over 'E'.
27 	bool float_readably;
28 	// If !float_readably, the format which earns the 'E' exponent marker.
29 	float_format_t default_float_format;
30 // Constructor.
cl_print_float_flagscl_print_float_flags31 	cl_print_float_flags () :
32 		float_readably (false),
33 		default_float_format (float_format_ffloat) {}
34 };
35 
36 struct cl_print_real_flags : cl_print_rational_flags, cl_print_float_flags {};
37 
38 struct cl_print_complex_flags {
39 	// Flag whether to use the Common Lisp #C(realpart imagpart) syntax,
40 	bool complex_readably;
41 // Constructor.
cl_print_complex_flagscl_print_complex_flags42 	cl_print_complex_flags () :
43 		complex_readably (false) {}
44 };
45 
46 struct cl_print_number_flags : cl_print_real_flags, cl_print_complex_flags {};
47 
48 enum cl_print_vector_syntax_t {
49 	vsyntax_algebraic,	// [a, b, c]
50 	vsyntax_pretty,		// [a b c]
51 	vsyntax_commonlisp	// #(a b c)
52 };
53 
54 struct cl_print_vector_flags {
55 	cl_print_vector_syntax_t vector_syntax;
56 // Constructor.
cl_print_vector_flagscl_print_vector_flags57 	cl_print_vector_flags () :
58 		vector_syntax (vsyntax_pretty) {}
59 };
60 
61 struct cl_print_univpoly_flags {
62 	cl_string univpoly_varname;
63 // Constructor.
cl_print_univpoly_flagscl_print_univpoly_flags64 	cl_print_univpoly_flags () :
65 		univpoly_varname ("x") {}
66 };
67 
68 struct cl_print_flags : cl_print_number_flags, cl_print_vector_flags, cl_print_univpoly_flags {};
69 
70 extern cl_print_flags default_print_flags;
71 
72 }  // namespace cln
73 
74 #endif /* _CL_OUTPUT_H */
75