Пример #1
0
        void GenerateCsCode(CodeStringBuilder stbuilder)
        {
            CodeStringBuilder   codeBuilder = new CodeStringBuilder();
            CodeTypeDeclaration orgDecl     = this.OriginalDecl;
            TypePlan            _typeTxInfo = orgDecl.TypePlan;

            //
            AddComment(orgDecl.LineComments, codeBuilder);

            //for cef, if enum class end with flags_t
            //we add FlagsAttribute to this enum type

            if (orgDecl.Name.EndsWith("flags_t"))
            {
                codeBuilder.AppendLine("[Flags]");
            }

            codeBuilder.AppendLine("public enum " + orgDecl.Name + enum_base + "{");
            //transform enum
            int i = 0;

            foreach (FieldPlan fieldTx in _typeTxInfo.fields)
            {
                if (i > 0)
                {
                    codeBuilder.AppendLine(",");
                }
                i++;
                CodeFieldDeclaration codeFieldDecl = fieldTx.fieldDecl;
                //
                AddComment(codeFieldDecl.LineComments, codeBuilder);
                //
                if (codeFieldDecl.InitExpression != null)
                {
                    string initExpr = codeFieldDecl.InitExpression.ToString();
                    //cef specific
                    if (initExpr == "UINT_MAX")
                    {
                        codeBuilder.Append(codeFieldDecl.Name + "=uint.MaxValue");
                    }
                    else
                    {
                        codeBuilder.Append(codeFieldDecl.Name + "=" + codeFieldDecl.InitExpression.ToString());
                    }
                }
                else
                {
                    codeBuilder.Append(codeFieldDecl.Name);
                }
            }
            codeBuilder.AppendLine("}");
            //
            stbuilder.Append(codeBuilder.ToString());
        }
Пример #2
0
        void GenerateCsCode(CefCodeGenOutput output)
        {
            CodeStringBuilder csCode = new CodeStringBuilder();

            CodeTypeDeclaration typedecl = this.OriginalDecl;

            //-------
            csCode.AppendLine("//CefCStructTx::GenerateCsCode, " + (++codeNum));
            //-------

            csCode.AppendLine("[StructLayout(LayoutKind.Sequential)]");
            csCode.AppendLine("struct " + typedecl.Name + "{");

            int i = 0;

            foreach (CodeMemberDeclaration mb in typedecl.GetMemberIter())
            {
                if (mb.MemberKind == CodeMemberKind.Field)
                {
                    //-------
                    csCode.AppendLine("//CefCStructTx::GenerateCsCode-Field, " + (++codeNum));
                    //-------
                    CodeFieldDeclaration fieldDecl = (CodeFieldDeclaration)mb;
                    //
                    AddComment(fieldDecl.LineComments, csCode);
                    //

                    string fieldTypeName = fieldDecl.FieldType.ToString();
                    //field type
                    switch (fieldTypeName)
                    {
                    default:
                    {
                        if (fieldTypeName.EndsWith("_t"))
                        {
                            csCode.Append("public " + fieldTypeName);
                        }
                        else
                        {
                            throw new NotSupportedException();
                        }
                    }
                    break;

                    case "void*":
                        csCode.Append("public IntPtr");
                        break;

                    case "int":
                    case "float":
                    case "double":
                        csCode.Append("public " + fieldTypeName);
                        break;

                    case "cef_string_t":
                        csCode.Append("public _cef_string_utf16_t");
                        break;

                    case "size_t":
                        csCode.Append("public int");
                        break;

                    case "uint32":
                        csCode.Append("public uint");
                        break;

                    case "char16":
                        csCode.Append("public char");
                        break;
                    }
                    csCode.AppendLine(" " + fieldDecl.Name + ";");
                }
                i++;
            }
            csCode.AppendLine("}");
            //
            output._csCode.Append(csCode.ToString());
        }