internal string ToString(XmbVariantMemoryPool pool) { string result = ""; switch (Type) { case XmbVariantType.Single: { float f = Single; if (IsIndirect) { f = pool.GetSingle(Offset); } result = f.ToStringInvariant(Numbers.kFloatRoundTripFormatSpecifier); } break; case XmbVariantType.Int: { uint i = Int; if (IsIndirect) { i = pool.GetUInt32(Offset); } result = IsUnsigned ? i.ToString() : ((int)i).ToString(); } break; case XmbVariantType.Double: { double d = pool.GetDouble(Offset); result = d.ToStringInvariant(Numbers.kDoubleRoundTripFormatSpecifier); } break; case XmbVariantType.Bool: { // Phoenix uses lower case and Boolean.ToString uppercases the first letter result = Bool ? "true" : "false"; } break; case XmbVariantType.String: { result = StringToString(pool); } break; case XmbVariantType.Vector: { result = VectorToString(Offset, VectorLength, pool); } break; } return(result); }
static string VectorToString(uint offset, int length, XmbVariantMemoryPool pool) { float x = 0, y = 0, z = 0, w = 0; switch (length) { case 1: { x = pool.GetSingle(offset); } break; case 2: { var v = pool.GetVector2D(offset); x = v.X; y = v.Y; } break; case 3: { var v = pool.GetVector3D(offset); x = v.X; y = v.Y; z = v.Z; } break; case 4: { var v = pool.GetVector4D(offset); x = v.X; y = v.Y; z = v.Z; w = v.W; } break; default: throw new ArgumentOutOfRangeException("length", length.ToString()); } var vector = new BVector(x, y, z, w); return(vector.ToBVectorString(length)); }