Exemplo n.º 1
0
        /// <summary>
        /// Create a new Format object from a string
        /// </summary>
        /// <param name="format">The format string</param>
        internal Format(string format)
        {
            FormatString = format;
            ElementsArray         currentLevel = Root;
            Stack <ElementsArray> levels       = new Stack <ElementsArray>();

            // Inflate the format
            for (int i = 0; i < format.Length; i++)
            {
                switch (format[i])
                {
                case '(':
                    // New level of parentheses
                    ElementsArray newLevel = new ElementsArray();
                    currentLevel.Elements.Add(newLevel);
                    levels.Push(currentLevel);
                    currentLevel = newLevel;
                    break;

                case ')':
                    if (currentLevel == Root)
                    {
                        // Unbalanced parentheses
                        throw new ArgumentException("Invalid format string: " + format);
                    }
                    currentLevel = levels.Count == 0 ? Root : levels.Pop();
                    break;

                case 'u':
                    currentLevel.Elements.Add(new LeafElement(Element.Type.UINT));
                    break;

                case 'i':
                    currentLevel.Elements.Add(new LeafElement(Element.Type.INT));
                    break;

                case 'f':
                    currentLevel.Elements.Add(new LeafElement(Element.Type.FLOAT));
                    break;

                case 't':
                    currentLevel.Elements.Add(new LeafElement(Element.Type.TOKEN));
                    break;

                case 's':
                    currentLevel.Elements.Add(new LeafElement(Element.Type.STRING));
                    break;

                default:
                    // Invalid character
                    throw new ArgumentException("Invalid format string: " + format);
                }
            }

            // Check if the format has balanced parentheses
            if (currentLevel != Root)
            {
                throw new ArgumentException("Invalid format string: " + format);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Create a new Format object from a string
        /// </summary>
        /// <param name="format">The format string</param>
        internal Format(string format)
        {
            FormatString = format;
            ElementsArray currentLevel = Root;
            Stack<ElementsArray> levels = new Stack<ElementsArray>();

            // Inflate the format
            for (int i = 0; i < format.Length; i++) {
                switch (format[i]) {
                    case '(':
                        // New level of parentheses
                        ElementsArray newLevel = new ElementsArray();
                        currentLevel.Elements.Add(newLevel);
                        levels.Push(currentLevel);
                        currentLevel = newLevel;
                        break;
                    case ')':
                        if (currentLevel == Root)
                            // Unbalanced parentheses
                            throw new ArgumentException("Invalid format string: " + format);
                        currentLevel = levels.Count == 0 ? Root : levels.Pop();
                        break;
                    case 'u':
                        currentLevel.Elements.Add(new LeafElement(Element.Type.UINT));
                        break;
                    case 'i':
                        currentLevel.Elements.Add(new LeafElement(Element.Type.INT));
                        break;
                    case 'f':
                        currentLevel.Elements.Add(new LeafElement(Element.Type.FLOAT));
                        break;
                    case 't':
                        currentLevel.Elements.Add(new LeafElement(Element.Type.TOKEN));
                        break;
                    case 's':
                        currentLevel.Elements.Add(new LeafElement(Element.Type.STRING));
                        break;
                    default:
                        // Invalid character
                        throw new ArgumentException("Invalid format string: "+format);
                }
            }

            // Check if the format has balanced parentheses
            if (currentLevel != Root)
                throw new ArgumentException("Invalid format string: " + format);
        }