// Copyright (c) 2010-2011 CNRS and LIRIS' Establishments (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org)
//
// $URL: https://github.com/CGAL/cgal/blob/v5.4/Combinatorial_map/include/CGAL/Combinatorial_map_insertions.h $
// $Id: Combinatorial_map_insertions.h 48fedba 2019-12-11T16:57:34+01:00 Andreas Fabri
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
//
// Author(s)     : Guillaume Damiand <guillaume.damiand@liris.cnrs.fr>
//
#ifndef CGAL_COMBINATORIAL_MAP_INSERTIONS_H
#define CGAL_COMBINATORIAL_MAP_INSERTIONS_H

#include <CGAL/config.h>

namespace CGAL
{
/** @file Combinatorial_map_insertions.h
 * Insertion operations on combinatorial map.
 */

#ifndef CGAL_NO_DEPRECATED_CODE

/** Insert a vertex in a given edge.
 * @param amap the used combinatorial map.
 * @param adart a dart of the edge (!=nullptr && !=null_dart_handle).
 * @param update_attributes a boolean to update the enabled attributes
 *        (deprecated, now we use are_attributes_automatically_managed())
 * @return a dart of the new vertex.
 */
template<class CMap>
CGAL_DEPRECATED typename CMap::Dart_handle
insert_cell_0_in_cell_1( CMap& amap, typename CMap::Dart_handle adart,
                         typename CMap::template
                         Attribute_handle<0>::type ah=CMap::null_handle,
                         bool update_attributes=true )
{
  return amap.insert_cell_0_in_cell_1(adart, ah, update_attributes);
}

/** Insert a vertex in the given 2-cell which is split in triangles,
 * once for each inital edge of the facet.
 * @param amap the used combinatorial map.
 * @param adart a dart of the facet to triangulate.
 * @param update_attributes a boolean to update the enabled attributes
 *        (deprecated, now we use are_attributes_automatically_managed())
 * @return A dart incident to the new vertex.
 */
template < class CMap >
CGAL_DEPRECATED typename CMap::Dart_handle
insert_cell_0_in_cell_2( CMap& amap, typename CMap::Dart_handle adart,
                         typename CMap::template
                         Attribute_handle<0>::type ah=CMap::null_handle,
                         bool update_attributes=true )
{
  return amap.insert_cell_0_in_cell_2(adart, ah, update_attributes);
}
/** Insert a dangling edge in a 2-cell between given by a dart.
 * @param amap the used combinatorial map.
 * @param adart1 a first dart of the facet (!=nullptr && !=null_dart_handle).
 * @param update_attributes a boolean to update the enabled attributes
 *        (deprecated, now we use are_attributes_automatically_managed())
 * @return a dart of the new edge, not incident to the vertex of adart1.
 */
template<class CMap>
CGAL_DEPRECATED typename CMap::Dart_handle
insert_dangling_cell_1_in_cell_2( CMap& amap,
                                  typename CMap::Dart_handle adart1,
                                  typename CMap::template
                                  Attribute_handle<0>::type ah=CMap::null_handle,
                                  bool update_attributes=true )
{
  return amap.insert_dangling_cell_1_in_cell_2(adart1,
                                               ah, update_attributes);
}

/** Test if an edge can be inserted onto a 2-cell between two given darts.
 * @param amap the used combinatorial map.
 * @param adart1 a first dart.
 * @param adart2 a second dart.
 * @return true iff an edge can be inserted between adart1 and adart2.
 */
template < class CMap >
CGAL_DEPRECATED bool is_insertable_cell_1_in_cell_2
(const CMap& amap, typename CMap::Dart_const_handle adart1,
 typename CMap::Dart_const_handle adart2)
{
  return amap.is_insertable_cell_1_in_cell_2(adart1, adart2);
}

/** Insert an edge in a 2-cell between two given darts.
 * @param amap the used combinatorial map.
 * @param adart1 a first dart of the facet (!=nullptr && !=null_dart_handle).
 * @param adart2 a second dart of the facet. If nullptr insert a dangling edge.
 * @param update_attributes a boolean to update the enabled attributes
 *        (deprecated, now we use are_attributes_automatically_managed())
 * @return a dart of the new edge, and not incident to the
 *         same vertex than adart1.
 */
template<class CMap>
CGAL_DEPRECATED typename CMap::Dart_handle
insert_cell_1_in_cell_2(CMap& amap,
                        typename CMap::Dart_handle adart1,
                        typename CMap::Dart_handle adart2,
                        bool update_attributes=true)
{
  return amap.insert_cell_1_in_cell_2(adart1, adart2,
                                      update_attributes);
}

/** Test if a 2-cell can be inserted onto a given 3-cell along
 * a path of edges.
 * @param amap the used combinatorial map.
 * @param afirst iterator on the beginning of the path.
 * @param alast  iterator on the end of the path.
 * @return true iff a 2-cell can be inserted along the path.
 */
template <class CMap, class InputIterator>
CGAL_DEPRECATED bool is_insertable_cell_2_in_cell_3
(const CMap& amap, InputIterator afirst, InputIterator alast)
{
  return amap.is_insertable_cell_2_in_cell_3(afirst, alast);
}

/** Insert a 2-cell in a given 3-cell along a path of darts.
 * @param amap the used combinatorial map.
 * @param afirst iterator on the beginning of the path.
 * @param alast  iterator on the end of the path.
 * @param update_attributes a boolean to update the enabled attributes
 *        (deprecated, now we use are_attributes_automatically_managed())
 * @return a dart of the new 2-cell.
 */
template<class CMap, class InputIterator>
CGAL_DEPRECATED typename CMap::Dart_handle
insert_cell_2_in_cell_3(CMap& amap, InputIterator afirst, InputIterator alast,
                        bool update_attributes=true)
{
  return amap.insert_cell_2_in_cell_3(afirst, alast, update_attributes);
}

#endif // CGAL_NO_DEPRECATED_CODE

} // namespace CGAL

#endif // CGAL_COMBINATORIAL_MAP_INSERTIONS_H
