<> <> <> <<>> <> <<>> 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]] }; <> 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.