package Ġcn . t urs om . core . data struct Ċ Ċ class ĠSet Map < K >( private Ġval Ġset : ĠSet < K >) Ġ: ĠMap < K , ĠUnit > Ġ{ ĊĊĠ Ġoverride Ġval Ġkeys : ĠSet < K > ĊĠĠĠ Ġget () Ġ= Ġset ĊĠ Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠ Ġget () Ġ= Ġset . size ĊĠ Ġoverride Ġval Ġvalues : ĠCollection < Unit > Ġ= ĠlistOf () ĊĊĠ Ġoverride Ġfun Ġcontains Key ( key : ĠK ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġset . contains ( key ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcontains Value ( value : ĠUnit ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget ( key : ĠK ): ĠUnit ? Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( set . contains ( key )) ĠUnit Ġelse Ġnull ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġsize Ġ== Ġ 0 ĊĠ Ġ} ĊĊĠ Ġoverride Ġval Ġentries : ĠSet < Map . Entry < K , ĠUnit >> Ġ= Ġobject Ġ: ĠSet < Map . Entry < K , ĠUnit >> Ġ{ ĊĠĠĠ Ġoverride Ġval Ġsize : ĠInt ĊĠĠĠĠĠ Ġget () Ġ= Ġset . size ĊĊĠĠĠ Ġoverride Ġfun Ġcontains ( element : ĠMap . Entry < K , ĠUnit >): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġreturn Ġset . contains ( element . key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontains All ( elements : ĠCollection < Map . Entry < K , ĠUnit >> ): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġelements . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! set . contains ( it . key )) Ġreturn Ġfalse ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġreturn Ġsize Ġ== Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < Map . Entry < K , ĠUnit >> Ġ{ ĊĠĠĠĠĠ Ġreturn ĠSet Map Iterator ( set ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġclass ĠSet Map Iterator < K >( set : ĠSet < K >) Ġ: ĠIterator < Map . Entry < K , ĠUnit >> Ġ{ ĊĠĠĠ Ġprivate Ġval Ġiterator Ġ= Ġset . iterator () ĊĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġreturn Ġiterator . hasNext () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnext (): ĠMap . Entry < K , ĠUnit > Ġ{ ĊĠĠĠĠĠ Ġreturn ĠEntry ( iterator . next ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġdata Ġclass ĠEntry < K >( override Ġval Ġkey : ĠK ) Ġ: ĠMap . Entry < K , ĠUnit > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġvalue : ĠUnit ĊĠĠĠĠĠ Ġget () Ġ= ĠUnit ĊĠ Ġ} Ċ }