namespace CGAL { /*! \ingroup PkgIOstreams All classes in the \cgal `Kernel` provide input and output operators for IOStreams. The basic task of such an operator is to produce a representation of an object that can be written as a sequence of characters on devices as a console, a file, or a pipe. The enum `Mode` distinguish between three different printing formats. In `ASCII` mode, numbers e.g. the coordinates of a point or the coefficients of a line, are written in a machine independent format. In BINARY mode, data are written in a binary format, e.g. a double is represented as a sequence of four byte. The format depends on the machine. The mode PRETTY serves mainly for debugging as the type of the geometric object is written, as well as the data defining the object. For example for a point at the origin with %Cartesian double coordinates, the output would be `PointC2(0.0, 0.0)`. At the moment \cgal does not provide input operations for pretty printed data. By default a stream is in Ascii mode. \sa `CGAL::set_mode()` \sa `CGAL::set_ascii_mode()` \sa `CGAL::set_binary_mode()` \sa `CGAL::set_pretty_mode()` \sa `CGAL::get_mode()` \sa `CGAL::is_ascii()` \sa `CGAL::is_binary()` \sa `CGAL::is_pretty()` */ enum Mode { ASCII = 0, BINARY, PRETTY }; /*! \ingroup PkgIOstreams returns the printing mode of the IO stream `s`. \sa `CGAL::Mode` \sa `CGAL::set_mode()` \sa `CGAL::set_ascii_mode()` \sa `CGAL::set_binary_mode()` \sa `CGAL::set_pretty_mode()` \sa `CGAL::is_ascii()` \sa `CGAL::is_binary()` \sa `CGAL::is_pretty()` */ Mode get_mode(std::ios& s); /*! \ingroup PkgIOstreams sets the mode of the IO stream `s` to be the `ASCII` mode. Returns the previous mode of `s`. \sa `CGAL::Mode` \sa `CGAL::set_mode()` \sa `CGAL::set_binary_mode()` \sa `CGAL::set_pretty_mode()` \sa `CGAL::get_mode()` \sa `CGAL::is_ascii()` \sa `CGAL::is_binary()` \sa `CGAL::is_pretty()` */ Mode set_ascii_mode(std::ios& s); /*! \ingroup PkgIOstreams \sa `CGAL::Mode` \sa `CGAL::set_mode()` \sa `CGAL::set_ascii_mode()` \sa `CGAL::set_pretty_mode()` \sa `CGAL::get_mode()` \sa `CGAL::is_ascii()` \sa `CGAL::is_binary()` \sa `CGAL::is_pretty()` sets the mode of the IO stream `s` to be the `BINARY` mode. Returns the previous mode of `s`. */ Mode set_binary_mode(std::ios& s); /*! \ingroup PkgIOstreams sets the printing mode of the IO stream `s`. \sa `CGAL::Mode` \sa `CGAL::set_ascii_mode()` \sa `CGAL::set_binary_mode()` \sa `CGAL::set_pretty_mode()` \sa `CGAL::get_mode()` \sa `CGAL::is_ascii()` \sa `CGAL::is_binary()` \sa `CGAL::is_pretty()` */ Mode set_mode(std::ios& s, IO::Mode m); /*! \ingroup PkgIOstreams sets the mode of the IO stream `s` to be the `PRETTY` mode. Returns the previous mode of `s`. \sa `CGAL::Mode` \sa `CGAL::set_mode()` \sa `CGAL::set_ascii_mode()` \sa `CGAL::set_binary_mode()` \sa `CGAL::get_mode()` \sa `CGAL::is_ascii()` \sa `CGAL::is_binary()` \sa `CGAL::is_pretty()` */ Mode set_pretty_mode(std::ios& s); /*! \ingroup PkgIOstreams The definition of `Input_rep` is completely symmetric to `Output_rep`. */ template< typename T, typename F > class Input_rep { }; /* end Input_rep */ /*! \ingroup PkgIOstreams The purpose of `Output_rep` is to provide a way to control output formatting that works independently of the object's stream output operator. If you dont specialize `Output_rep` for `T`, `T`'s stream output operator is called from within `Output_rep`, by default. If you want another behaviour for your type `T`, you have to provide a specialization for that type. Furthermore, you can provide specializations with a second template parameter (a formatting tag). The second template parameter defaults to `Null_tag` and means *default behaviour*. Specializations of `Output_rep` should provide the following features: \code{.cpp} template< class F > struct Output_rep< Some_type, F > { Output_rep( const Some_type& t ); std::ostream& operator()( std::ostream& out ) const; }; \endcode You can also specialize for a formatting tag `F`. */ template< typename T, typename F > class Output_rep { }; /* end Output_rep */ /*! \ingroup PkgIOstreams checks if the IO stream `s` is in `ASCII` mode. \sa `CGAL::Mode` \sa `CGAL::set_mode()` \sa `CGAL::set_ascii_mode()` \sa `CGAL::set_binary_mode()` \sa `CGAL::set_pretty_mode()` \sa `CGAL::get_mode()` \sa `CGAL::is_binary()` \sa `CGAL::is_pretty()` */ bool is_ascii(std::ios& s); /*! \ingroup PkgIOstreams checks if the IO stream `s` is in `BINARY` mode. \sa `CGAL::Mode` \sa `CGAL::set_mode()` \sa `CGAL::set_ascii_mode()` \sa `CGAL::set_binary_mode()` \sa `CGAL::set_pretty_mode()` \sa `CGAL::get_mode()` \sa `CGAL::is_ascii()` \sa `CGAL::is_pretty()` */ bool is_binary(std::ios& s); /*! \ingroup PkgIOstreams checks if the IO stream `s` is in `PRETTY` mode. \sa `CGAL::Mode` \sa `CGAL::set_mode()` \sa `CGAL::set_ascii_mode()` \sa `CGAL::set_binary_mode()` \sa `CGAL::set_pretty_mode()` \sa `CGAL::get_mode()` \sa `CGAL::is_ascii()` \sa `CGAL::is_binary()` */ bool is_pretty(std::ios& s); /*! \ingroup PkgIOstreams Convenience function to construct an output representation (`Output_rep`) for type `T`. Generic IO for type `T`. */ template Output_rep oformat( const T& t); /*! \ingroup PkgIOstreams The definition of the function `iformat` is completely symmetric to `oformat()`. */ template Input_rep iformat( const T& t); /*! \ingroup PkgIOstreams Convenience function to construct an output representation (`Output_rep`) for type `T`. Generic IO for type `T` with formatting tag. */ template Output_rep oformat( const T& t, F ); /*! \ingroup PkgIOstreams \anchor PkgIOstreams_op_left_shift \brief Inserts object `c` in the stream `os`. Returns `os`. \cgal defines output operators for classes that are derived from the class `ostream`. This allows to write to ostreams as `cout` or `cerr`, as well as to `std::ostringstream` and `std::ofstream`. The output operator is defined for all classes in the \cgal `Kernel` and for the class `Color` as well. \sa `CGAL::set_mode()` \sa `CGAL::set_ascii_mode()` \sa `CGAL::set_binary_mode()` \sa `CGAL::set_pretty_mode()` \sa `CGAL::get_mode()` \sa `CGAL::is_ascii()` \sa `CGAL::is_binary()` \sa `CGAL::is_pretty()` \sa \ref op_right_shift "CGAL::operator>>" */ ostream& operator<<(ostream& os, Class c); /*! \ingroup PkgIOstreams \anchor op_right_shift \brief \cgal defines input operators for classes that are derived from the class `istream`. This allows to read from istreams as `cin`, as well as from `std::istringstream` and `std::ifstream`. The input operator is defined for all classes in the \cgal `Kernel`. \sa `CGAL::set_mode()` \sa `CGAL::set_ascii_mode()` \sa `CGAL::set_binary_mode()` \sa `CGAL::set_pretty_mode()` \sa `CGAL::get_mode()` \sa `CGAL::is_ascii()` \sa `CGAL::is_binary()` \sa `CGAL::is_pretty()` \sa \ref PkgIOstreams_op_left_shift "CGAL::operator<<" */ istream& operator>>(istream& is, Class c); }