/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 1 ĠE no ve a Ġ( fab ien . me ur isse @ en ove a . net ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġdil iv ia . s 2 . index . shape Ċ Ċ /** Ċ Ġ* ĠS 2 Cli pped Shape Ġrepresents Ġthe Ġpart Ġof Ġa Ġshape Ġthat Ġintersect s Ġan ĠS 2 Cell . ĠIt Ġconsists Ġof Ġthe Ġset Ġof Ġedge Ġids Ġthat Ċ Ġ* Ġintersect Ġthat Ġcell , Ġand Ġa Ġboolean Ġindicating Ġwhether Ġthe Ġcenter Ġof Ġthe Ġcell Ġis Ġinside Ġthe Ġshape Ġ( for Ġshapes Ġthat Ċ Ġ* Ġhave Ġan Ġinterior ). Ċ Ġ* Ċ Ġ* ĠNote Ġthat Ġthe Ġedges Ġthemselves Ġare Ġnot Ġcli pped ; Ġwe Ġalways Ġuse Ġthe Ġoriginal Ġedges Ġfor Ġintersection Ġtests Ġso Ġthat Ġthe Ċ Ġ* Ġresults Ġwill Ġbe Ġthe Ġsame Ġas Ġthe Ġoriginal Ġshape . Ċ Ġ* Ċ Ġ* Ġ@ property Ġshape Id ĠThe Ġshape Ġid Ġof Ġthe Ġcli pped Ġshape . Ċ Ġ* Ġ@ property Ġedges ĠThe Ġids Ġof Ġthe Ġedges Ġthat Ġintersect s Ġthe Ġcell . Ċ Ġ* Ġ@ property Ġcontains Center ĠIndicates Ġif Ġthe Ġcenter Ġof Ġthe Ġcell Ġis Ġinside Ġthe Ġshape Ġ( for Ġshape Ġthat Ġhave Ġan Ġinterior ). Ċ Ġ* Ċ Ġ* Ġ@ author ĠGoogle ĠS 2 Geometry ĠProject Ċ Ġ* Ġ@ author ĠF ab ien ĠMe ur isse Ġ( fab ien . me ur isse @ en ove a . net ) Ċ Ġ* Ġ@ since Ġ 1 . 0 Ċ Ġ*/ Ċ data Ġclass ĠS 2 Cli pped Shape ( val Ġshape Id : ĠInt , Ġval Ġedges : ĠList < Int >, Ġval Ġcontains Center : ĠBoolean ) Ġ{ ĊĊĠĠĠ Ġ/** ĠThe Ġnumber Ġof Ġedges Ġthat Ġintersect Ġthe ĠS 2 CellId . Ġ*/ ĊĠĠĠ Ġval Ġnum Edges : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġedges . size ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġedge Ġid Ġof Ġthe Ġgiven Ġedge Ġin Ġthis Ġcli pped Ġshape . ĠEd ges Ġare Ġsorted Ġin Ġincreasing Ġorder Ġof Ġedge Ġid . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠREQ UIRES : Ġ 0 Ġ<= Ġi Ġ< Ġnum _ edges () ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġid Ġof Ġthe Ġedge Ġat Ġindex Ġi . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġedge ( i : ĠInt ): ĠInt Ġ= Ġedges [ i ] ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġif Ġan Ġedge Ġis Ġcontains Ġin Ġthe Ġcell . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġid ĠThe Ġidentifier Ġof Ġthe Ġedge Ġto Ġcheck . ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġcli pped Ġshape Ġcontains Ġthe Ġgiven Ġedge Ġid . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcontains Edge ( id : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠLinear Ġsearch Ġis Ġfast Ġbecause Ġthe Ġnumber Ġof Ġedges Ġper Ġshape Ġis Ġtypically ĊĠĠĠĠĠĠĠ Ġ// Ġvery Ġsmall Ġ( less Ġthan Ġ 1 0 ). ĊĠĠĠĠĠĠĠ Ġfor Ġ( e Ġin Ġ 0 Ġuntil Ġnum Edges ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edge ( e ) Ġ== Ġid ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ Ċ } Ċ