package Ġgithub . j _ j zk . circ uits im . g ates Ċ Ċ import Ġjava . awt . Graphics Ċ Ċ class ĠToggle : ĠGate Ġ{ Ċ ĉ override Ġpublic Ġval Ġw Ġ= Ġ 2 5 Ċ ĉ override Ġpublic Ġval Ġh Ġ= Ġ 2 5 ĊĉĊ ĉ // this Ġvariable Ġtells Ġus Ġwhether Ġthe Ġstate Ġ( output ) Ġshould Ġchange Ġwhen Ġthe Ġinput 's Ġvalue Ġis Ġ 1 . Ċ ĉ // if Ġthe Ġinput Ġis Ġset Ġto Ġ 1 Ġand Ġit Ġstays Ġthat Ġway , Ġwe Ġdon 't Ġwant Ġthe Ġoutput Ġto Ġchange Ġwhen Ġupdate Value () Ġis Ġcalled . Ċ ĉ // if , Ġhowever , Ġthe Ġinput Ġchanges Ġto Ġ 0 , Ġwe Ġwant Ġto Ġtoggle Ġthe Ġoutput Ġvalue Ġthe Ġnext Ġtime Ġthe Ġinput Ġchanges Ġto Ġ 1 Ġagain . Ċ ĉ private Ġvar Ġchange State Ġ= Ġtrue ĊĉĊ ĉ override Ġpublic Ġfun Ġupdate Value () Ġ{ Ċĉ ĉ if Ġ( inputs . size Ġ> Ġ 0 ) Ġ{ Ċĉĉ ĉ if Ġ( inputs [ 0 ]. value Ġ== Ġtrue Ġ&& Ġchange State ) Ġ{ Ċĉĉĉ ĉ value Ġ= Ġ! value Ċĉĉĉ ĉ change State Ġ= Ġfalse ĊĉĉĉĉĊĉĉĉ ĉ for Ġ( output Ġin Ġoutputs ) Ġ{ Ċĉĉĉĉ ĉ output . update Value () Ċĉĉĉ ĉ } Ċĉĉ ĉ } Ġelse Ġif Ġ( inputs [ 0 ]. value Ġ== Ġfalse ) Ġ{ Ċĉĉĉ ĉ // the Ġnext Ġtime Ġthe Ġinput Ġchanges Ġto Ġ 1 , Ġwe Ġwant Ġto Ġtoggle Ġthe Ġstate Ċĉĉĉ ĉ change State Ġ= Ġtrue Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } ĊĉĊ ĉ override Ġpublic Ġfun Ġrender ( g : ĠGraphics ) Ġ{ Ċĉ ĉ g . draw Rect ( x , Ġy , Ġw , Ġh ) ĊĉĉĊĉ ĉ // the Ġswitch 's Ġpivot Ċĉ ĉ g . fill O val ( x + 1 0 , Ġy + 1 0 , Ġ 5 , Ġ 5 ) ĊĉĉĊĉ ĉ // the Ġswitch 's Ġhandle Ċĉ ĉ if Ġ( value Ġ== Ġtrue ) Ċĉĉ ĉ g . draw Line ( x + 4 , Ġy + 4 , Ġx + 2 1 , Ġy + 2 1 ) Ċĉ ĉ else Ċĉĉ ĉ g . draw Line ( x + 4 , Ġy + 2 1 , Ġx + 2 1 , Ġy + 4 ) Ċ ĉ } ĊĉĉĊ ĉ constructor ( s : ĠString ) Ġ: Ġsuper ( 0 , Ġ 0 ) Ġ{ Ċĉ ĉ val Ġ( x _, Ġy _, Ġvalue _, Ġchange State _) Ġ= Ġs . split (' Ġ') Ċĉ ĉ x Ġ= Ġx _. toInt () Ċĉ ĉ y Ġ= Ġy _. toInt () Ċĉ ĉ value Ġ= Ġvalue _ Ġ== Ġ" 1 " Ċĉ ĉ change State Ġ= Ġchange State _ Ġ== Ġ" 1 " Ċ ĉ } ĊĉĊ ĉ override Ġfun ĠtoString () Ġ= Ċĉ ĉ " Toggle Ġ$ x Ġ$ y Ġ" Ġ+ Ċĉ ĉ if Ġ( value ) Ġ" 1 " Ġelse Ġ" 0 " Ġ+ Ċĉ ĉ " Ġ" Ġ+ Ġif Ġ( change State ) Ġ" 1 " Ġelse Ġ" 0 " ĊĉĊ ĉ constructor ( x : ĠInt , Ġy : ĠInt ) Ġ: Ġsuper ( x , Ġy ) Ċ }