diff --git a/Stream_support/doc/Stream_support/CGAL/IO/Istream_iterator.h b/Stream_support/doc/Stream_support/CGAL/IO/Istream_iterator.h deleted file mode 100644 index 4834046a5e8..00000000000 --- a/Stream_support/doc/Stream_support/CGAL/IO/Istream_iterator.h +++ /dev/null @@ -1,40 +0,0 @@ - -namespace CGAL { - -/*! -\ingroup PkgStreamSupportRef - -The class `Istream_iterator` is an input iterator adaptor for the -input stream class `Stream` and value type `T`. It is particularly -useful for classes that are similar but not compatible to `std::istream`. - -\cgalModels `InputIterator` - - -*/ - template< typename T, typename Stream > -class Istream_iterator { -public: - -/// \name Creation -/// @{ - -/*! -creates an end-of-stream iterator. -This is a past-the-end iterator, and it is useful -when constructing a range. -*/ -Istream_iterator(); - -/*! -creates an input iterator reading from `s`. -When `s` reaches end of stream, -this iterator will compare equal to an end-of-stream iterator -created using the default constructor. -*/ -Istream_iterator( Stream& s); - -/// @} - -}; /* end Istream_iterator */ -} /* end namespace CGAL */ diff --git a/Stream_support/doc/Stream_support/CGAL/IO/OBJ/OBJ_reader.h b/Stream_support/doc/Stream_support/CGAL/IO/OBJ/OBJ_reader.h deleted file mode 100644 index d1fb46c8981..00000000000 --- a/Stream_support/doc/Stream_support/CGAL/IO/OBJ/OBJ_reader.h +++ /dev/null @@ -1,11 +0,0 @@ -namespace CGAL { - -//! \ingroup IOstreamFunctions -///reads a file in .obj format. -///\tparam Points_3 a RandomAccessContainer of Point_3, -///\tparam Faces a RandomAccessContainer of RandomAccessContainer of std::size_t -/// \see IOStreamOBJ -template -bool -read_OBJ(std::istream& input, Points_3 &points, Faces &faces); -} diff --git a/Stream_support/doc/Stream_support/CGAL/IO/OFF.h b/Stream_support/doc/Stream_support/CGAL/IO/OFF.h deleted file mode 100644 index fe2380d340d..00000000000 --- a/Stream_support/doc/Stream_support/CGAL/IO/OFF.h +++ /dev/null @@ -1,24 +0,0 @@ -namespace CGAL{ -/*! - * \ingroup IOstreamFunctions - * writes the content of `in` in `points` and `polygons`, in the OFF format. - * \see \ref IOStreamOFF - */ -template -bool -read_OFF( std::istream& in, - std::vector< Point_3 >& points, - std::vector< Polygon_3 >& polygons, - bool /* verbose */ = false); - -/*! - * \ingroup IOstreamFunctions - * writes the content of `points` and `polygons` in `out`, in the OFF format. - * \see \ref IOStreamOFF - */ -template -bool -write_OFF(std::ostream& out, - std::vector< Point_3 >& points, - std::vector< Polygon_3 >& polygons); -} diff --git a/Stream_support/doc/Stream_support/CGAL/IO/Ostream_iterator.h b/Stream_support/doc/Stream_support/CGAL/IO/Ostream_iterator.h deleted file mode 100644 index 11b0d5cd9ed..00000000000 --- a/Stream_support/doc/Stream_support/CGAL/IO/Ostream_iterator.h +++ /dev/null @@ -1,33 +0,0 @@ - -namespace CGAL { - -/*! -\ingroup PkgStreamSupportRef - -The class `Ostream_iterator` is an output iterator adaptor for the -output stream class `Stream` and value type `T`. - - -\cgalModels `OutputIterator` - -\cgalHeading{Implementation} - -The `operator*()` in class `Ostream_iterator` uses a proxy class. - -*/ -template< typename T, typename Stream > -class Ostream_iterator { -public: - -/// \name Creation -/// @{ - -/*! -creates an output iterator writing to `s`. -*/ -Ostream_iterator( Stream& s); - -/// @} - -}; /* end Ostream_iterator */ -} /* end namespace CGAL */ diff --git a/Stream_support/doc/Stream_support/CGAL/IO/Verbose_ostream.h b/Stream_support/doc/Stream_support/CGAL/IO/Verbose_ostream.h deleted file mode 100644 index ccb59f5c081..00000000000 --- a/Stream_support/doc/Stream_support/CGAL/IO/Verbose_ostream.h +++ /dev/null @@ -1,58 +0,0 @@ - -namespace CGAL { - -/*! -\ingroup PkgStreamSupportRef - -The class `Verbose_ostream` can be used as an output stream. The stream -output operator `<<` is defined for any type. The class -`Verbose_ostream` stores in an internal state a stream and whether the -output is active or not. If the state is active, the stream output -operator `<<` uses the internal stream to output its argument. If -the state is inactive, nothing happens. - -\cgalHeading{Example} - -The class `Verbose_ostream` can be conveniently used to implement for -example the `is_valid()` member function for triangulations or -other complex data structures. - -\code{.cpp} -bool is_valid( bool verbose = false, int level = 0) { -Verbose_ostream verr( verbose); -verr << "Triangulation::is_valid( level = " << level << ')' << endl; -verr << " Number of vertices = " << size_of_vertices() << endl; -// ... -} -\endcode -*/ - -class Verbose_ostream { -public: - -/// \name Creation -/// @{ - -/*! -creates an output stream with state set to -`active` that writes to the stream `out`. -*/ -Verbose_ostream( bool active = false, -std::ostream& out = std::cerr); - -/// @} - -/// \name Operations -/// @{ - -/*! -creates an output stream with state set to -`false` that writes to the stream `std::cerr`. -*/ -template < class T > -Verbose_ostream& operator<<( const T& t); - -/// @} - -}; /* end Verbose_ostream */ -} /* end namespace CGAL */ diff --git a/Stream_support/doc/Stream_support/CGAL/IO/WKT.h b/Stream_support/doc/Stream_support/CGAL/IO/WKT.h deleted file mode 100644 index ce061a5d417..00000000000 --- a/Stream_support/doc/Stream_support/CGAL/IO/WKT.h +++ /dev/null @@ -1,196 +0,0 @@ -namespace CGAL{ -//! \ingroup PkgStreamSupportRef -//! \brief `read_point_WKT()` fills a `Point` from a WKT stream. The first line starting with POINT -//! in the stream will be used. -//! -//! \tparam Point can be a `CGAL::Point_2` or `CGAL::Point_3`. -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//! -//! \see `CGAL::Point_2` -//! \see `CGAL::Point_3` -template -std::istream& -read_point_WKT( std::istream& in, - Point& point ); - -//! \ingroup PkgStreamSupportRef -//! \brief `read_multi_point_WKT()` overwrites the content of a `MultiPoint` -//! with the first line starting with MULTIPOINT in the stream. -//! -//! \tparam MultiPoint must be a model of `RandomAccessRange` of `CGAL::Point_2` or `CGAL::Point_3`, -//! and have: -//! - a function `push_back()` that takes the same point type, -//! - a function `clear()`, -//! - a function `resize()` that takes an `size_type` -//! - an `operator[]()` that takes a `size_type`. -//! -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//! \see `CGAL::Point_2` -//! \see `CGAL::Point_3` -template -std::istream& -read_multi_point_WKT( std::istream& in, - MultiPoint& mp ); - - -//! \ingroup PkgStreamSupportRef -//! \brief `read_linestring_WKT()` fills a `Linestring` from a WKT stream. -//! The first line starting with LINESTRING in the stream will be used. -//! -//! \tparam Linestring must be a model of `RandomAccessRange` of `CGAL::Point_2`, -//! and have: -//! - a function `push_back()` that takes a `CGAL::Point_2`. -//! - a function `clear()`, -//! - a function `resize()` that takes an `size_type` -//! - an `operator[]()` that takes a `size_type`. -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//! \see `CGAL::Point_2` -template -std::istream& -read_linestring_WKT( std::istream& in, - LineString& polyline ); - -//! \ingroup PkgStreamSupportRef -//! \brief `read_multi_linestring_WKT()` overwrites the content of a `MultiLineString` -//! with the first line starting with MULTILINESTRING in the stream. -//! -//! \tparam MultiLineString must be a model of `RandomAccessRange` of `Linestring`, -//! and have: -//! - a function `push_back()` that takes a `Linestring`, -//! - a function `clear()`, -//! - a function `resize()` that takes an `size_type` -//! - an `operator[]()` that takes a `size_type`. -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//! -//! \see `CGAL::Point_2` -template -std::istream& -read_multi_linestring_WKT( std::istream& in, - MultiLineString& mls ); - -//! \ingroup PkgStreamSupportRef -//! \brief `read_polygon_WKT()` fills `polygon` from a WKT stream. -//! The first line starting with POLYGON in the stream will be used. -//! -//! \tparam Polygon is a `CGAL::General_polygon_with_holes_2`. -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//! -//! \see `CGAL::General_polygon_with_holes_2` -template -std::istream& -read_polygon_WKT( std::istream& in, - Polygon& polygon ); - -//! \ingroup PkgStreamSupportRef -//! \brief `read_multi_polygon_WKT()` overwrites the content of a `MultiPolygon` -//! with the first line starting with MULTIPOLYGON in the stream. -//! -//! \tparam MultiPolygon must be a model of `RandomAccessRange` of `CGAL::General_polygon_with_holes_2`, -//! and have: -//! - a function `push_back()` that takes a `CGAL::General_polygon_with_holes_2`, -//! - a function `clear()`, -//! - a function `resize()` that takes an `size_type` -//! - an `operator[]()` that takes a `size_type`. -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//! \see `CGAL::General_polygon_with_holes_2` - -template -std::istream& -read_multi_polygon_WKT( std::istream& in, - MultiPolygon& polygons ); - -//! \ingroup PkgStreamSupportRef -//! \brief `write_point_WKT()` writes `point` into a WKT stream. -//! \tparam Point is a `CGAL::Point_2` -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//! \see `CGAL::Point_2` -template -std::ostream& -write_point_WKT( std::ostream& out, - const Point& point ); - -//! \ingroup PkgStreamSupportRef -//! \brief `write_polygon_WKT()` writes `poly` into a WKT stream. -//! \tparam Polygon must be a `CGAL::General_polygon_with_holes_2` -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//! \see `CGAL::General_polygon_with_holes_2` -template -std::ostream& -write_polygon_WKT( std::ostream& out, - const Polygon& poly ); - -//! \ingroup PkgStreamSupportRef -//! \brief `write_linestring_WKT()` writes the content of `ls` -//! into a WKT stream. -//! \tparam LineString must be a `RandomAccessRange` of `CGAL::Point_2`. -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//!\see `CGAL::Point_2` -template -std::ostream& -write_linestring_WKT( std::ostream& out, - LineString ls ); - -//! \ingroup PkgStreamSupportRef -//! \brief `write_multi_point_WKT()` writes the content of `mp` -//! into a WKT stream. -//! \tparam MultiPoint must be a `RandomAccessRange` of `CGAL::Point_2`. -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//!\see `CGAL::Point_2` -template -std::ostream& -write_multi_point_WKT( std::ostream& out, - MultiPoint& mp ); - -//! \ingroup PkgStreamSupportRef -//! \brief `write_multi_polygon_WKT()` writes the content of `polygons` -//! into a WKT stream. -//! \tparam MultiPolygon must be a `RandomAccessRange` of `CGAL::General_polygon_with_holes_2`. -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//!\see `CGAL::General_polygon_with_holes_2` -template -std::ostream& -write_multi_polygon_WKT( std::ostream& out, - MultiPolygon& polygons ); - -//! \ingroup PkgStreamSupportRef -//! \brief `write_multi_linestring_WKT()` writes the content of `mls` -//! into a WKT stream. -//! \tparam MultiLineString must be a `RandomAccessRange` of `LineString`. -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//! \see `CGAL::write_linestring_WKT()` -template -std::ostream& -write_multi_linestring_WKT( std::ostream& out, - MultiLineString& mls ); - -//! \ingroup PkgStreamSupportRef -//! reads the content of a WKT stream and fills -//! `points`, `polylines` and `polygons` with all the POINT, MULTIPOINT, -//! LINESTRING, MULTILINESTRING, POLYGON and MULTIPOLYGON it finds in `input`. -//! \tparam MultiPoint must be a model of `RandomAccessRange` of `CGAL::Point_2` or `CGAL::Point_3`. -//! \tparam MultiLineString must be a `RandomAccessRange` of `Linestring`. -//! \tparam MultiPolygon must be a model of `RandomAccessRange` of `CGAL::General_polygon_with_holes_2`. -//! \attention Only Cartesian Kernels with double or float as `FT` are supported. -//! \attention This function is only available with boost versions starting at 1.56. -//! \see `CGAL::read_linestring_WKT()` -template -std::istream& -read_WKT( std::istream& input, - MultiPoint& points, - MultiLineString& polylines, - MultiPolygon& polygons); -} diff --git a/Stream_support/doc/Stream_support/CGAL/IO/io.h b/Stream_support/doc/Stream_support/CGAL/IO/io.h deleted file mode 100644 index 62337b6b2d8..00000000000 --- a/Stream_support/doc/Stream_support/CGAL/IO/io.h +++ /dev/null @@ -1,291 +0,0 @@ -namespace CGAL { - - -namespace IO{ -/*! - \ingroup PkgStreamSupportRef - -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 PkgStreamSupportRef - -returns the printing mode of the %IO stream `s`. - -\sa `CGAL::IO::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()` - - -*/ -IO::Mode get_mode(std::ios& s); - -/*! -\ingroup PkgStreamSupportRef - -sets the mode of the %IO stream `s` to be the `IO::ASCII` mode. -Returns the previous mode of `s`. - - -\sa `CGAL::IO::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()` -*/ -IO::Mode set_ascii_mode(std::ios& s); - -/*! -\ingroup PkgStreamSupportRef - -\sa `CGAL::IO::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 `IO::BINARY` mode. -Returns the previous mode of `s`. -*/ -IO::Mode set_binary_mode(std::ios& s); - -/*! -\ingroup PkgStreamSupportRef - -sets the printing mode of the %IO stream `s`. - -\sa `CGAL::IO::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()` -*/ -IO::Mode set_mode(std::ios& s, IO::Mode m); - -/*! -\ingroup PkgStreamSupportRef - -sets the mode of the %IO stream `s` to be the `IO::PRETTY` mode. -Returns the previous mode of `s`. - -\sa `CGAL::IO::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()` - -*/ -IO::Mode set_pretty_mode(std::ios& s); - - -/*! -\ingroup PkgStreamSupportRef - -The definition of `Input_rep` is completely symmetric to `Output_rep`. - -*/ -template< typename T, typename F > -class Input_rep { - -}; /* end Input_rep */ - -/*! -\ingroup PkgStreamSupportRef - -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 > { - static const bool is_specialized = true; - Output_rep( const Some_type& t ); - std::ostream& operator()( std::ostream& out ) const; -}; - -\endcode - -You can also specialize for a formatting tag `F`. - -The constant `is_specialized` can be tested by meta-programming tools to -verify that a given type can be used with `oformat()`. Its value has to be -`true` in a specialization of `Output_rep`. When there is no specialization -for a type, the class template `Output_rep` defines `is_specialized` to the -default value `false`. - -*/ -template< typename T, typename F > -class Output_rep { -}; /* end Output_rep */ - - -/*! -\ingroup PkgStreamSupportRef - -checks if the %IO stream `s` is in `IO::ASCII` mode. - -\sa `CGAL::IO::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 PkgStreamSupportRef - -checks if the %IO stream `s` is in `IO::BINARY` mode. - -\sa `CGAL::IO::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 PkgStreamSupportRef - -checks if the %IO stream `s` is in `IO::PRETTY` mode. - -\sa `CGAL::IO::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 PkgStreamSupportRef - -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 PkgStreamSupportRef - -The definition of this function is completely symmetric to `oformat()`. -*/ -template Input_rep iformat( const T& t); - - -/*! -\ingroup PkgStreamSupportRef - -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 IOstreamOperators - -\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()` -*/ -ostream& operator<<(ostream& os, Class c); - -/*! -\ingroup IOstreamOperators - -\brief \cgal defines input operators for classes that are derived -from the class `istream`. This allows to read from istreams -as `std::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()` -*/ -istream& operator>>(istream& is, Class c); -} diff --git a/Stream_support/doc/Stream_support/Doxyfile.in b/Stream_support/doc/Stream_support/Doxyfile.in index 7f973e30571..a49325a026c 100644 --- a/Stream_support/doc/Stream_support/Doxyfile.in +++ b/Stream_support/doc/Stream_support/Doxyfile.in @@ -6,5 +6,4 @@ EXAMPLE_PATH = ${CGAL_PACKAGE_DIR}/examples EXTRACT_ALL = false HIDE_UNDOC_MEMBERS = true HIDE_UNDOC_CLASSES = true -INPUT += ${CGAL_PACKAGE_INCLUDE_DIR}/CGAL/IO/Color.h diff --git a/Stream_support/include/CGAL/IO/OBJ.h b/Stream_support/include/CGAL/IO/OBJ.h index effa304b178..9a9f389263f 100644 --- a/Stream_support/include/CGAL/IO/OBJ.h +++ b/Stream_support/include/CGAL/IO/OBJ.h @@ -17,4 +17,19 @@ #include #include +namespace CGAL { + +//! \ingroup IOstreamFunctions +//! +///reads a file in .obj format. +/// +///\tparam Points_3 a RandomAccessContainer of Point_3, +///\tparam Faces a RandomAccessContainer of RandomAccessContainer of std::size_t +/// +/// \see IOStreamOBJ +template +bool read_OBJ(std::istream& input, Points_3 &points, Faces &faces); + +} // namespace CGAL + #endif // CGAL_IO_OBJ_H diff --git a/Stream_support/include/CGAL/IO/OFF.h b/Stream_support/include/CGAL/IO/OFF.h index 96706a6a977..ca3203699e6 100644 --- a/Stream_support/include/CGAL/IO/OFF.h +++ b/Stream_support/include/CGAL/IO/OFF.h @@ -23,48 +23,13 @@ namespace CGAL { -template -bool read_OFF(std::istream& in, - std::vector< Point_3 >& points, - std::vector< Polygon_3 >& polygons, - bool /* verbose */ = false) -{ - CGAL::File_scanner_OFF scanner(in); - - points.resize(scanner.size_of_vertices()); - polygons.resize(scanner.size_of_facets()); - for(std::size_t i = 0; i < scanner.size_of_vertices(); ++i) - { - double x, y, z, w; - scanner.scan_vertex( x, y, z, w); - CGAL_assertion(w!=0); - IO::internal::fill_point( x/w, y/w, z/w, points[i] ); - scanner.skip_to_next_vertex( i); - } - - if(!in) - return false; - - for(std::size_t i = 0; i < scanner.size_of_facets(); ++i) - { - std::size_t no; - - scanner.scan_facet( no, i); - IO::internal::resize(polygons[i], no); - for(std::size_t j = 0; j < no; ++j) - { - std::size_t id; - scanner.scan_facet_vertex_index(id, i); - if(id < scanner.size_of_vertices()) - polygons[i][j] = id; - else - return false; - } - } - - return in.good(); -} - +/*! + * \ingroup IOstreamFunctions + * + * reads the content of `in` into `points` and `polygons`, in the COFF format. + * + * \see \ref IOStreamOFF + */ template bool read_OFF(std::istream& in, std::vector< Point_3 >& points, @@ -148,6 +113,62 @@ bool read_OFF(std::istream& in, return in.good(); } +/*! + * \ingroup IOstreamFunctions + * + * reads the content of `in` into `points` and `polygons`, in the OFF format. + * + * \see \ref IOStreamOFF + */ +template +bool read_OFF(std::istream& in, + std::vector< Point_3 >& points, + std::vector< Polygon_3 >& polygons, + bool /* verbose */ = false) +{ + CGAL::File_scanner_OFF scanner(in); + + points.resize(scanner.size_of_vertices()); + polygons.resize(scanner.size_of_facets()); + for(std::size_t i = 0; i < scanner.size_of_vertices(); ++i) + { + double x, y, z, w; + scanner.scan_vertex( x, y, z, w); + CGAL_assertion(w!=0); + IO::internal::fill_point( x/w, y/w, z/w, points[i] ); + scanner.skip_to_next_vertex( i); + } + + if(!in) + return false; + + for(std::size_t i = 0; i < scanner.size_of_facets(); ++i) + { + std::size_t no; + + scanner.scan_facet( no, i); + IO::internal::resize(polygons[i], no); + for(std::size_t j = 0; j < no; ++j) + { + std::size_t id; + scanner.scan_facet_vertex_index(id, i); + if(id < scanner.size_of_vertices()) + polygons[i][j] = id; + else + return false; + } + } + + return in.good(); +} + +/*! + * \ingroup IOstreamFunctions + * + * writes the content of `points` and `polygons` in `out`, in the OFF format. + * + * \see \ref IOStreamOFF + */ template bool write_OFF(std::ostream& out, std::vector< Point_3 >& points, diff --git a/Stream_support/include/CGAL/IO/Ostream_iterator.h b/Stream_support/include/CGAL/IO/Ostream_iterator.h index 2204cb17d39..b20f2d7eb67 100644 --- a/Stream_support/include/CGAL/IO/Ostream_iterator.h +++ b/Stream_support/include/CGAL/IO/Ostream_iterator.h @@ -20,6 +20,8 @@ #include namespace CGAL { +namespace Stream_support { +namespace internal { // This proxy is for the Ostream_iterator. template @@ -27,7 +29,7 @@ class Ostream_proxy { Stream& stream; public: - Ostream_proxy( Stream& s) : stream(s) {} + Ostream_proxy(Stream& s) : stream(s) {} Ostream_proxy& operator=( const T& t) { stream << t; @@ -35,25 +37,50 @@ public: } }; +} // namespace Stream_support +} // namespace internal + +/*! +\ingroup PkgStreamSupportRef + +The class `Ostream_iterator` is an output iterator adaptor for the +output stream class `Stream` and value type `T`. + +\cgalModels `OutputIterator` + +\cgalHeading{Implementation} + +The `operator*()` in class `Ostream_iterator` uses a proxy class. +*/ template class Ostream_iterator { Stream* stream; public: - typedef T value_type; - typedef T& reference; - typedef const T& const_reference; - typedef T* pointer; - typedef const T* const_pointer; - typedef std::ptrdiff_t difference_type; - typedef std::output_iterator_tag iterator_category; + typedef T value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T* pointer; + typedef const T* const_pointer; + typedef std::ptrdiff_t difference_type; + typedef std::output_iterator_tag iterator_category; + typedef Stream_support::internal::Ostream_proxy Ostream_proxy; + /// \name Creation + /// @{ + + /*! + creates an output iterator writing to `s`. + */ Ostream_iterator(Stream& s) : stream(&s) {} - Ostream_iterator& operator++() { return *this;} - Ostream_iterator operator++(int) { return *this;} - Ostream_proxy operator*() const { return Ostream_proxy(*stream); } + /// @} + + Ostream_iterator& operator++() { return *this;} + Ostream_iterator operator++(int) { return *this;} + + Ostream_proxy operator*() const { return Ostream_proxy(*stream); } }; } // namespace CGAL diff --git a/Stream_support/include/CGAL/IO/PLY.h b/Stream_support/include/CGAL/IO/PLY.h index 7f1b3c2e509..36b10542054 100644 --- a/Stream_support/include/CGAL/IO/PLY.h +++ b/Stream_support/include/CGAL/IO/PLY.h @@ -39,11 +39,10 @@ else TRY_TO_GENERATE_SIZED_LIST_PROPERTY("ushort", "uint16", boost::uint16_t, STD_INDEX_TYPE, T_INDEX_TYPE, INDEX_TYPE); \ else TRY_TO_GENERATE_SIZED_LIST_PROPERTY("uint", "uint32", boost::uint32_t, STD_INDEX_TYPE, T_INDEX_TYPE, INDEX_TYPE) +namespace CGAL { /// \cond SKIP_IN_MANUAL -namespace CGAL { - // PLY types: // name type number of bytes // --------------------------------------- @@ -132,6 +131,8 @@ make_ply_normal_writer(VectorMap normal_map) PLY_property::type>("nz")); } +/// \endcond + namespace internal { namespace PLY { diff --git a/Stream_support/include/CGAL/IO/Verbose_ostream.h b/Stream_support/include/CGAL/IO/Verbose_ostream.h index bb0726eae47..e6c7738e989 100644 --- a/Stream_support/include/CGAL/IO/Verbose_ostream.h +++ b/Stream_support/include/CGAL/IO/Verbose_ostream.h @@ -23,42 +23,85 @@ namespace CGAL { #define CGAL__VERB(x) if (b) *o << x; return *this +/*! +\ingroup PkgStreamSupportRef + +The class `Verbose_ostream` can be used as an output stream. The stream +output operator `<<` is defined for any type. The class +`Verbose_ostream` stores in an internal state a stream and whether the +output is active or not. If the state is active, the stream output +operator `<<` uses the internal stream to output its argument. If +the state is inactive, nothing happens. + +\cgalHeading{Example} + +The class `Verbose_ostream` can be conveniently used to implement for +example the `is_valid()` member function for triangulations or +other complex data structures. + +\code{.cpp} +bool is_valid( bool verbose = false, int level = 0) { +Verbose_ostream verr( verbose); +verr << "Triangulation::is_valid( level = " << level << ')' << endl; +verr << " Number of vertices = " << size_of_vertices() << endl; +// ... +} +\endcode +*/ class Verbose_ostream { bool b; std::ostream* o; public: - Verbose_ostream( bool active = false, std::ostream& out = std::cerr) + + /// \name Creation + /// @{ + + /*! + creates an output stream with state set to `active` that writes to the stream `out`. + */ + Verbose_ostream(bool active = false, std::ostream& out = std::cerr) : b(active), o(&out) {} + /// @} + bool verbose() const { return b; } void set_verbose(bool active) { b = active; } std::ostream& out() { return *o; } + /// \name Operations + /// @{ + + /*! + writes the object `t` into the stream `out`. + */ template < class T > Verbose_ostream& operator<<(const T& t) { CGAL__VERB(t); } + + /// @} + Verbose_ostream& operator<<( std::ostream& (*f)(std::ostream&)) { CGAL__VERB(f); } Verbose_ostream& operator<<( std::ios& (*f)(std::ios&)) { CGAL__VERB(f); } Verbose_ostream& flush() { - if (b) + if(b) o->flush(); return *this; } Verbose_ostream& put(char c) { - if (b) + if(b) o->put(c); return *this; } Verbose_ostream& write(const char* s, int n) { - if (b) + if(b) o->write(s, n); return *this; } diff --git a/Stream_support/include/CGAL/IO/WKT.h b/Stream_support/include/CGAL/IO/WKT.h index d8e708602b9..a9707d7c904 100644 --- a/Stream_support/include/CGAL/IO/WKT.h +++ b/Stream_support/include/CGAL/IO/WKT.h @@ -59,6 +59,18 @@ void pop_back_if_equal_to_front(CGAL::Polygon_with_holes_2& pwh) } // namespace internal +//! \ingroup PkgStreamSupportRef +//! +//! \brief `read_point_WKT()` fills a `Point` from a WKT stream. The first line starting with POINT +//! in the stream will be used. +//! +//! \tparam Point can be a `CGAL::Point_2` or `CGAL::Point_3`. +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//! \see `CGAL::Point_2` +//! \see `CGAL::Point_3` template bool read_point_WKT(std::istream& in, Point& point) @@ -95,6 +107,23 @@ bool read_point_WKT(std::istream& in, return in.good(); } +//! \ingroup PkgStreamSupportRef +//! +//! \brief `read_multi_point_WKT()` overwrites the content of a `MultiPoint` +//! with the first line starting with MULTIPOINT in the stream. +//! +//! \tparam MultiPoint must be a model of `RandomAccessRange` of `CGAL::Point_2` or `CGAL::Point_3`, +//! and have: +//! - a function `push_back()` that takes the same point type, +//! - a function `clear()`, +//! - a function `resize()` that takes an `size_type` +//! - an `operator[]()` that takes a `size_type`. +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//! \see `CGAL::Point_2` +//! \see `CGAL::Point_3` template bool read_multi_point_WKT(std::istream& in, MultiPoint& mp) @@ -126,6 +155,22 @@ bool read_multi_point_WKT(std::istream& in, return in.good(); } +//! \ingroup PkgStreamSupportRef +//! +//! \brief `read_linestring_WKT()` fills a `Linestring` from a WKT stream. +//! The first line starting with LINESTRING in the stream will be used. +//! +//! \tparam Linestring must be a model of `RandomAccessRange` of `CGAL::Point_2`, +//! and have: +//! - a function `push_back()` that takes a `CGAL::Point_2`. +//! - a function `clear()`, +//! - a function `resize()` that takes an `size_type` +//! - an `operator[]()` that takes a `size_type`. +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//! \see `CGAL::Point_2` template bool read_linestring_WKT(std::istream& in, LineString& polyline) @@ -157,6 +202,22 @@ bool read_linestring_WKT(std::istream& in, return in.good(); } +//! \ingroup PkgStreamSupportRef +//! +//! \brief `read_multi_linestring_WKT()` overwrites the content of a `MultiLineString` +//! with the first line starting with MULTILINESTRING in the stream. +//! +//! \tparam MultiLineString must be a model of `RandomAccessRange` of `Linestring`, +//! and have: +//! - a function `push_back()` that takes a `Linestring`, +//! - a function `clear()`, +//! - a function `resize()` that takes an `size_type` +//! - an `operator[]()` that takes a `size_type`. +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//! \see `CGAL::Point_2` template bool read_multi_linestring_WKT(std::istream& in, MultiLineString& mls) @@ -201,6 +262,17 @@ bool read_multi_linestring_WKT(std::istream& in, return in.good(); } +//! \ingroup PkgStreamSupportRef +//! +//! \brief `read_polygon_WKT()` fills `polygon` from a WKT stream. +//! The first line starting with POLYGON in the stream will be used. +//! +//! \tparam Polygon is a `CGAL::General_polygon_with_holes_2`. +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//! \see `CGAL::General_polygon_with_holes_2` template bool read_polygon_WKT(std::istream& in, Polygon& polygon) @@ -237,6 +309,22 @@ bool read_polygon_WKT(std::istream& in, return in.good(); } +//! \ingroup PkgStreamSupportRef +//! +//! \brief `read_multi_polygon_WKT()` overwrites the content of a `MultiPolygon` +//! with the first line starting with MULTIPOLYGON in the stream. +//! +//! \tparam MultiPolygon must be a model of `RandomAccessRange` of `CGAL::General_polygon_with_holes_2`, +//! and have: +//! - a function `push_back()` that takes a `CGAL::General_polygon_with_holes_2`, +//! - a function `clear()`, +//! - a function `resize()` that takes an `size_type` +//! - an `operator[]()` that takes a `size_type`. +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//! \see `CGAL::General_polygon_with_holes_2` template bool read_multi_polygon_WKT(std::istream& in, MultiPolygon& polygons) @@ -276,6 +364,16 @@ bool read_multi_polygon_WKT(std::istream& in, return in.good(); } +//! \ingroup PkgStreamSupportRef +//! +//! \brief `write_point_WKT()` writes `point` into a WKT stream. +//! +//! \tparam Point is a `CGAL::Point_2` +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//! \see `CGAL::Point_2` template std::ostream& write_point_WKT(std::ostream& out, const Point& point) @@ -290,6 +388,16 @@ std::ostream& write_point_WKT(std::ostream& out, return out; } +//! \ingroup PkgStreamSupportRef +//! +//! \brief `write_polygon_WKT()` writes `poly` into a WKT stream. +//! +//! \tparam Polygon must be a `CGAL::General_polygon_with_holes_2` +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//! \see `CGAL::General_polygon_with_holes_2` template std::ostream& write_polygon_WKT(std::ostream& out, const Polygon& poly) @@ -304,6 +412,16 @@ std::ostream& write_polygon_WKT(std::ostream& out, return out; } +//! \ingroup PkgStreamSupportRef +//! +//! \brief `write_linestring_WKT()` writes the content of `ls` into a WKT stream. +//! +//! \tparam LineString must be a `RandomAccessRange` of `CGAL::Point_2`. +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//!\see `CGAL::Point_2` template std::ostream& write_linestring_WKT(std::ostream& out, LineString ls) @@ -319,6 +437,16 @@ std::ostream& write_linestring_WKT(std::ostream& out, return out; } +//! \ingroup PkgStreamSupportRef +//! +//! \brief `write_multi_point_WKT()` writes the content of `mp` into a WKT stream. +//! +//! \tparam MultiPoint must be a `RandomAccessRange` of `CGAL::Point_2`. +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//!\see `CGAL::Point_2` template std::ostream& write_multi_point_WKT(std::ostream& out, MultiPoint& mp) @@ -333,6 +461,16 @@ std::ostream& write_multi_point_WKT(std::ostream& out, return out; } +//! \ingroup PkgStreamSupportRef +//! +//! \brief `write_multi_polygon_WKT()` writes the content of `polygons` into a WKT stream. +//! +//! \tparam MultiPolygon must be a `RandomAccessRange` of `CGAL::General_polygon_with_holes_2`. +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//!\see `CGAL::General_polygon_with_holes_2` template std::ostream& write_multi_polygon_WKT(std::ostream& out, MultiPolygon& polygons) @@ -348,6 +486,16 @@ std::ostream& write_multi_polygon_WKT(std::ostream& out, return out; } +//! \ingroup PkgStreamSupportRef +//! +//! \brief `write_multi_linestring_WKT()` writes the content of `mls` into a WKT stream. +//! +//! \tparam MultiLineString must be a `RandomAccessRange` of `LineString`. +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//! \see `CGAL::write_linestring_WKT()` template std::ostream& write_multi_linestring_WKT(std::ostream& out, MultiLineString& mls) @@ -374,6 +522,20 @@ std::ostream& write_multi_linestring_WKT(std::ostream& out, return out; } +//! \ingroup PkgStreamSupportRef +//! +//! reads the content of a WKT stream and fills +//! `points`, `polylines` and `polygons` with all the POINT, MULTIPOINT, +//! LINESTRING, MULTILINESTRING, POLYGON and MULTIPOLYGON it finds in `input`. +//! +//! \tparam MultiPoint must be a model of `RandomAccessRange` of `CGAL::Point_2` or `CGAL::Point_3`. +//! \tparam MultiLineString must be a `RandomAccessRange` of `Linestring`. +//! \tparam MultiPolygon must be a model of `RandomAccessRange` of `CGAL::General_polygon_with_holes_2`. +//! +//! \attention Only Cartesian Kernels with double or float as `FT` are supported. +//! \attention This function is only available with boost versions starting at 1.56. +//! +//! \see `CGAL::read_linestring_WKT()` template @@ -451,6 +613,8 @@ std::istream& read_WKT(std::istream& input, return input; } + }//end CGAL -#endif -#endif + +#endif // BOOST VERSION CHECKS +#endif // CGAL_IO_WKT_H