package Ġworld . ph ant asm al . observable . cell . list Ċ Ċ import Ġworld . ph ant asm al . observable . Dependent Ċ import Ġworld . ph ant asm al . observable . cell . Cell Ċ Ċ /** Ċ Ġ* ĠList Cell Ġof Ġwhich Ġthe Ġvalue Ġdepends Ġon Ġ 0 Ġor Ġmore Ġother Ġcells . Ċ Ġ*/ Ċ class ĠDepend ent List Cell < E >( ĊĠĠĠ Ġprivate Ġvar arg Ġval Ġdependencies : ĠCell <* >, ĊĠĠĠ Ġprivate Ġval Ġcompute Elements : Ġ() Ġ-> ĠList < E >, Ċ ) Ġ: ĠAbstract Dependent List Cell < E >() Ġ{ ĊĊĠĠĠ Ġoverride Ġvar Ġelements : ĠList < E > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġoverride Ġfun Ġadd Dependent ( dependent : ĠDepend ent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dependent s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompute Elements () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( dependency Ġin Ġdependencies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency . add Dependent ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . add Dependent ( dependent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove Dependent ( dependent : ĠDepend ent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . remove Dependent ( dependent ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( dependent s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( dependency Ġin Ġdependencies ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency . remove Dependent ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Elements () Ġ{ ĊĠĠĠĠĠĠĠ Ġelements Ġ= Ġcompute Elements . invoke () ĊĠĠĠ Ġ} Ċ } Ċ