Skip to content

Commit

Permalink
I/O factoring
Browse files Browse the repository at this point in the history
  • Loading branch information
pougetma committed Jan 29, 2025
1 parent effbebe commit d61faa1
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
namespace CGAL{

/*!
\ingroup PkgHyperbolicSurfaceTriangulation2InputOutput
inserts the triangulation in a stream.
The format of the output is the following.
Each dart of the triangulation is given an index between \f$ 0 \f$ and \f$ n-1 \f$, where \f$ n \f$ is the number of darts of the triangulation.
The first line contains the number \f$ n \f$ of darts.
The next line contains either 'yes' or 'no' and tells whether the triangulation has an anchor.
If the triangulation has an anchor, then the four next lines print the index of the dart of the anchor, and the three vertices of the anchor.
Then, for every triangle \f$ t \f$, the indices of the three darts of \f$ t \f$ are printed on three distinct lines.
Finally, for every edge \f$ e \f$, the indices of the two darts of \f$ e \f$ are printed on two distinct lines, followed by a third line on which the cross ratio of \f$ e \f$ is printed.
\pre <code> Triangulation_on_hyperbolic_surface_2<Traits>::is_valid() </code>
*/
std::ostream& operator<<(std::ostream& s, const Triangulation_on_hyperbolic_surface_2<Traits>& triangulation);

/*!
\ingroup PkgHyperbolicSurfaceTriangulation2InputOutput
extracts the triangulation from a stream.
The format of the input should be the same as the format of the output of
the '<<' operator for Triangulation_on_hyperbolic_surface_2.
*/
std::istream& operator>>(std::istream& s, Triangulation_on_hyperbolic_surface_2<Traits>& triangulation);

/*!
\ingroup PkgHyperbolicSurfaceTriangulation2InputOutput
inserts the domain in a stream.
The format of the output is the following.
The first line prints the number \f$n\f$ of vertices of the domain.
For \f$ i=0 \f$ to \f$ n-1 \f$ the index of the side paired to side \f$ i \f$ is printed on a separate line.
For \f$ i=0 \f$ to \f$ n-1 \f$ the i-th vertex is printed on a separate line.
\pre <code> Hyperbolic_fundamental_domain_2< Traits >::is_valid() </code>
*/
std::ostream& operator<<(std::ostream& s, const Hyperbolic_fundamental_domain_2<Traits>& domain);

/*!
\ingroup PkgHyperbolicSurfaceTriangulation2InputOutput
extracts the domain from a stream.
The format of the input must be the same as the format of the output of
the '<<' operator for Hyperbolic_fundamental_domain_2.
*/
std::istream& operator>>(std::istream& s, Hyperbolic_fundamental_domain_2<Traits>& domain);

/*!
\ingroup PkgHyperbolicSurfaceTriangulation2InputOutput
inserts the isometry in a stream.
*/
std::ostream& operator<<(std::ostream& s, const Hyperbolic_isometry_2<Traits>& isometry);

}; // namespace CGAL
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Copyright (c) 2024
// INRIA Nancy (France), and Université Gustave Eiffel Marne-la-Vallee (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org)
//
// $URL$
// $Id$
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
//
// Author(s) : Vincent Despré, Loïc Dubois, Marc Pouget, Monique Teillaud

// This file contains the declaration and the implementation of the input/output
// functions for the package Triangulation_on_hyperbolic_surface_2

#ifndef CGAL_TRIANGULATION_ON_HYPERBOLIC_SURFACE_2_IO_H
#define CGAL_TRIANGULATION_ON_HYPERBOLIC_SURFACE_2_IO_H

#include <CGAL/license/Triangulation_on_hyperbolic_surface_2.h>
#include <CGAL/Triangulation_on_hyperbolic_surface_2.h>
#include <CGAL/basic.h>
#include <iostream>

namespace CGAL {

////////////////////////////////////////////////////////////////////////////////
template<class Traits>
std::ostream& operator<<(std::ostream& s, const Hyperbolic_fundamental_domain_2<Traits>& domain){
CGAL_precondition(domain.is_valid());
return domain.to_stream(s);
}

template<class Traits>
std::istream& operator>>(std::istream& s, Hyperbolic_fundamental_domain_2<Traits>& domain){
return domain.from_stream(s);
}

////////////////////////////////////////////////////////////////////////////////
template<class Traits>
std::ostream& operator<<(std::ostream& s, const Hyperbolic_isometry_2<Traits>& isometry){
for (int k=0; k<4; k++){
s << isometry.get_coefficient(k);
}
return s;
}

////////////////////////////////////////////////////////////////////////////////
template<class Traits, class Attributes>
std::ostream& operator<<(std::ostream& s, const Triangulation_on_hyperbolic_surface_2<Traits, Attributes>& triangulation){
triangulation.to_stream(s);
return s;
}

template<class Traits, class Attributes>
void operator>>(std::istream& s, Triangulation_on_hyperbolic_surface_2<Traits, Attributes>& triangulation){
triangulation.from_stream(s);
}

} // namespace CGAL

#endif // CGAL_TRIANGULATION_ON_HYPERBOLIC_SURFACE_2_IO_H

0 comments on commit d61faa1

Please sign in to comment.