/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ @ file : Suppress (" Control Flow With Empty Body ") Ċ Ċ package Ġcom . replica . replic ais land Ċ Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠA Ġder ivation Ġof ĠObject Manager Ġthat Ġsorts Ġits Ġchildren Ġif Ġthey Ġare Ġof Ġtype ĠPh ased Object . Ċ Ġ* ĠSort ing Ġis Ġperformed Ġon Ġadd . Ċ Ġ*/ Ċ open Ġclass ĠPh ased Object Manager Ġ: ĠObject Manager Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Dirty : ĠBoolean ĊĠĠĠ Ġprivate Ġvar Ġm Search Dummy Ġ// ĠA Ġdummy Ġobject Ġallocated Ġup - front Ġfor Ġsearching Ġby Ġphase . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠPh ased Object ĊĊĠĠĠ Ġconstructor () Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Dirty Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfetch Objects (). set Comparator ( s Phase d Object Comparator ) ĊĠĠĠĠĠĠĠ Ġfetch Pending Objects (). set Comparator ( s Phase d Object Comparator ) ĊĠĠĠĠĠĠĠ Ġm Search Dummy Ġ= ĠPh ased Object () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( array Size : ĠInt ) Ġ: Ġsuper ( array Size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Dirty Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfetch Objects (). set Comparator ( s Phase d Object Comparator ) ĊĠĠĠĠĠĠĠ Ġfetch Pending Objects (). set Comparator ( s Phase d Object Comparator ) ĊĠĠĠĠĠĠĠ Ġm Search Dummy Ġ= ĠPh ased Object () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcommit Updates () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . commit Updates () ĊĠĠĠĠĠĠĠ Ġif Ġ( m Dirty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Objects (). sort ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Dirty Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( thing : ĠBase Object ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( thing Ġis ĠPh ased Object ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . add ( thing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Dirty Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġonly Ġreason Ġto Ġrestrict ĠPh ased Object Manager Ġto ĠPh ased Objects Ġis Ġso Ġthat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe ĠPh ased Object Comparator Ġcan Ġassume Ġall Ġof Ġits Ġcontents Ġare ĠPh ased Objects Ġand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġavoid Ġcalling Ġinstanceof Ġevery Ġtime . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġ 2 Ġ: Ġfix Ġassert ( false ) Ġ{ Ġ" Can 't Ġadd Ġa Ġnon - Phase d Object Ġto Ġa ĠPh ased Object Manager !" Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind ( phase : ĠInt ): ĠBase Object ? Ġ{ ĊĠĠĠĠĠĠĠ Ġm Search Dummy . set Phase To This ( phase ) ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġfetch Objects (). find ( m Search Dummy , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠBase Object ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġfetch Objects ()[ index ] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġfetch Pending Objects (). find ( m Search Dummy , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġfetch Pending Objects ()[ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠComparator Ġfor Ġphase d Ġobjects . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġclass ĠPh ased Object Comparator Ġ: ĠComparator < Base Object ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare ( object 1 : ĠBase Object ?, Ġobject 2 : ĠBase Object ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( object 1 Ġ!= Ġnull Ġ&& Ġobject 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ( object 1 Ġas ĠPh ased Object ). phase Ġ- Ġ( object 2 Ġas ĠPh ased Object ). phase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( object 1 Ġ== Ġnull Ġ&& Ġobject 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( object 2 Ġ== Ġnull Ġ&& Ġobject 1 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġs Phase d Object Comparator Ġ= ĠPh ased Object Comparator () ĊĠĠĠ Ġ} Ċ }