package Ġglm _. vec 1 . operators Ċ Ċ import Ġglm _. i Ċ import Ġglm _. vec 1 . Vec 1 i Ċ import Ġglm _. vec 1 . Vec 1 i . Companion . div Ċ import Ġglm _. vec 1 . Vec 1 i . Companion . minus Ċ import Ġglm _. vec 1 . Vec 1 i . Companion . plus Ċ import Ġglm _. vec 1 . Vec 1 i . Companion . rem Ċ import Ġglm _. vec 1 . Vec 1 i . Companion . times Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠG Bar b ier i Ġon Ġ 0 8 . 1 1 . 2 0 1 6 . Ċ Ġ*/ Ċ interface Ġop Vec 1 i Ġ{ ĊĊĠĠĠ Ġfun Ġplus ( res : ĠVec 1 i , Ġa : ĠVec 1 i , Ġb X : ĠInt ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x Ġ+ Ġb X ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġminus ( res : ĠVec 1 i , Ġa : ĠVec 1 i , Ġb X : ĠInt ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x Ġ- Ġb X ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġminus ( res : ĠVec 1 i , Ġa X : ĠInt , Ġb : ĠVec 1 i ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa X Ġ- Ġb . x ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtimes ( res : ĠVec 1 i , Ġa : ĠVec 1 i , Ġb X : ĠInt ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x Ġ* Ġb X ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdiv ( res : ĠVec 1 i , Ġa : ĠVec 1 i , Ġb X : ĠInt ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x Ġ/ Ġb X ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdiv ( res : ĠVec 1 i , Ġa X : ĠInt , Ġb : ĠVec 1 i ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa X Ġ/ Ġb . x ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrem ( res : ĠVec 1 i , Ġa : ĠVec 1 i , Ġb X : ĠInt ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x Ġ% Ġb X ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrem ( res : ĠVec 1 i , Ġa X : ĠInt , Ġb : ĠVec 1 i ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa X Ġ% Ġb . x ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġand ( res : ĠVec 1 i , Ġa : ĠVec 1 i , Ġb X : ĠInt ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x Ġand Ġb X ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġor ( res : ĠVec 1 i , Ġa : ĠVec 1 i , Ġb X : ĠInt ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x Ġor Ġb X ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġxor ( res : ĠVec 1 i , Ġa : ĠVec 1 i , Ġb X : ĠInt ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x Ġxor Ġb X ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshl ( res : ĠVec 1 i , Ġa : ĠVec 1 i , Ġb X : ĠInt ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x Ġshl Ġb X ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshr ( res : ĠVec 1 i , Ġa : ĠVec 1 i , Ġb X : ĠInt ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x Ġshr Ġb X ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO Ġothers ĊĠĠĠ Ġfun Ġ ush r ( res : ĠVec 1 i , Ġa : ĠVec 1 i , Ġb X : ĠInt ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x Ġ ush r Ġb X ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinv ( res : ĠVec 1 i , Ġa : ĠVec 1 i ): ĠVec 1 i Ġ{ ĊĠĠĠĠĠĠĠ Ġres . x Ġ= Ġa . x . inv () ĊĠĠĠĠĠĠĠ Ġreturn Ġres ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ // Ġ-- ĠSpecific Ġbinary Ġarithmetic Ġoperators Ġ-- Ċ Ċ infix Ġoperator Ġfun ĠInt . plus ( b : ĠVec 1 i ) Ġ= Ġplus ( Vec 1 i (), Ġb , Ġthis ) Ċ fun ĠInt . plus ( b : ĠVec 1 i , Ġres : ĠVec 1 i ) Ġ= Ġplus ( res , Ġb , Ġthis ) Ċ infix Ġfun ĠInt . plus Assign ( b : ĠVec 1 i ) Ġ= Ġplus ( b , Ġb , Ġthis ) Ċ Ċ infix Ġoperator Ġfun ĠInt . minus ( b : ĠVec 1 i ) Ġ= Ġminus ( Vec 1 i (), Ġthis , Ġb ) Ċ fun ĠInt . minus ( b : ĠVec 1 i , Ġres : ĠVec 1 i ) Ġ= Ġminus ( res , Ġb , Ġthis ) Ċ infix Ġfun ĠInt . minus Assign ( b : ĠVec 1 i ) Ġ= Ġminus ( b , Ġthis , Ġb ) Ċ Ċ infix Ġoperator Ġfun ĠInt . times ( b : ĠVec 1 i ) Ġ= Ġtimes ( Vec 1 i (), Ġb , Ġthis ) Ċ fun ĠInt . times ( b : ĠVec 1 i , Ġres : ĠVec 1 i ) Ġ= Ġtimes ( res , Ġb , Ġthis ) Ċ infix Ġfun ĠInt . times Assign ( b : ĠVec 1 i ) Ġ= Ġtimes ( b , Ġb , Ġthis ) Ċ Ċ infix Ġoperator Ġfun ĠInt . div ( b : ĠVec 1 i ) Ġ= Ġdiv ( Vec 1 i (), Ġthis , Ġb ) Ċ fun ĠInt . div ( b : ĠVec 1 i , Ġres : ĠVec 1 i ) Ġ= Ġdiv ( res , Ġb , Ġthis ) Ċ infix Ġfun ĠInt . div Assign ( b : ĠVec 1 i ) Ġ= Ġdiv ( b , Ġthis , Ġb ) Ċ Ċ infix Ġoperator Ġfun ĠInt . rem ( b : ĠVec 1 i ) Ġ= Ġrem ( Vec 1 i (), Ġthis , Ġb ) Ċ fun ĠInt . rem ( b : ĠVec 1 i , Ġres : ĠVec 1 i ) Ġ= Ġrem ( res , Ġb , Ġthis ) Ċ infix Ġfun ĠInt . rem Assign ( b : ĠVec 1 i ) Ġ= Ġrem ( b , Ġthis , Ġb ) ĊĊ Ċ // Ġ-- ĠGeneric Ġbinary Ġarithmetic Ġoperators Ġ-- Ċ Ċ infix Ġoperator Ġfun ĠNumber . plus ( b : ĠVec 1 i ) Ġ= Ġplus ( Vec 1 i (), Ġb , Ġthis . i ) Ċ fun ĠNumber . plus ( b : ĠVec 1 i , Ġres : ĠVec 1 i ) Ġ= Ġplus ( res , Ġb , Ġthis . i ) Ċ infix Ġfun ĠNumber . plus Assign ( b : ĠVec 1 i ) Ġ= Ġplus ( b , Ġb , Ġthis . i ) Ċ Ċ infix Ġoperator Ġfun ĠNumber . minus ( b : ĠVec 1 i ) Ġ= Ġminus ( Vec 1 i (), Ġthis . i , Ġb ) Ċ fun ĠNumber . minus ( b : ĠVec 1 i , Ġres : ĠVec 1 i ) Ġ= Ġminus ( res , Ġb , Ġthis . i ) Ċ infix Ġfun ĠNumber . minus Assign ( b : ĠVec 1 i ) Ġ= Ġminus ( b , Ġthis . i , Ġb ) Ċ Ċ infix Ġoperator Ġfun ĠNumber . times ( b : ĠVec 1 i ) Ġ= Ġtimes ( Vec 1 i (), Ġb , Ġthis . i ) Ċ fun ĠNumber . times ( b : ĠVec 1 i , Ġres : ĠVec 1 i ) Ġ= Ġtimes ( res , Ġb , Ġthis . i ) Ċ infix Ġfun ĠNumber . times Assign ( b : ĠVec 1 i ) Ġ= Ġtimes ( b , Ġb , Ġthis . i ) Ċ Ċ infix Ġoperator Ġfun ĠNumber . div ( b : ĠVec 1 i ) Ġ= Ġdiv ( Vec 1 i (), Ġthis . i , Ġb ) Ċ fun ĠNumber . div ( b : ĠVec 1 i , Ġres : ĠVec 1 i ) Ġ= Ġdiv ( res , Ġb , Ġthis . i ) Ċ infix Ġfun ĠNumber . div Assign ( b : ĠVec 1 i ) Ġ= Ġdiv ( b , Ġthis . i , Ġb ) Ċ Ċ infix Ġoperator Ġfun ĠNumber . rem ( b : ĠVec 1 i ) Ġ= Ġrem ( Vec 1 i (), Ġthis . i , Ġb ) Ċ fun ĠNumber . rem ( b : ĠVec 1 i , Ġres : ĠVec 1 i ) Ġ= Ġrem ( res , Ġb , Ġthis . i ) Ċ infix Ġfun ĠNumber . rem Assign ( b : ĠVec 1 i ) Ġ= Ġrem ( b , Ġthis . i , Ġb )