예제 #1
0
        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);
        }
예제 #2
0
        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));
        }