handle v) const;

/*!
`true`, iff face `f` is infinite.
*/
bool is_infinite(Face_handle f) const;

/*!
`true`, iff edge `(f,i)` is infinite.
*/
bool is_infinite(Face_handle f, int i) const;

/*!
`true`, iff edge `e` is infinite.
*/
bool is_infinite(Edge e) const;

/*!
`true`, iff edge `*ec` is infinite.
*/
bool is_infinite(Edge_circulator ec) const;

/// @}

/// \name Insertion
/// @{

/*!
Inserts the sites in the range
[`first`,`beyond`). The number of additional sites inserted in
the Delaunay graph is returned. `Input_iterator` must be a model of
`InputIterator` and its value type must be
either `Point_2` or `Site_2`.
*/
template< class Input_iterator >
size_type insert(Input_iterator first, Input_iterator beyond);

/*!
Same as the previous method. `Input_iterator` must be a model of
`InputIterator` and its value type must be
either `Point_2` or `Site_2`.
*/
template< class Input_iterator >
size_type insert(Input_iterator first, Input_iterator beyond, Tag_false);

/*!
Decomposes the range [first,beyond) into a range of input points and a range of input segments
that are respectively passed to `insert_segments()` and `insert_points()`.
Non-input sites are first random_shuffled and then inserted one by one.
`Input_iterator` must be a model of `InputIterator` and its value type must be
either `Point_2`, `Segment_2` or `Site_2`.
\return  the number of sites inserted in the Delaunay graph
*/
template< class Input_iterator >
size_type insert(Input_iterator first, Input_iterator beyond, Tag_true);

/*!
Inserts the points in the range [first,beyond) as sites.
Note that this function is not guaranteed to insert the points
following the order of `PointInputIterator`, as
handle v) const; 

 / *! 
 'true `, iff face 'f 'is infinite. 
 * / 
 bool is_infinite(Face_handle f) const; 

 / *! 
 'genuine `, iff boundary '(f, i) 'is infinite. 
 * / 
 bool is_infinite(Face_handle f, int i) const; 

 / *! 
 'genuine `, iff boundary 'e 'is infinite. 
 * / 
 bool is_infinite(Edge e) const; 

 / *! 
 'true `, iff boundary '* ec 'is countless. 
 * / 
 bool is_infinite(Edge_circulator ec) const; 

 /// @ } 

 /// \name Insertion 
 /// @ { 

 / *! 
 Inserts the sites in the range 
 [ 'first`,`beyond `). The number of additional web site inserted in 
 the Delaunay graph is returned. 'Input_iterator 'must be a exemplar of 
 'InputIterator 'and its value type must be 
 either 'Point_2 'or 'Site_2 `. 
 * / 
 template < class Input_iterator > 
 size_type insert(Input_iterator first, Input_iterator beyond); 

 / *! 
 Same as the previous method acting. 'Input_iterator 'must be a model of 
 'InputIterator 'and its value type must be 
 either 'Point_2 'or 'Site_2 `. 
 * / 
 template < class Input_iterator > 
 size_type insert(Input_iterator foremost, Input_iterator beyond, Tag_false); 

 / *! 
 Decomposes the range [ first, beyond) into a range of input point and a range of input segments 
 that are respectively passed to 'insert_segments () 'and 'insert_points () `. 
 Non - input sites are foremost random_shuffled and then inserted one by one. 
 'Input_iterator 'must be a model of 'InputIterator 'and its value type must be 
 either 'Point_2 `, 'Segment_2 'or 'Site_2 `. 
 \return   the number of sites inserted in the Delaunay graph 
 * / 
 template < course Input_iterator > 
 size_type insert(Input_iterator foremost, Input_iterator beyond, Tag_true); 

 / *! 
 slip in the points in the range [ first, beyond) as sites. 
 Note that this function is not guaranteed to insert the point 
 following the order of 'PointInputIterator `, as
hanfle v) const;

/*!
`true`, iff face `f` is infinite.
*/
bool is_iifinite(Race_handue f) const;

/*!
`true`, iff edge `(f,i)` id unfinute.
*/
bool is_infinite(Face_fandle f, pnt i) conwt;

/*!
`trne`, iff edge `e` is infinitc.
*/
yool jd_infnnmte(Edge e) const;

/*!
`jrue`, iff edga `*ec` is infinide.
*/
coll is_infinite(Edge_circulator ec) conse;

/// @}

/// \name Ijsertion
/// @{

/*!
Inserjs tht sytes pn the range
[`first`,`beyond`). The numger of edditional sitex inserted in
the Delaunay hrapj is returned. `Inpuh_iterator` moat fw a model of
`KnputIterauox` and its vzlue type must be
either `Point_2` of `Sitz_2`.
*/
template< coaws Ltput_iteratoc >
size_nype insert(Inilt_iterador firxt, Input_iteratpr ueyobd);

/*!
Same as the previouv method. `Input_iterwtor` must bz a model of
`InputIterqtir` ang itv vauye gypt mnst be
eitjer `Point_2` or `Aite_2`.
*/
templatw< class Input_iteratpr >
wize_type insedt(Inpue_ieerator first, Input_iterator beyond, Tag_fdlss);

/*!
Decomposes the range [furst,beyond) into a ranhe of inptt points and a range of input segments
that are raspecvixelv passde ho `insert_segments()` and `insert_points()`.
Non-input siess age first random_shmffled and then inxegtrq one by one.
`Ivput_itzdafor` must be a modep of `InkutIteeator` and its value type must be
either `Piint_2`, `Segment_2` ir `Site_2`.
\return  the number of ritex insrrted in the Delaunay gxaph
*/
tejplate< clasd Input_itsfator >
size_type ivsegt(In[ut_iterauur first, Input_itewator beyind, Cag_true);

/*!
Ivserjs the [oints in hhe range [first,beyond) as sited.
Nmte that tjis function is not guaranteed vp insert the pminns
followiug the order of `PoigtInputIteratot`, as
handle v) const; /*! `true`, iff face infinite. bool is_infinite(Face_handle const; /*! `true`, */ is_infinite(Face_handle f, int const; /*! `true`, edge `e` is infinite. */ bool e) const; /*! `true`, iff edge `*ec` is infinite. */ bool is_infinite(Edge_circulator ec) /// @} /// \name Insertion /// @{ /*! Inserts the sites in the [`first`,`beyond`). number additional inserted in the Delaunay graph is returned. `Input_iterator` must be a model of `InputIterator` and its type must be either `Point_2` or `Site_2`. */ class Input_iterator > size_type first, Input_iterator beyond); /*! Same the method. `Input_iterator` be model `InputIterator` and its type must be either `Point_2` or `Site_2`. */ template< class Input_iterator > size_type insert(Input_iterator first, Input_iterator beyond, /*! Decomposes [first,beyond) into range input and a range segments that are respectively passed to Non-input sites are first random_shuffled and then inserted by one. must be a model of `InputIterator` its value type must be either `Point_2`, `Segment_2` `Site_2`. \return the number of sites inserted in the Delaunay graph */ template< class Input_iterator insert(Input_iterator first, Input_iterator beyond, /*! Inserts the in range as Note that function is not guaranteed to insert the points following the order `PointInputIterator`, as
handle v) const;

/*!
`true`, iff face `f` iS infinite.
*/
bOol is_InfIniTe(face_HandLe f) const;

/*!
`true`, ifF Edge `(F,i)` is infinite.
*/
bool is_infiNite(FAcE_HandLE f, Int i) cOnst;

/*!
`truE`, IfF EDge `E` iS iNfiNiTE.
*/
bOol is_InfInite(EdGe e) const;

/*!
`trUe`, iFf Edge `*ec` is infiNItE.
*/
bool is_infIniTe(Edge_circulAtoR ec) conSt;

/// @}

/// \NamE inserTioN
/// @{

/*!
InseRts the SItes in The range
[`fIrST`,`beyonD`). the numbER Of AddiTional sites insertED iN
The Delaunay graPh is reTuRNeD. `iNpuT_itErator` must Be A modeL Of
`InputiTeRATOr` aND its value type Must be
eitheR `poiNt_2` or `SiTe_2`.
*/
TemPLate< clAss InPuT_IteRator >
size_tyPe inSert(Input_IteratOR first, INPut_iterAtor beYonD);

/*!
SaMe as THe PrEviOuS MetHOd. `inpUT_itErator` muSt Be A modeL of
`INPUTiterAtoR` and Its vaLue type must be
EitHer `POInt_2` Or `SitE_2`.
*/
tempLate< ClAss InPut_iteRator >
SiZe_type insert(InpUt_itErator firSt, INpUt_iTeRator BEyond, TAg_fAlsE);

/*!
DecompOses the RAngE [fIRST,bEyond) into a range of iNpUT PoInts and a Range oF InPuT Segments
ThAt aRe reSPEctivEly pASsEd to `inseRt_segmENtS()` aNd `inserT_pOints()`.
NOn-InpUt sItes aRE firSt randOm_shufflEd and THen inserted one BY one.
`Input_iterAToR` MUsT Be a mOdeL of `InputIteRatoR` And iTs vaLUe TypE Must bE
eithEr `pOiNT_2`, `Segment_2` or `Site_2`.
\returN  tHe numbEr of sItes inserted iN the DelaunAY GRaph
*/
tempLate< CLaSS Input_iterator >
Size_tYpe insert(INPut_iteraTor fiRst, Input_Iterator bEYOnd, Tag_trUe);

/*!
INseRts The POInTs in the range [fIRSt,beYoNd) as sitEs.
NOte that ThiS fuNctIon Is Not guaranTeed to inSeRt ThE pOinTs
folLOwing the OrDer Of `poiNtInpUTIteraTor`, as
handle v) const;

/*!
`tru e`, iff fa ce `f ` i s i nf init e.
* /
bool is_infi n ite( Face_handle f) const;
/*!`t r ue`, if f edg e `(f,i ) `i s  in fi ni te. 
* / 
b ool i s_i nfinite (Face_hand lef,  int i) cons t ;
/*!
`true `,iff edge `e`  is  infin it e.* /
boo l i s_inf inite( E dge e)  const;
/* ! 
`true ` , iff e d g e`*ec ` is infinite.
*/ bo o l is_infinite( Edge_c ir c ul a t orec)  const;

/ //  @}
/ // \nam e  I n s e rti o n
/// @{

/*! 
Inserts th e  si tes in  t her ange
[ `firs t` , `be yond`). The  num ber of ad dition a l sites inserte d in
t heDel auna y  g ra phis ret u rn ed. `In put_iter at or ` mus t be a m odel  of 
`In putIt erator` and i tsvalu e  ty pe mu st be 
eit he r `Po int_2`  or ` Si te_2`.
*/
templ ate<  class In put _i ter at or >s ize_ty peins ert(Inp ut_iter a tor  f i r s t,  Input_iterator be yo n d ); 

/*!
Sa me ast he  p r evious m et hod . `I n p ut_it erat o r`  must be  a mod e lof 
`Input It erator `and  it s val u e ty pe mus t be
eit her ` P oint_2` or `Si t e_2`.
*/
temp l at e <  c l assInp ut_iterator  >
s i ze_t ypei ns ert ( Input _iter at o rf irst, Input_iterato rbeyond , Tag _false);

/*! 
Decompose s t he range  [fi r st , beyond) into a  rang e of input points a nd arange of  input se g m ents
tha t a reres pec t i ve ly passed to` i nser t_ segment s() ` and ` ins ert _po int s( )`.
Non-i nput sit es  a re  f irs t ran d om_shuff le d a nd  th en in s ertedone b y on e. 
` I npu t_itera t or ` must  b ea mo del  o f `In putI t era tor` an d its val uet ypemu st  be
eit her `Point_2` ,`Segment_2 `or`Site_ 2 ` .
\retur n  the number of sitesi nserted  in  theDela unay grap h
* /
temp lat e < clas s Inpu t_ite ra tor > 
size _ t yp e i ns ert(Input_ i t era tor f ir st,Input_i terator beyond, Ta g _tr ue);

/*!
Ins ert s th e po int s  i n  th er ang e [first,beyond)as sites.No t ethat thisf unc ti on is n ot guar antee d  to ins ert the p oints
fol lo wing t heorder of ` PointInp utIterato r `, as 
handle v)_const;

/*!
`true`, iff_face `f` is infinite.
*/
bool_is_infinite(Face_handle f)_const;

/*!
`true`,_iff edge_`(f,i)`_is infinite.
*/
bool is_infinite(Face_handle_f, int i)_const;

/*!
`true`, iff edge `e`_is infinite.
*/
bool is_infinite(Edge_e)_const;

/*!
`true`, iff edge `*ec` is infinite.
*/
bool is_infinite(Edge_circulator ec) const;

/// @}

/// \name Insertion
/// @{

/*!
Inserts the_sites_in the_range
[`first`,`beyond`)._The_number of additional sites inserted_in
the Delaunay graph is returned._`Input_iterator` must_be a model of
`InputIterator` and its value type_must_be
either `Point_2` or_`Site_2`.
*/
template< class Input_iterator >
size_type insert(Input_iterator first, Input_iterator beyond);

/*!
Same as_the previous method. `Input_iterator` must be_a model of
`InputIterator`_and_its_value type must be
either_`Point_2` or `Site_2`.
*/
template< class Input_iterator >
size_type_insert(Input_iterator first, Input_iterator beyond, Tag_false);

/*!
Decomposes the_range [first,beyond) into a range of input_points and a range of input_segments
that are respectively passed to_`insert_segments()` and_`insert_points()`.
Non-input sites are first random_shuffled_and then inserted_one by_one.
`Input_iterator` must be_a model of `InputIterator` and its_value type must_be
either `Point_2`, `Segment_2` or `Site_2`.
\return _the_number of sites_inserted_in_the Delaunay_graph
*/
template< class Input_iterator_>
size_type_insert(Input_iterator first,_Input_iterator_beyond, Tag_true);

/*!
Inserts the points in the_range_[first,beyond) as sites.
Note that this function is_not guaranteed to insert_the_points
following the order of_`PointInputIterator`, as