<> <> <> <<>> <> <<>> Vector2: CEDAR DEFINITIONS ~ BEGIN VEC: TYPE ~ RECORD [x, y: REAL]; Add: PROC [v1, v2: VEC] RETURNS [VEC]; InlineAdd: PROC [v1, v2: VEC] RETURNS [VEC] ~ INLINE { RETURN[[v1.x+v2.x, v1.y+v2.y]] }; <> Sub: PROC [v1, v2: VEC] RETURNS [VEC]; InlineSub: PROC [v1, v2: VEC] RETURNS [VEC] ~ INLINE { RETURN[[v1.x-v2.x, v1.y-v2.y]] }; <> Neg: PROC [v: VEC] RETURNS [VEC]; InlineNeg: PROC [v: VEC] RETURNS [VEC] ~ INLINE { RETURN[[-v.x, -v.y]] }; <> Mul: PROC [v: VEC, s: REAL] RETURNS [VEC]; InlineMul: PROC [v: VEC, s: REAL] RETURNS [VEC] ~ INLINE { RETURN[[v.x*s, v.y*s]] }; <> Div: PROC [v: VEC, s: REAL] RETURNS [VEC]; InlineDiv: PROC [v: VEC, s: REAL] RETURNS [VEC] ~ INLINE { RETURN[[v.x/s, v.y/s]] }; <> Equal: PROC [v1, v2: VEC] RETURNS [BOOL]; InlineEqual: PROC [v1, v2: VEC] RETURNS [BOOL] ~ INLINE { RETURN[v1.x=v2.x AND v1.y=v2.y] }; <> <<>> MulC: PROC [v1, v2: VEC] RETURNS [VEC]; InlineMulC: PROC [v1, v2: VEC] RETURNS [VEC] ~ INLINE { RETURN[[v1.x*v2.x, v1.y*v2.y]] }; <> DivC: PROC [v1, v2: VEC] RETURNS [VEC]; InlineDivC: PROC [v1, v2: VEC] RETURNS [VEC] ~ INLINE { RETURN[[v1.x/v2.x, v1.y/v2.y]] }; <> Dot: PROC [v1, v2: VEC] RETURNS [REAL]; InlineDot: PROC [v1, v2: VEC] RETURNS [REAL] ~ INLINE { RETURN[v1.x*v2.x+v1.y*v2.y] }; <> Cross: PROC [v1, v2: VEC] RETURNS [REAL]; InlineCross: PROC [v1, v2: VEC] RETURNS [REAL] ~ INLINE { RETURN[v1.x*v2.y-v1.y*v2.x] }; <> <<>> Square: PROC [v: VEC] RETURNS [REAL]; InlineSquare: PROC [v: VEC] RETURNS [REAL] ~ INLINE { RETURN[v.x*v.x+v.y*v.y] }; <> <<>> Length: PROC [v: VEC] RETURNS [REAL]; <> <<>> Unit: PROC [v: VEC] RETURNS [VEC]; <> <<>> END.