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("");
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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("");
        }
コード例 #4
0
        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("");
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
 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("");
 }
コード例 #9
0
        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;
        }
コード例 #10
0
 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("");
 }
コード例 #11
0
 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("");
 }
コード例 #12
0
ファイル: GenerateCppEnDecoder.cs プロジェクト: CCJY/CGSF
 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("");
 }
コード例 #14
0
 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("");
 }
コード例 #15
0
ファイル: GenerateCppEnDecoder.cs プロジェクト: CCJY/CGSF
        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("");
        }
コード例 #16
0
ファイル: GenerateCppEnDecoder.cs プロジェクト: CCJY/CGSF
 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("");
 }
コード例 #17
0
ファイル: GenerateCSharpEnDecoder.cs プロジェクト: CCJY/CGSF
 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("");
 }
コード例 #18
0
ファイル: GenerateCSharpEnDecoder.cs プロジェクト: CCJY/CGSF
 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("");
 }
コード例 #19
0
ファイル: GenerateCSharpEnDecoder.cs プロジェクト: CCJY/CGSF
 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));
        }
コード例 #21
0
ファイル: GenerateCppEnDecoder.cs プロジェクト: CCJY/CGSF
        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("");
        }
コード例 #22
0
ファイル: GenerateCppEnDecoder.cs プロジェクト: CCJY/CGSF
 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("");
 }
コード例 #23
0
ファイル: GenerateCppEnDecoder.cs プロジェクト: CCJY/CGSF
 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("");
 }
コード例 #24
0
ファイル: GenerateCSharpEnDecoder.cs プロジェクト: CCJY/CGSF
        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("");
 }
コード例 #26
0
ファイル: GenerateCSharpEnDecoder.cs プロジェクト: CCJY/CGSF
 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("");
 }
コード例 #28
0
        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("");
 }