Пример #1
0
        public static bool Load([NotNull] this SerializedPropertyStorage obj, BinaryReader reader)
        {
            obj.StorageSize = reader.ReadInt32();

            if (obj.StorageSize == 0)
            {
                return(true);
            }

            obj.Version  = reader.ReadInt32();
            obj.FormatID = reader.ReadGuid();

            var ok = true;

            while (true)
            {
                // TODO
                // Error tolerance:
                //  To be error tolerant, we will behave as if the binary sequence
                // was a string and we were to apply the following regex:
                //      ^(ByName|ById)*$
                // This means that we will backtrack to try to find alternatives.

                // At this moment what we have is:
                // - No backtracking
                // - Test by name, and if it fails, read by id

                var namedValue = new SerializedPropertyValueByName();
                var ok2        = namedValue.Load(reader);
                SerializedPropertyValue value = namedValue;
                if (!ok2)
                {
                    var identifiedValue = new SerializedPropertyValueById();
                    ok2   = identifiedValue.Load(reader);
                    value = identifiedValue;
                }

                ok &= ok2;

                obj.SerializedPropertyValues.Add(value);

                if (value.ValueSize == 0)
                {
                    break;
                }
            }

            return(ok);
        }
Пример #2
0
        public static bool Load([NotNull] this SerializedPropertyValueById obj, BinaryReader reader)
        {
            obj.ValueSize = reader.ReadInt32();

            if (obj.ValueSize == 0)
            {
                return(true);
            }

            obj.Id = reader.ReadInt32();

            obj.Reserved = reader.ReadByte();

            var remainingBytes = obj.ValueSize - 4 - 4 - 1;

            obj.Value = reader.ReadBytes(remainingBytes);

            return(true);
        }