using StgSharp.Control; using StgSharp.Math; using System; using System.Runtime.InteropServices; namespace StgSharp.Math { public class Vec4d { internal readonly M128Map _map; internal readonly IntPtr _m128Ptr; public unsafe float X { get { return (*(M128*)_m128Ptr).single_0; } set { (*(M128*)_m128Ptr).single_0 = value; } } public unsafe float Y { get { return (*(M128*)_m128Ptr).single_1; } set { (*(M128*)_m128Ptr).single_1 = value; } } public unsafe float Z { get { return (*(M128*)_m128Ptr).single_2; } set { (*(M128*)_m128Ptr).single_2 = value; } } public unsafe float W { get { return (*(M128*)_m128Ptr).single_3; } set { (*(M128*)_m128Ptr).single_3 = value; } } public Vec4d(float x, float y, float z, float w) { IntPtr a = internalIO.InternalInitM128(x,y,z,w); if ((ulong)a>=0) { this._m128Ptr = a; } } internal Vec4d() { _m128Ptr = internalIO.InternalInitM128(0,0,0,0); } public static Vec4d operator +(Vec4d vec1,Vec4d vec2) { Vec4d result = new Vec4d(); internalIO.VecAddVec(vec1._m128Ptr, vec2._m128Ptr/**/,result._m128Ptr/**/); return result; } /**/ public static Vec4d operator -(Vec4d vec1, Vec4d vec2) { Vec4d result = new Vec4d(); internalIO.VecSubVec(vec1._m128Ptr,vec2._m128Ptr,result._m128Ptr); return result; } /**/ public unsafe override string ToString() { return $"{*(M128*)_m128Ptr}"; } ~Vec4d() { if (_map == null) { internalIO.InternalDeinitM128(this._m128Ptr); } else { } } } }