public override bool Write(IDataModel model, ModelDelta token, int start, ref string data)
        {
            var parts = data.Split(new[] { "(", ")", " " }, StringSplitOptions.RemoveEmptyEntries).ToList();

            TableStreamRun.Recombine(parts, "\"", "\"");
            data = string.Empty;
            if (parts.Count != VisibleElementCount)
            {
                return(false);
            }
            int  bitOffset  = 0;
            int  partIndex  = 0;
            bool anyChanges = false;

            for (int i = 0; i < Elements.Count; i++)
            {
                if (string.IsNullOrEmpty(Elements[i].Name))
                {
                    // Unnamed segments. I should increment, and  bitOffset should increase, but the value should change to zero.
                    anyChanges |= Elements[i].Write(model, token, start, bitOffset, 0);
                    partIndex  -= 1;
                }
                else if (!string.IsNullOrEmpty(Elements[i].SourceName))
                {
                    if (ArrayRunEnumSegment.TryParse(Elements[i].SourceName, model, parts[partIndex], out int value))
                    {
                        anyChanges |= Elements[i].Write(model, token, start, bitOffset, value);
                    }
                }
                else if (Elements[i].BitWidth == 1)
                {
                    if (bool.TryParse(parts[partIndex], out bool value))
                    {
                        anyChanges |= Elements[i].Write(model, token, start, bitOffset, value ? 1 : 0);
                    }
                }
                else
                {
                    if (int.TryParse(parts[partIndex], out int value))
                    {
                        anyChanges |= Elements[i].Write(model, token, start, bitOffset, value);
                    }
                }

                partIndex += 1;
                bitOffset += Elements[i].BitWidth;
            }

            var remainingBits = Length * 8 - bitOffset;

            if (remainingBits > 0)
            {
                anyChanges |= new TupleSegment(string.Empty, remainingBits).Write(model, token, start, bitOffset, 0);
            }

            return(anyChanges);
        }
Esempio n. 2
0
        public int Convert(IDataModel model, string value)
        {
            int result;

            if (string.IsNullOrEmpty(EnumTableName))
            {
                if (int.TryParse(value, NumberStyles.HexNumber, CultureInfo.CurrentCulture, out result))
                {
                    return(result);
                }
                return(0);
            }
            if (ArrayRunEnumSegment.TryParse(EnumTableName, model, value, out result))
            {
                return(result);
            }
            return(0);
        }