/// <summary> /// Returns the native type name corresponding to the specified data type name. /// </summary> /// <param name="dataTypeName"> /// the data type name /// </param> /// <returns> /// the corresponding native type name /// </returns> private String NativeTypeForDataType(System.String dataTypeName) { if (dataTypeName == null || dataTypeName.Equals("HLAopaqueData") || opaqueTypes.Contains(dataTypeName)) { return("byte[]"); } else if (dataTypeName.Equals("NA")) { return(null); } else if (dataTypeName.Equals("HLAASCIIchar") || dataTypeName.Equals("HLAunicodeChar")) { return("char"); } else if (dataTypeName.Equals("HLAboolean")) { return("bool"); } else if (dataTypeName.Equals("HLAASCIIstring") || dataTypeName.Equals("HLAunicodeString")) { return("String"); } else if (descriptorManager.SimpleDataTypeMap.ContainsKey(dataTypeName)) { return(NativeTypeForBasicRepresentation(descriptorManager.SimpleDataTypeMap[dataTypeName].Representation)); } else if (descriptorManager.ArrayDataTypeMap.ContainsKey(dataTypeName)) { HLAarrayDataType arrData = descriptorManager.ArrayDataTypeMap[dataTypeName]; return(NativeTypeForDataType(arrData.DataType) + "[]"); } else if (descriptorManager.BasicDataTypeMap.ContainsKey(dataTypeName)) { return(NativeTypeForBasicRepresentation(dataTypeName)); } else { return(dataTypeName); } }
/// <summary> /// Prints a code block that will serialize the specified variable to the /// given stream. /// </summary> /// <param name="ps">the print stream to write the code block to /// </param> /// <param name="indentLevel">the level of indentation to use /// </param> /// <param name="iteratorVariable">the name of the iterator variable to use ('i', 'j', 'k'...) /// </param> /// <param name="dataTypeName">the name of the variable's data type /// </param> /// <param name="variableName">the name of the variable /// </param> /// <param name="streamName">the name of the stream /// </param> private void PrintSerializationBlock(System.IO.StreamWriter ps, int indentLevel, char iteratorVariable, System.String dataTypeName, System.String variableName, System.String streamName) { if (dataTypeName == null || dataTypeName.Equals("HLAopaqueData") || opaqueTypes.Contains(dataTypeName)) { ps.WriteLine(GenerateIndentString(indentLevel) + streamName + ".WriteHLAopaqueData(" + variableName + ");"); } else if (dataTypeName.Equals("NA")) { return; } else if (dataTypeName.Equals("HLAASCIIchar") || dataTypeName.Equals("HLAunicodeChar") || dataTypeName.Equals("HLAboolean") || dataTypeName.Equals("HLAunicodestring") || dataTypeName.Equals("HLAASCIIstring")) { ps.WriteLine(GenerateIndentString(indentLevel) + streamName + ".Write" + dataTypeName + "(" + variableName + ");"); } else if (descriptorManager.BasicDataTypeMap.ContainsKey(dataTypeName)) { //TODO Check if a Basic Data has a specific serializer ps.WriteLine(GenerateIndentString(indentLevel) + streamName + ".Write" + dataTypeName + "(" + variableName + ");"); } else if (descriptorManager.SimpleDataTypeMap.ContainsKey(dataTypeName)) { System.String representation = descriptorManager.SimpleDataTypeMap[dataTypeName].Representation; if (descriptorManager.BasicDataTypeMap.ContainsKey(representation)) { ps.WriteLine(GenerateIndentString(indentLevel) + streamName + ".Write" + representation + "(" + variableName + ");"); } else { ps.WriteLine(GenerateIndentString(indentLevel) + streamName + ".WriteHLAopaqueData(" + variableName + ");"); } } else if (descriptorManager.ArrayDataTypeMap.ContainsKey(dataTypeName)) { HLAarrayDataType arrData = descriptorManager.ArrayDataTypeMap[dataTypeName]; if (arrData.HasNativeSerializer) { ps.WriteLine(GenerateIndentString(indentLevel) + streamName + ".Write" + dataTypeName + "(" + variableName + ");"); } else { if (arrData.Cardinality.ToUpper().Equals("DYNAMIC")) { ps.WriteLine(GenerateIndentString(indentLevel) + streamName + ".WriteHLAinteger32BE((" + variableName + ").Length);"); ps.WriteLine(); ps.WriteLine(GenerateIndentString(indentLevel) + "for(int " + iteratorVariable + "=0;" + iteratorVariable + "< (" + variableName + ").Length;" + iteratorVariable + "++)"); } else { ps.WriteLine(GenerateIndentString(indentLevel) + "for(int " + iteratorVariable + "=0;" + iteratorVariable + "<" + arrData.Cardinality + ";" + iteratorVariable + "++)"); } ps.WriteLine(GenerateIndentString(indentLevel) + "{"); PrintSerializationBlock(ps, indentLevel + 1, (char)(iteratorVariable + 1), arrData.DataType, "(" + variableName + ")[" + iteratorVariable + "]", streamName); ps.WriteLine(GenerateIndentString(indentLevel) + "}"); } } else { if (variableName.EndsWith("]")) { ps.WriteLine(GenerateIndentString(indentLevel) + dataTypeName + "XrtiSerializer.Serialize(" + streamName + ", " + variableName + ");"); } else { ps.WriteLine(GenerateIndentString(indentLevel) + dataTypeName + "XrtiSerializer.Serialize(" + streamName + ", " + variableName + ");"); } } }
/// <summary> /// Prints a code block that will deserialize the specified variable from the /// given stream. /// </summary> /// <param name="sw">the print stream to write the code block to /// </param> /// <param name="indentLevel">the level of indentation to use /// </param> /// <param name="iteratorVariable">the name of the iterator variable to use ('i', 'j', 'k'...) /// </param> /// <param name="dataTypeName">the name of the variable's data type /// </param> /// <param name="variableName">the name of the variable /// </param> /// <param name="streamName">the name of the stream /// </param> private void PrintDeserializationBlock(System.IO.StreamWriter ps, int indentLevel, char iteratorVariable, System.String dataTypeName, System.String variableName, System.String streamName) { if (dataTypeName == null || dataTypeName.Equals("HLAopaqueData") || opaqueTypes.Contains(dataTypeName)) { ps.WriteLine(GenerateIndentString(indentLevel) + variableName + " = " + streamName + ".ReadHLAopaqueData();"); } else if (dataTypeName.Equals("NA")) { return; } //TODO all these types are simpleDatatype. Must we consider it as default or try to look for in descriptorManager.SimpleDataTypeMap ??? else if (dataTypeName.Equals("HLAASCIIchar") || dataTypeName.Equals("HLAunicodeChar") || dataTypeName.Equals("HLAboolean") || dataTypeName.Equals("HLAunicodestring") || dataTypeName.Equals("HLAASCIIstring")) { ps.WriteLine(GenerateIndentString(indentLevel) + variableName + " = " + streamName + ".Read" + dataTypeName + "();"); } else if (descriptorManager.BasicDataTypeMap.ContainsKey(dataTypeName)) { //TODO Check if a Basic Data has a specific deserializer ps.WriteLine(GenerateIndentString(indentLevel) + variableName + " = " + streamName + ".Read" + dataTypeName + "();"); } else if (descriptorManager.SimpleDataTypeMap.ContainsKey(dataTypeName)) { System.String representation = descriptorManager.SimpleDataTypeMap[dataTypeName].Representation; if (descriptorManager.BasicDataTypeMap.ContainsKey(representation)) { ps.WriteLine(GenerateIndentString(indentLevel) + variableName + " = " + streamName + ".Read" + representation + "();"); } else { ps.WriteLine(GenerateIndentString(indentLevel) + variableName + " = " + streamName + ".ReadHLAopaqueData();"); } } else if (descriptorManager.ArrayDataTypeMap.ContainsKey(dataTypeName)) { HLAarrayDataType arrData = descriptorManager.ArrayDataTypeMap[dataTypeName]; if (arrData.HasNativeSerializer) { ps.WriteLine(GenerateIndentString(indentLevel) + variableName + " = " + streamName + ".Read" + dataTypeName + "();"); } else { System.String nativeType = NativeTypeForDataType(dataTypeName); System.String preBracket = nativeType.Substring(0, (nativeType.IndexOf((System.Char) ']')) - (0)); System.String postBracket = nativeType.Substring(nativeType.IndexOf((System.Char) ']')); if (arrData.Cardinality.ToUpper().Equals("DYNAMIC")) { ps.WriteLine(GenerateIndentString(indentLevel) + variableName + " = new " + preBracket + " " + streamName + ".ReadHLAinteger32BE() " + postBracket + ";"); ps.WriteLine(); ps.WriteLine(GenerateIndentString(indentLevel) + "for(int " + iteratorVariable + "=0;" + iteratorVariable + "<" + variableName + ".Length;" + iteratorVariable + "++)"); } else { ps.WriteLine(GenerateIndentString(indentLevel) + variableName + " = new " + preBracket + arrData.Cardinality + postBracket + ";"); ps.WriteLine(); ps.WriteLine(GenerateIndentString(indentLevel) + "for(int " + iteratorVariable + "=0;" + iteratorVariable + "<" + arrData.Cardinality + ";" + iteratorVariable + "++)"); } ps.WriteLine(GenerateIndentString(indentLevel) + "{"); PrintDeserializationBlock(ps, indentLevel + 1, (char)(iteratorVariable + 1), arrData.DataType, variableName + "[" + iteratorVariable + "]", streamName); ps.WriteLine(GenerateIndentString(indentLevel) + "}"); } } else { if (dataTypeName.StartsWith("HLA") && !dataTypeName.EndsWith("[]") && !dataTypeName.EndsWith("]")) { ps.WriteLine(GenerateIndentString(indentLevel) + variableName + " = " + dataTypeName + "XrtiSerializer.Deserialize(" + streamName + ");"); } else { if (dataTypeName.StartsWith("HLA") && !dataTypeName.EndsWith("[]") && !variableName.EndsWith("]")) { ps.WriteLine(GenerateIndentString(indentLevel) + variableName + " = " + dataTypeName + "XrtiSerializer.Deserialize(" + streamName + ");"); } else { ps.WriteLine(GenerateIndentString(indentLevel) + variableName + " = " + dataTypeName + "XrtiSerializer.Deserialize(" + streamName + ");"); } } } }