/// <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()); }); }
/// <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); } }
/// <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()); } }