コード例 #1
0
ファイル: EocExpression.cs プロジェクト: OpenEpl/EplOnCppCore
        public virtual void WriteToWithCast(CodeWriter writer, CppTypeName cast)
        {
            var exprType = GetResultType();

            if (cast == null || cast == EocDataTypes.Auto || cast == exprType)
            {
                WriteTo(writer);
                return;
            }
            writer.Write("e::system::cast<");
            writer.Write(cast.ToString());
            writer.Write(">(");
            WriteTo(writer);
            writer.Write(")");
        }
コード例 #2
0
        public virtual void WriteToWithCast(CodeWriter writer, CppTypeName cast)
        {
            var exprType = GetResultType();

            if (cast == null || cast == ProjectConverter.CppTypeName_SkipCheck || cast == exprType)
            {
                WriteTo(writer);
                return;
            }
            writer.Write("e::system::cast<");
            writer.Write(cast.ToString());
            writer.Write(">(");
            WriteTo(writer);
            writer.Write(")");
        }
コード例 #3
0
        public override void WriteTo(CodeWriter writer)
        {
            if (Mask)
            {
                writer.AddCommentLine(CommentOnStart);
                using (writer.NewBlock())
                {
                    Block.WriteTo(writer);
                }
                writer.AddCommentLine(CommentOnEnd);
                return;
            }
            var         hasVar       = Var != null;
            var         varPrefix    = C.AllocTempVar();
            var         varForCount  = $"{varPrefix}_count";
            var         varForIndex  = $"{varPrefix}_index";
            var         typeName     = $"decltype({varForCount})";
            CppTypeName expectedType = null;

            writer.AddCommentLine(CommentOnStart);

            writer.NewLine();
            if (hasVar)
            {
                expectedType = Var.GetResultType();
                typeName     = expectedType.ToString();
                writer.Write(typeName);
                writer.Write(" ");
            }
            else
            {
                writer.Write("auto ");
            }
            writer.Write(varForCount);
            writer.Write(" = ");
            Count.WriteToWithCast(writer, expectedType);
            writer.Write(";");

            writer.NewLine();
            writer.Write(typeName);
            writer.Write(" ");
            writer.Write(varForIndex);
            writer.Write(" = 1");
            writer.Write(";");

            writer.NewLine();
            writer.Write("for (");

            if (hasVar)
            {
                C.WriteLetExpression(writer, Var, () =>
                {
                    writer.Write(varForIndex);
                });
            }

            writer.Write("; ");

            writer.Write(varForIndex);
            writer.Write(" <= ");
            writer.Write(varForCount);

            writer.Write("; ");

            if (hasVar)
            {
                C.WriteLetExpression(writer, Var, () =>
                {
                    writer.Write("++");
                    writer.Write(varForIndex);
                });
            }
            else
            {
                writer.Write(varForIndex);
                writer.Write("++");
            }

            writer.Write(")");
            using (writer.NewBlock())
            {
                Block.WriteTo(writer);
            }

            writer.AddCommentLine(CommentOnEnd);
        }