č Ċ /** ĠRepresents Ġan Ġobject Ġwith Ġa Ġposition Ġ*/ č Ċ abstract Ġclass ĠPosition ed < out ĠT > Ġ{ čĊĠĠĠ Ġ/** ĠGet Ġthe Ġvalue Ġof Ġthe Ġobject Ġ*/ čĊĠĠĠ Ġabstract Ġfun ĠgetValue (): ĠT čĊčĊĠĠĠ Ġ/** ĠGet Ġthe Ġposition Ġof Ġthe Ġobject Ġ*/ čĊĠĠĠ Ġabstract Ġfun Ġget Position (): ĠPosition čĊčĊĠĠĠ Ġ/** ĠCreate Ġa Ġnew Ġposition ed Ġobject Ġwith Ġthe Ġsame Ġposition Ġbut Ġnew Ġvalue Ġ*/ čĊĠĠĠ Ġfun Ġ< R > Ġwith Value ( value : ĠR ): ĠPosition ed < R > Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġthis Copy Ġ= Ġthis čĊĠĠĠĠĠĠĠ Ġreturn Ġobject : ĠPosition ed < R >() Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue (): ĠR Ġ= Ġvalue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Position (): ĠPosition Ġ= Ġthis Copy . getPosition () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** ĠCreate Ġa Ġnew Ġposition ed Ġobject Ġwith Ġthe Ġsame Ġposition Ġbut Ġa Ġvalue Ġmapped Ġusing Ġ` func ` Ġ*/ čĊĠĠĠ Ġfun Ġ< R > Ġmap Value ( func : Ġ( T ) Ġ-> ĠR ): ĠPosition ed < R > čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġwith Value ( func ( getValue ())) čĊčĊĠĠĠ Ġ/** ĠCreate Ġa Ġnew Ġposition ed Ġobject Ġwith Ġthe Ġsame Ġvalue Ġbut Ġdifferent Ġposition Ġ*/ čĊĠĠĠ Ġfun Ġwith Position ( position : ĠPosition ): ĠPosition ed < T > Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġthis Copy Ġ= Ġthis čĊĠĠĠĠĠĠĠ Ġreturn Ġobject : ĠPosition ed < T >() Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue (): ĠT Ġ= Ġthis Copy . getValue () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Position (): ĠPosition Ġ= Ġposition čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn ĠgetValue (). toString () Ġ+ Ġ" Ġ@ Ġ" Ġ+ Ġget Position (). getPosition String () čĊĠĠĠ Ġ} č Ċ } čĊ