Exemplo n.º 1
0
        /// <summary>
        /// Displays the fixed size array value members.
        /// </summary>
        /// <param name="signalText">The signal text.</param>
        /// <param name="indent">The indent.</param>
        /// <param name="valueName">Name of the value.</param>
        /// <param name="arrayTypeValue">The array type value.</param>
        /// <param name="arrayDefinition">The array definition.</param>
        private void DisplayFixedSizeArrayValueMembers(StringBuilder signalText, string indent, string valueName, ArrayTypeValue arrayTypeValue, ArrayTypeDefinition arrayDefinition)
        {
            // Set up a (N-1)-dimensional array to contain sub-arrays. The final Nth dimension holds
            // simple values rather than arrays.
            int[] indices = new int[arrayDefinition.Rank - 1];
            for (int i = 0; i < arrayDefinition.Rank - 1; i++)
            {
                indices[i] = arrayDefinition.UpperBound[i];
            }

            // Iterate over the indices array generating script to create the N-d array
            DepthFirstArrayIterator arrayCreationIterator = new DepthFirstArrayIterator(indices);
            foreach (var item in arrayCreationIterator)
            {
                StringBuilder itemIndexText = new StringBuilder(valueName);
                for (int j = 0; j < item.Length; j++)
                {
                    // Add 1 to index because Lua uses 1-based indices
                    itemIndexText.AppendFormat("[{0}]", item[j] + 1);
                }

                signalText.AppendFormat("{0}{1} = {{}}      -- create empty table/array\n", indent, itemIndexText);
            }

            // Iterate over the values
            arrayTypeValue.Iterate(
                (arrayValue, arrayIndices) =>
                {
                    StringBuilder itemIndexText = new StringBuilder(valueName);
                    for (int i = 0; i < arrayIndices.Length; i++)
                    {
                        // Add 1 to index because Lua uses 1-based indices
                        itemIndexText.AppendFormat("[{0}]", arrayIndices[i] + 1);
                    }

                    EncodeSignalElement(arrayValue, signalText, indent, itemIndexText.ToString());
                });
        }
Exemplo n.º 2
0
        /// <summary>
        /// Encodes the type of the array.
        /// </summary>
        /// <param name="arrayTypeValue">The array type value.</param>
        /// <param name="signalText">The signal text.</param>
        /// <param name="indent">The indent.</param>
        /// <param name="valueName">Name of the value.</param>
        private void EncodeArrayType(ArrayTypeValue arrayTypeValue, StringBuilder signalText, string indent, string valueName)
        {
            signalText.AppendFormat("{0}{1}:\n", indent, valueName);

            ArrayTypeDefinition arrayDefinition = arrayTypeValue.FundamentalType as ArrayTypeDefinition;

            if (arrayDefinition.Rank > 0)
            {
                DisplayFixedSizeArrayValueMembers(signalText, indent, valueName, arrayTypeValue, arrayDefinition);
            }
            else
            {
                DisplayVariableSizeArrayValueMembers(signalText, indent, valueName, arrayTypeValue, arrayDefinition);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Displays the variable size array value members.
        /// </summary>
        /// <param name="signalText">The signal text.</param>
        /// <param name="prefix">The prefix.</param>
        /// <param name="valueName">Name of the value.</param>
        /// <param name="arrayTypeValue">The array type value.</param>
        /// <param name="arrayDefinition">The array definition.</param>
        private void DisplayVariableSizeArrayValueMembers(StringBuilder signalText, string prefix, string valueName, ArrayTypeValue arrayTypeValue, ArrayTypeDefinition arrayDefinition)
        {
            // Iterate over the values (remembering Lua indices are 1-based
            int index = 1;
            foreach (var item in arrayTypeValue.Values)
            {
                StringBuilder itemIndexText = new StringBuilder(valueName);
                itemIndexText.AppendFormat("[{0}]", index);
                index += 1;

                EncodeSignalElement(item, signalText, prefix, itemIndexText.ToString());
            }
        }