package Ġl zw . lib Ċ Ċ class ĠToken Registry ( size : ĠInt ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ tokens To Codes Ġ= Ġmutable Map Of < String , ĠInt >() ĊĠĠĠ Ġprivate Ġval Ġ_ codes To Tokens Ġ= Ġmutable Map Of < Int , ĠString >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( code Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ tokens To Codes [" ${ code . to Char ()} "] Ġ= Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ codes To Tokens [ code ] Ġ= Ġ"${ code . to Char () }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Token ( token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( token Ġin Ġ_ tokens To Codes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" token Ġ'$ token ' Ġexist Ġin Ġregistry ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġ_ tokens To Codes . size ĊĊĠĠĠĠĠĠĠ Ġif Ġ( code Ġin Ġ_ codes To Tokens ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException () ĊĊĠĠĠĠĠĠĠ Ġ_ tokens To Codes [ token ] Ġ= Ġcode ĊĠĠĠĠĠĠĠ Ġ_ codes To Tokens [ code ] Ġ= Ġtoken ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Token ( token : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtoken Ġin Ġ_ tokens To Codes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Code ( code : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcode Ġin Ġ_ codes To Tokens ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetToken ( code : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġ_ codes To Tokens [ code ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( token Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNoSuch ElementException () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtoken ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Code ( token : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġ_ tokens To Codes [ token ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( code Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNoSuch ElementException () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcode ĊĠĠĠ Ġ} Ċ }