/*! \ingroup PkgArrangementOnSurface2Concepts
 * \cgalConcept
 *
 * A model for the `AosWithHistoryInputFormatter` concept supports a set of
 * functions that enable reading an arrangement-with-history instance from an
 * input stream using a specific format.
 *
 * \cgalRefines{AosInputFormatter}
 *
 * \cgalHasModelsBegin
 * \cgalHasModels{CGAL::Arr_with_history_text_formatter<ArrFormatter>}
 * \cgalHasModelsEnd
 */
class AosWithHistoryInputFormatter {
public:
  /// \name Types
  /// @{

  /*! the type of arrangement to input.
   */
  typedef unspecified_type Arr_with_history_2;

  /*! the inducing curve type.
   */
  typedef typename Arrangement_2::Curve_2 Curve_2;

  /// @}

  /// \name Formatted Input Functions
  /// @{

  /*! reads a message indicating the beginning of the inducing curves.
   */
  void read_curves_begin();

  /*! reads a message indicating the end of the inducing curves.
   */
  void read_curves_end();

  /*! reads a message indicating the beginning of a single curve record.
   */
  void read_curve_begin();

  /*! reads a message indicating the end of a single curve record.
   */
  void read_curve_end();

  /*! reads a curve.
   */
  void read_curve(Curve_2& c);

  /*! reads a message indicating the beginning of the set of edges
   * induced by the current curve.
   */
  void read_induced_edges_begin();

  /*! reads a message indicating the end of the induced edges set.
   */
  void read_induced_edges_end();

  /// @}
}; /* end AosWithHistoryInputFormatter */
