Esempio n. 1
0
        public static bool StreamBVector <TDoc, TCursor>(this IO.TagElementStream <TDoc, TCursor, string> s
                                                         , string xmlName, ref BVector vector
                                                         , bool isOptional = true, IO.TagElementNodeType xmlSource = XML.XmlUtil.kSourceElement)
            where TDoc : class
            where TCursor : class
        {
            Contract.Requires(xmlSource.RequiresName() == (xmlName != XML.XmlUtil.kNoXmlName));

            string     string_value = null;
            bool       was_streamed = true;
            const bool to_lower     = false;

            if (s.IsReading)
            {
                if (isOptional)
                {
                    was_streamed = s.StreamStringOpt(xmlName, ref string_value, to_lower, xmlSource);
                }
                else
                {
                    s.StreamString(xmlName, ref string_value, to_lower, xmlSource);
                }

                if (was_streamed)
                {
                    var parse_result = PhxUtil.ParseBVectorString(string_value);
                    if (!parse_result.HasValue)
                    {
                        s.ThrowReadException(new System.IO.InvalidDataException(string.Format(
                                                                                    "Failed to parse value (hint: {0}) as vector: {1}",
                                                                                    xmlSource.RequiresName() ? xmlName : "ElementText",
                                                                                    string_value)));
                    }

                    vector = parse_result.Value;
                }
            }
            else if (s.IsWriting)
            {
                if (isOptional && PhxPredicates.IsZero(vector))
                {
                    was_streamed = false;
                    return(was_streamed);
                }

                string_value = vector.ToBVectorString();

                if (isOptional)
                {
                    s.StreamStringOpt(xmlName, ref string_value, to_lower, xmlSource);
                }
                else
                {
                    s.StreamString(xmlName, ref string_value, to_lower, xmlSource);
                }
            }

            return(was_streamed);
        }
Esempio n. 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));
        }