/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 ĠMark ĠF air child . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġres aver . pex Ċ Ċ import ĠPlatform ByteBuffer Ċ import ĠUtility Functions Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠDescri bes Ġthe Ġdifferent Ġop codes Ġthat Ġcan Ġappear Ġin ĠP EX Ġfunctions , Ġand Ġstores Ċ Ġ* Ġthe Ġnumber Ġof Ġarguments Ġthat Ġthey Ġaccept . ĠIf Ġthe Ġnumber Ġof Ġarguments Ġis Ċ Ġ* Ġnegative , Ġit Ġindicates Ġthat Ġa Ġvariable Ġnumber Ġof Ġarguments Ġcan Ġfollow Ġthe Ċ Ġ* Ġmain Ġarguments . Ċ Ġ* Ċ Ġ* Ġ@ author ĠMark ĠF air child Ċ Ġ*/ Ċ enum Ġclass ĠOpcode ( val ĠARGS : ĠInt ) Ġ{ ĊĠĠĠ ĠN OP ( 0 ), Ġ Ġ// Ġ 0 ĠĠĠĠ 0 0 ĊĠĠĠ ĠI ADD ( 3 ), Ġ Ġ// Ġ 1 ĠĠĠĠ 0 1 ĊĠĠĠ ĠF ADD ( 3 ), Ġ Ġ// Ġ 2 ĠĠĠĠ 0 2 ĊĠĠĠ ĠIS UB ( 3 ), Ġ Ġ// Ġ 3 ĠĠĠĠ 0 3 ĊĠĠĠ ĠF SUB ( 3 ), Ġ Ġ// Ġ 4 ĠĠĠĠ 0 4 ĊĠĠĠ ĠI MUL ( 3 ), Ġ Ġ// Ġ 5 ĠĠĠĠ 0 5 ĊĠĠĠ ĠF MUL ( 3 ), Ġ Ġ// Ġ 6 ĠĠĠĠ 0 6 ĊĠĠĠ ĠI DIV ( 3 ), Ġ Ġ// Ġ 7 ĠĠĠĠ 0 7 ĊĠĠĠ ĠF DIV ( 3 ), Ġ Ġ// Ġ 8 ĠĠĠĠ 0 8 ĊĠĠĠ ĠI MOD ( 3 ), Ġ Ġ// Ġ 9 ĠĠĠĠ 0 9 ĊĠĠĠ ĠNOT ( 2 ), Ġ Ġ// Ġ 1 0 ĠĠĠ 0 a ĊĠĠĠ ĠIN EG ( 2 ), Ġ Ġ// Ġ 1 1 ĠĠĠ 0 b ĊĠĠĠ ĠF NEG ( 2 ), Ġ Ġ// Ġ 1 2 ĠĠĠ 0 c ĊĠĠĠ ĠASS IGN ( 2 ), Ġ Ġ// Ġ 1 3 ĠĠĠ 0 d ĊĠĠĠ ĠCAST ( 2 ), Ġ Ġ// Ġ 1 4 ĠĠĠ 0 e ĊĠĠĠ ĠCMP _ EQ ( 3 ), Ġ Ġ// Ġ 1 5 ĠĠĠ 0 f ĊĠĠĠ ĠCMP _ LT ( 3 ), Ġ Ġ// Ġ 1 6 ĠĠĠ 1 0 ĊĠĠĠ ĠCMP _ LE ( 3 ), Ġ Ġ// Ġ 1 7 ĠĠĠ 1 1 ĊĠĠĠ ĠCMP _ GT ( 3 ), Ġ Ġ// Ġ 1 8 ĠĠĠ 1 2 ĊĠĠĠ ĠCMP _ GE ( 3 ), Ġ Ġ// Ġ 1 9 ĠĠĠ 1 3 ĊĠĠĠ ĠJMP ( 1 ), Ġ Ġ// Ġ 2 0 ĠĠĠ 1 4 ĊĠĠĠ ĠJ MPT ( 2 ), Ġ Ġ// Ġ 2 1 ĠĠĠ 1 5 ĊĠĠĠ ĠJMP F ( 2 ), Ġ Ġ// Ġ 2 2 ĠĠĠ 1 6 ĊĠĠĠ ĠCALL METHOD (- 3 ), Ġ Ġ// Ġ 2 3 ĠĠĠ 1 7 ĊĠĠĠ ĠCALL PARENT (- 2 ), Ġ Ġ// Ġ 2 4 ĠĠĠ 1 8 ĊĠĠĠ ĠCALL STATIC (- 3 ), Ġ Ġ// Ġ 2 5 ĠĠĠ 1 9 ĊĠĠĠ ĠRETURN ( 1 ), Ġ Ġ// Ġ 2 6 ĠĠĠ 1 a ĊĠĠĠ ĠSTR CAT ( 3 ), Ġ Ġ// Ġ 2 7 ĠĠĠ 1 b ĊĠĠĠ ĠPROP GET ( 3 ), Ġ Ġ// Ġ 2 8 ĠĠĠ 1 c ĊĠĠĠ ĠPROP SET ( 3 ), Ġ Ġ// Ġ 2 9 ĠĠĠ 1 d ĊĠĠĠ ĠARR _ CREATE ( 2 ), Ġ Ġ// Ġ 3 0 ĠĠĠ 1 e ĊĠĠĠ ĠARR _ LENGTH ( 2 ), Ġ Ġ// Ġ 3 1 ĠĠĠ 1 f ĊĠĠĠ ĠARR _ GET ( 3 ), Ġ Ġ// Ġ 3 2 ĠĠĠ 2 0 ĊĠĠĠ ĠARR _ SET ( 3 ), Ġ Ġ// Ġ 3 3 ĠĠĠ 2 1 ĊĠĠĠ ĠARR _ FIND ( 4 ), Ġ Ġ// Ġ 3 4 ĠĠĠ 2 2 ĊĠĠĠ ĠARR _ RF IND ( 4 ), Ġ Ġ// Ġ 3 5 ĠĠĠ 2 3 ĊĠĠĠ ĠIS ( 3 ), Ġ Ġ// Ġ 3 6 ĠĠĠ 2 4 ĊĠĠĠ ĠSTR UCT _ CREATE ( 1 ), Ġ Ġ// Ġ 3 7 ĠĠĠ 2 5 ĊĠĠĠ ĠSTR UCT _ GET ( 3 ), Ġ Ġ// Ġ 3 8 ĠĠĠ 2 6 ĊĠĠĠ ĠSTR UCT _ SET ( 3 ), Ġ Ġ// Ġ 3 9 ĠĠĠ 2 7 ĊĠĠĠ ĠARR _ STRUCT _ FIND ( 5 ), Ġ Ġ// Ġ 4 0 ĠĠĠ 2 8 ĊĠĠĠ ĠARR _ STRUCT _ RF IND ( 3 ), Ġ Ġ// Ġ 4 1 ĠĠĠ 2 9 ĊĠĠĠ ĠARR _ ADD ( 3 ), Ġ Ġ// Ġ 4 2 ĠĠĠ 2 a ĊĠĠĠ ĠARR _ INSERT ( 3 ), Ġ Ġ// Ġ 4 3 ĠĠĠ 2 b ĊĠĠĠ ĠARR _ REMOVE _ LAST ( 1 ), Ġ Ġ// Ġ 4 4 ĠĠĠ 2 c ĊĠĠĠ ĠARR _ REMOVE ( 3 ), Ġ Ġ// Ġ 4 5 ĠĠĠ 2 d ĊĠĠĠ ĠARR _ CLEAR ( 1 ), Ġ Ġ// Ġ 4 6 ĠĠĠ 2 e ĊĠĠĠ ĠARR _ GET _ MATCH ING ( 6 ); ĊĊĠĠĠ Ġ// Ġ 4 7 ĠĠ 2 f ĊĠĠĠ Ġval Ġis Conditional : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġ== ĠJ MPT Ġ|| Ġthis Ġ== ĠJMP F ĊĠĠĠ Ġval Ġis Branch ing : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġ== ĠJ MPT Ġ|| Ġthis Ġ== ĠJMP F Ġ|| Ġthis Ġ== ĠJMP ĊĠĠĠ Ġval Ġis Arithmetic : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis Ġ== ĠI ADD Ġ|| Ġthis Ġ== ĠF ADD Ġ|| Ġthis Ġ== ĠIS UB Ġ|| Ġthis Ġ== ĠF SUB Ġ|| Ġthis Ġ== ĠI MUL Ġ|| Ġthis Ġ== ĠF MUL Ġ|| Ġthis Ġ== ĠI DIV Ġ|| Ġthis Ġ== ĠF DIV Ġ|| Ġthis Ġ== ĠI MOD ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠA Ġflag Ġindicating Ġwhether Ġthe Ġ` Opcode ` Ġtakes Ġa ĊĠĠĠĠ Ġ* Ġvariable Ġnumber Ġof Ġarguments . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Extra Terms (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠARGS Ġ< Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġnumber Ġof Ġfixed Ġterms . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġfixed Count : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( has Extra Terms ()) Ġ 1 Ġ- ĠARGS Ġelse ĠARGS ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRead Ġa Ġ` DataType ` Ġfrom Ġan Ġinput Ġstream . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġinput ĠThe Ġinput Ġstream . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠThe Ġ` DataType `. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġread ( input : ĠPlatform ByteBuffer ): ĠOpcode Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= ĠUtility Functions . to Unsigned Int ( input . getByte ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġ 0 Ġ|| Ġindex Ġ>= ĠVALUES . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Invalid ĠOpcode .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVALUES [ index ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠVALUES Ġ= Ġvalues () ĊĠĠĠ Ġ} Ċ }