void 디코드_멤버데이터_정수배열(string indent, MemberDataInfo prevMemberInfo, MemberDataInfo memberInfo, string packetDataName, List <string> GenerateCode) { var arrayValuePrevMemberName = ""; if (prevMemberInfo != null) { var prevMemberName = prevMemberInfo.Name; var name1 = memberInfo.Name.Substring(0, memberInfo.Name.Length - 1); var name2 = memberInfo.Name.Last().ToString(); if (name2 == "s" && ((name1 + "Count") == prevMemberName)) { arrayValuePrevMemberName = prevMemberName; } } if (string.IsNullOrEmpty(arrayValuePrevMemberName) == false) { GenerateCode.Add(string.Format("{0}memcpy({1}.{2}, &pBuffer[ReadPos], sizeof({3}) * PacketData.{4});", indent, packetDataName, memberInfo.Name, memberInfo.Type, arrayValuePrevMemberName)); GenerateCode.Add(string.Format("{0}ReadSize = (sizeof({1}) * {2}.{3});", indent, memberInfo.Type, packetDataName, arrayValuePrevMemberName)); } else { GenerateCode.Add(string.Format("{0}memcpy({1}.{2}, &pBuffer[ReadPos], sizeof({3}) * {4});", indent, packetDataName, memberInfo.Name, memberInfo.Type, memberInfo.ArrayDefineName)); GenerateCode.Add(string.Format("{0}ReadSize = (sizeof({1}) * {2});", indent, memberInfo.Type, memberInfo.ArrayDefineName)); } GenerateCode.Add(string.Format("{0}ReadPos += ReadSize;", indent)); GenerateCode.Add(""); }
MemberDataInfo 변수_타입_이름_분리하기(string[] tokens) { var member = new MemberDataInfo(); if (tokens[0] == "unsigned") { member.Type = tokens[0] + " " + tokens[1]; member.Name = tokens[2]; } else { member.Type = tokens[0]; member.Name = tokens[1]; } if (member.ArrayValue == 0) { var temp = 이름_배열크기_분리하기(member.Name); member.Name = temp.Item1; member.ArrayValue = temp.Item2; member.ArrayDefineName = temp.Item3; } return(member); }
void 디코드_멤버데이터_정수(string indent, MemberDataInfo memberInfo, string packetDataName, List <string> GenerateCode) { var convertTypeAndSize = CppTypeToCLRConvertType(memberInfo.Type); GenerateCode.Add(string.Format("{0}{1}.{2} = BitConverter.{3}(packetData, readPos);", indent, packetDataName, memberInfo.Name, convertTypeAndSize.Item1)); GenerateCode.Add(string.Format("{0}readPos += {1}", indent, convertTypeAndSize.Item2)); GenerateCode.Add(""); }
void 디코드_멤버데이터_구조체(string indent, Dictionary <string, StructInfo> 구조체정의_사전, StructInfo structInfo, string packetDataName, List <string> GenerateCode) { int fieldIndex = -1; MemberDataInfo prevMemberInfo = null; foreach (var memberInfo in structInfo.MemberList) { ++fieldIndex; if (fieldIndex > 0) { prevMemberInfo = structInfo.MemberList[fieldIndex - 1]; } if (CheckDataType.IsCppNumberType(memberInfo.Type) || CheckDataType.IsCSharpNumberType(memberInfo.Type) ) { if (memberInfo.ArrayValue > 1) { 디코드_멤버데이터_정수배열(indent, prevMemberInfo, memberInfo, packetDataName, GenerateCode); } else { 디코드_멤버데이터_정수(indent, memberInfo, packetDataName, GenerateCode); } } else if (CheckDataType.IsCppUnicodeCharacterType(memberInfo.Type) || CheckDataType.IsCSharpCharacterType(memberInfo.Type) ) { 디코드_멤버데이터_문자열(indent, memberInfo, packetDataName, GenerateCode); } else // 구조체 { var structInfo2 = 구조체정의_사전[memberInfo.Type]; if (memberInfo.ArrayValue <= 1) { var rePacketDataName = string.Format("{0}.{1}", packetDataName, memberInfo.Name); 디코드_멤버데이터_구조체(indent, 구조체정의_사전, structInfo2, rePacketDataName, GenerateCode); } else { var rePacketDataName = string.Format("{0}.{1}[i]", packetDataName, memberInfo.Name); var arrayValuePrevMemberName = prevMemberInfo.Name; GenerateCode.Add(string.Format("{0}for(int i = 0; i < {1}; ++i)", indent, arrayValuePrevMemberName)); GenerateCode.Add(indent + "{"); 디코드_멤버데이터_구조체(indent + "\t", 구조체정의_사전, structInfo2, rePacketDataName, GenerateCode); GenerateCode.Add(indent + "}"); GenerateCode.Add(""); } } } }
void 엔코드_멤버데이터_정수배열(string indent, MemberDataInfo prevMemberInfo, MemberDataInfo memberInfo, string packetDataName, List <string> GenerateCode) { var arrayValuePrevMemberName = prevMemberInfo.Name; GenerateCode.Add(string.Format("{0}memcpy(&pBuffer[WritePos], {1}.{2}, sizeof({3})*PacketData.{4});", indent, packetDataName, memberInfo.Name, memberInfo.Type, arrayValuePrevMemberName)); GenerateCode.Add(string.Format("{0}UseSize = (sizeof({1}) * {2}.{3});", indent, memberInfo.Type, packetDataName, arrayValuePrevMemberName)); GenerateCode.Add(indent + "WritePos += UseSize;"); GenerateCode.Add(""); }
Tuple<bool, string> CSharpType(MemberDataInfo memberInfo) { bool isSxceptionally = false; string csharpType = memberInfo.Type; switch (memberInfo.Type) { case "char": csharpType = "System.SByte"; break; case "unsigned char": csharpType = "System.Byte"; break; case "short": csharpType = "System.Int16"; break; case "unsigned short": csharpType = "System.UInt16"; break; case "int": csharpType = "System.Int32"; break; case "unsigned int": csharpType = "System.UInt32"; break; case "__int64": csharpType = "System.Int64"; break; case "unsigned __int64": csharpType = "System.UInt64"; break; case "float": csharpType = "System.Single"; break; case "double": csharpType = "System.Double"; break; case "wchar_t": csharpType = "System.String"; isSxceptionally = true; break; default: isSxceptionally = true; break; } if (memberInfo.ArrayValue > 1 && memberInfo.Type != "string") { csharpType = string.Format("System.Collections.Generic.List<{0}>", csharpType); isSxceptionally = true; } return new Tuple<bool, string>(isSxceptionally, csharpType); }
MemberDataInfo 변수_타입_이름_분리하기(string[] tokens) { var member = new MemberDataInfo(); if (tokens[1] == "const") { if (tokens[2] == "unsigned") { member.Type = tokens[2] + " " + tokens[3]; member.Name = tokens[4]; } else { member.Type = tokens[2]; member.Name = tokens[3]; } } else if (tokens[1] == "unsigned") { member.Type = tokens[1] + " " + tokens[2]; member.Name = tokens[3]; } else { member.Type = tokens[1]; member.Name = tokens[2]; } if (member.Type.IndexOf("List<") >= 0) { int pos1 = member.Type.IndexOf("<"); int pos2 = member.Type.IndexOf(">", pos1); member.Type = member.Type.Substring((pos1 + 1), (pos2 - pos1 - 1)); member.ArrayValue = 8; } member.Name = member.Name.RemoveWhere(c => c == ';'); return(member); }
void 디코드_멤버데이터_문자열(string indent, MemberDataInfo memberInfo, string packetDataName, List <string> GenerateCode) { GenerateCode.Add(string.Format("{0}PacketEnDecodeUtil.ToString(packetData, ref readPos, ref {1}.{2});", indent, packetDataName, memberInfo.Name)); GenerateCode.Add(""); }
MemberDataInfo 변수_타입_이름_분리하기(string[] tokens) { var member = new MemberDataInfo(); if (tokens[1] == "const" ) { if (tokens[2] == "unsigned") { member.Type = tokens[2] + " " + tokens[3]; member.Name = tokens[4]; } else { member.Type = tokens[2]; member.Name = tokens[3]; } } else if (tokens[1] == "unsigned") { member.Type = tokens[1] + " " + tokens[2]; member.Name = tokens[3]; } else { member.Type = tokens[1]; member.Name = tokens[2]; } if (member.Type.IndexOf("List<") >= 0) { int pos1 = member.Type.IndexOf("<"); int pos2 = member.Type.IndexOf(">", pos1); member.Type = member.Type.Substring((pos1 + 1), (pos2 - pos1 - 1)); member.ArrayValue = 8; } member.Name = member.Name.RemoveWhere(c => c == ';'); return member; }
void 디코드_멤버데이터_정수배열(string indent, MemberDataInfo prevMemberInfo, MemberDataInfo memberInfo, string packetDataName, List <string> GenerateCode) { GenerateCode.Add(string.Format("{0}PacketEnDecodeUtil.ToCollection(packetData, ref readPos, {1}.{2}, {3});", indent, packetDataName, prevMemberInfo, memberInfo.Name)); GenerateCode.Add(""); }
void 엔코드_멤버데이터_문자열(string indent, MemberDataInfo memberInfo, string packetDataName, List <string> GenerateCode) { GenerateCode.Add(string.Format("{0}PacketEnDecodeUtil.StringTo({1}.{2}, packetData);", indent, packetDataName, memberInfo.Name)); GenerateCode.Add(""); }
void 디코드_멤버데이터_문자열(string indent, MemberDataInfo memberInfo, string packetDataName, List<string> GenerateCode) { GenerateCode.Add(string.Format("{0}ReadSize = DeCoder::ReadWChar({1}.{2}, {3}, pBuffer, ReadPos, m_TempBuffer);", indent, packetDataName, memberInfo.Name, memberInfo.ArrayDefineName)); GenerateCode.Add(string.Format("{0}ReadPos += ReadSize;", indent)); GenerateCode.Add(""); }
void 디코드_멤버데이터_문자열(string indent, MemberDataInfo memberInfo, string packetDataName, List <string> GenerateCode) { GenerateCode.Add(string.Format("{0}ReadSize = DeCoder::ReadWChar({1}.{2}, {3}, pBuffer, ReadPos, m_TempBuffer);", indent, packetDataName, memberInfo.Name, memberInfo.ArrayDefineName)); GenerateCode.Add(string.Format("{0}ReadPos += ReadSize;", indent)); GenerateCode.Add(""); }
void 엔코드_멤버데이터_정수(string indent, MemberDataInfo memberInfo, string packetDataName, List <string> GenerateCode) { GenerateCode.Add(string.Format("{0}packetData.AddRange(BitConverter.GetBytes({1}.{2}));", indent, packetDataName, memberInfo.Name)); GenerateCode.Add(""); }
void 디코드_멤버데이터_정수배열(string indent, MemberDataInfo prevMemberInfo, MemberDataInfo memberInfo, string packetDataName, List<string> GenerateCode) { var arrayValuePrevMemberName = ""; if (prevMemberInfo != null) { var prevMemberName = prevMemberInfo.Name; var name1 = memberInfo.Name.Substring(0, memberInfo.Name.Length - 1); var name2 = memberInfo.Name.Last().ToString(); if (name2 == "s" && ((name1 + "Count") == prevMemberName)) { arrayValuePrevMemberName = prevMemberName; } } if (string.IsNullOrEmpty(arrayValuePrevMemberName) == false) { GenerateCode.Add(string.Format("{0}memcpy({1}.{2}, &pBuffer[ReadPos], sizeof({3}) * PacketData.{4});", indent, packetDataName, memberInfo.Name, memberInfo.Type, arrayValuePrevMemberName)); GenerateCode.Add(string.Format("{0}ReadSize = (sizeof({1}) * {2}.{3});", indent, memberInfo.Type, packetDataName, arrayValuePrevMemberName)); } else { GenerateCode.Add(string.Format("{0}memcpy({1}.{2}, &pBuffer[ReadPos], sizeof({3}) * {4});", indent, packetDataName, memberInfo.Name, memberInfo.Type, memberInfo.ArrayDefineName)); GenerateCode.Add(string.Format("{0}ReadSize = (sizeof({1}) * {2});", indent, memberInfo.Type, memberInfo.ArrayDefineName)); } GenerateCode.Add(string.Format("{0}ReadPos += ReadSize;", indent)); GenerateCode.Add(""); }
void 디코드_멤버데이터_정수(string indent, MemberDataInfo memberInfo, string packetDataName, List<string> GenerateCode) { GenerateCode.Add(string.Format("{0}ReadSize = DeCoder::ReadNumber<{1}>({2}.{3}, pBuffer, WritePos);", indent, memberInfo.Type, packetDataName, memberInfo.Name)); GenerateCode.Add(string.Format("{0}ReadPos += ReadSize;", indent)); GenerateCode.Add(""); }
void 디코드_멤버데이터_정수배열(string indent, MemberDataInfo prevMemberInfo, MemberDataInfo memberInfo, string packetDataName, List<string> GenerateCode) { GenerateCode.Add(string.Format("{0}PacketEnDecodeUtil.ToCollection(packetData, ref readPos, {1}.{2}, {3});", indent, packetDataName, prevMemberInfo, memberInfo.Name)); GenerateCode.Add(""); }
void 엔코드_멤버데이터_정수배열(string indent, MemberDataInfo prevMemberInfo, MemberDataInfo memberInfo, string packetDataName, List<string> GenerateCode) { GenerateCode.Add(string.Format("{0}PacketEnDecodeUtil.ArrayTo({1}.{2}, packetData));", indent, packetDataName, memberInfo.Name)); GenerateCode.Add(""); }
void 디코드_멤버데이터_문자열(string indent, MemberDataInfo memberInfo, string packetDataName, List<string> GenerateCode) { GenerateCode.Add(string.Format("{0}PacketEnDecodeUtil.ToString(packetData, ref readPos, ref {1}.{2});", indent, packetDataName, memberInfo.Name)); GenerateCode.Add(""); }
Tuple <bool, string> CSharpType(MemberDataInfo memberInfo) { bool isSxceptionally = false; string csharpType = memberInfo.Type; switch (memberInfo.Type) { case "char": csharpType = "System.SByte"; break; case "unsigned char": csharpType = "System.Byte"; break; case "short": csharpType = "System.Int16"; break; case "unsigned short": csharpType = "System.UInt16"; break; case "int": csharpType = "System.Int32"; break; case "unsigned int": csharpType = "System.UInt32"; break; case "__int64": csharpType = "System.Int64"; break; case "unsigned __int64": csharpType = "System.UInt64"; break; case "float": csharpType = "System.Single"; break; case "double": csharpType = "System.Double"; break; case "wchar_t": csharpType = "System.String"; isSxceptionally = true; break; default: isSxceptionally = true; break; } if (memberInfo.ArrayValue > 1 && memberInfo.Type != "string") { csharpType = string.Format("System.Collections.Generic.List<{0}>", csharpType); isSxceptionally = true; } return(new Tuple <bool, string>(isSxceptionally, csharpType)); }
void 엔코드_멤버데이터_정수배열(string indent, MemberDataInfo prevMemberInfo, MemberDataInfo memberInfo, string packetDataName, List<string> GenerateCode) { var arrayValuePrevMemberName = prevMemberInfo.Name; GenerateCode.Add(string.Format("{0}memcpy(&pBuffer[WritePos], {1}.{2}, sizeof({3})*PacketData.{4});", indent, packetDataName, memberInfo.Name, memberInfo.Type, arrayValuePrevMemberName)); GenerateCode.Add(string.Format("{0}UseSize = (sizeof({1}) * {2}.{3});", indent, memberInfo.Type, packetDataName, arrayValuePrevMemberName)); GenerateCode.Add(indent + "WritePos += UseSize;"); GenerateCode.Add(""); }
void 엔코드_멤버데이터_정수(string indent, MemberDataInfo memberInfo, string packetDataName, List<string> GenerateCode) { GenerateCode.Add(string.Format("{0}UseSize = Encoder::WriteNumber<{1}>({2}.{3}, pBuffer, WritePos);", indent, memberInfo.Type, packetDataName, memberInfo.Name)); GenerateCode.Add(indent + "WritePos += UseSize;"); GenerateCode.Add(""); }
void 엔코드_멤버데이터_문자열(string indent, MemberDataInfo memberInfo, string packetDataName, List<string> GenerateCode) { GenerateCode.Add(string.Format("{0}UseSize = Encoder::WriteWChar({1}.{2}, pBuffer, WritePos, MaxBufferSize);", indent, packetDataName, memberInfo.Name)); GenerateCode.Add(indent + "WritePos += UseSize;"); GenerateCode.Add(""); }
void 디코드_멤버데이터_정수(string indent, MemberDataInfo memberInfo, string packetDataName, List<string> GenerateCode) { var convertTypeAndSize = CppTypeToCLRConvertType(memberInfo.Type); GenerateCode.Add(string.Format("{0}{1}.{2} = BitConverter.{3}(packetData, readPos);", indent, packetDataName, memberInfo.Name, convertTypeAndSize.Item1)); GenerateCode.Add(string.Format("{0}readPos += {1}", indent, convertTypeAndSize.Item2)); GenerateCode.Add(""); }
void 엔코드_멤버데이터_정수(string indent, MemberDataInfo memberInfo, string packetDataName, List <string> GenerateCode) { GenerateCode.Add(string.Format("{0}UseSize = Encoder::WriteNumber<{1}>({2}.{3}, pBuffer, WritePos);", indent, memberInfo.Type, packetDataName, memberInfo.Name)); GenerateCode.Add(indent + "WritePos += UseSize;"); GenerateCode.Add(""); }
void 엔코드_멤버데이터_정수(string indent, MemberDataInfo memberInfo, string packetDataName, List<string> GenerateCode) { GenerateCode.Add(string.Format("{0}packetData.AddRange(BitConverter.GetBytes({1}.{2}));", indent, packetDataName, memberInfo.Name)); GenerateCode.Add(""); }
void 엔코드_멤버데이터_문자열(string indent, MemberDataInfo memberInfo, string packetDataName, List <string> GenerateCode) { GenerateCode.Add(string.Format("{0}UseSize = Encoder::WriteWChar({1}.{2}, pBuffer, WritePos, MaxBufferSize);", indent, packetDataName, memberInfo.Name)); GenerateCode.Add(indent + "WritePos += UseSize;"); GenerateCode.Add(""); }
MemberDataInfo 변수_타입_이름_분리하기(string[] tokens) { var member = new MemberDataInfo(); if (tokens[0] == "unsigned") { member.Type = tokens[0] + " " + tokens[1]; member.Name = tokens[2]; } else { member.Type = tokens[0]; member.Name = tokens[1]; } if (member.ArrayValue == 0) { var temp = 이름_배열크기_분리하기(member.Name); member.Name = temp.Item1; member.ArrayValue = temp.Item2; member.ArrayDefineName = temp.Item3; } return member; }
void 디코드_멤버데이터_정수(string indent, MemberDataInfo memberInfo, string packetDataName, List <string> GenerateCode) { GenerateCode.Add(string.Format("{0}ReadSize = DeCoder::ReadNumber<{1}>({2}.{3}, pBuffer, WritePos);", indent, memberInfo.Type, packetDataName, memberInfo.Name)); GenerateCode.Add(string.Format("{0}ReadPos += ReadSize;", indent)); GenerateCode.Add(""); }