예제 #1
0
        public static StructureDescription Decode(Stream inputStream)
        {
            if (inputStream == null || !inputStream.CanRead)
            {
                return(null);
            }
            StructureDescription instance = new StructureDescription();

            instance.DataTypeId      = NodeID.Decode(inputStream);
            instance.Name            = QualifiedName.Decode(inputStream);
            instance.DefaultEncoding = NodeID.Decode(inputStream);
            instance.BaseDataType    = NodeID.Decode(inputStream);
            int?readInt32 = BaseType.ReadInt32(inputStream);

            if (readInt32 != null)
            {
                instance.StructureType = readInt32.Value;
            }
            int?int32 = BaseType.ReadInt32(inputStream);

            if (int32 == null)
            {
                return(instance);
            }
            instance.Fields = new List <StructureField>();
            int fieldsLength = int32.Value;

            for (int i = 0; i < fieldsLength; i++)
            {
                instance.Fields.Add(StructureField.Decode(inputStream));
            }
            return(instance);
        }
        public static EnumDescription Decode(Stream inputStream)
        {
            if (inputStream == null)
            {
                return(null);
            }
            EnumDescription instance = new EnumDescription();

            instance.DataTypeID = NodeID.Decode(inputStream);
            instance.Name       = QualifiedName.Decode(inputStream);
            int?arraySize = BaseType.ReadInt32(inputStream);

            if (!arraySize.HasValue)
            {
                return(null);
            }
            if (arraySize.Value < 0)
            {
                return(instance);
            }
            instance.Fields = new List <EnumField>(arraySize.Value + 1);
            for (int i = 0; i < arraySize.Value; i++)
            {
                instance.Fields.Add(EnumField.Decode(inputStream));
            }
            instance.Type = (BuiltinType)inputStream.ReadByte();
            return(instance);
        }
예제 #3
0
        public static KeyValuePair Decode(Stream inputStream)
        {
            KeyValuePair instance = new KeyValuePair();

            instance.Name      = QualifiedName.Decode(inputStream);
            instance.ValueType = (BuiltinType)inputStream.ReadByte();
            if (!ReadBuiltinTypeValue(instance.ValueType, inputStream, out object parsedValue))
            {
                return(null);
            }
            if (instance.ValueType == BuiltinType.String)
            {
                // strings always as UADP.String types in Value of KeyValuePair
                instance.Value = new String(parsedValue as string);
            }
            else
            {
                instance.Value = parsedValue;
            }
            return(instance);
        }