public OutputProcessViewFactoryForgeDesc(
     OutputProcessViewFactoryForge forge,
     IList<StmtClassForgeableFactory> additionalForgeables)
 {
     Forge = forge;
     AdditionalForgeables = additionalForgeables;
 }
Exemple #2
0
 public StmtClassForgableOPVFactoryProvider(
     string className,
     OutputProcessViewFactoryForge spec,
     CodegenNamespaceScope namespaceScope,
     int numStreams,
     StatementRawInfo raw)
 {
     ClassName = className;
     _spec = spec;
     _namespaceScope = namespaceScope;
     _numStreams = numStreams;
     _raw = raw;
 }
Exemple #3
0
        private static void MakeOPV(
            CodegenClassScope classScope,
            IList<CodegenInnerClass> innerClasses,
            IList<CodegenTypedParam> factoryExplicitMembers,
            CodegenCtor factoryCtor,
            string classNameParent,
            OutputProcessViewFactoryForge forge,
            int numStreams)
        {
            IList<CodegenTypedParam> ctorParams = new List<CodegenTypedParam>();
            ctorParams.Add(new CodegenTypedParam(classNameParent, "o"));
            ctorParams.Add(new CodegenTypedParam(typeof(ResultSetProcessor), NAME_RESULTSETPROCESSOR));
            ctorParams.Add(new CodegenTypedParam(typeof(AgentInstanceContext), NAME_AGENTINSTANCECONTEXT));

            // make ctor code
            var serviceCtor = new CodegenCtor(typeof(StmtClassForgableOPVFactoryProvider), classScope, ctorParams);

            // Get-Result-Type Method
            var eventTypeGetter = CodegenProperty
                .MakePropertyNode(typeof(EventType), forge.GetType(), CodegenSymbolProviderEmpty.INSTANCE, classScope)
                .WithOverride();
            eventTypeGetter.GetterBlock.BlockReturn(ExprDotName(Ref(NAME_RESULTSETPROCESSOR), "ResultEventType"));

            // Process-View-Result Method
            var updateMethod = CodegenMethod
                .MakeMethod(typeof(void), forge.GetType(), CodegenSymbolProviderEmpty.INSTANCE, classScope)
                .WithOverride()
                .AddParam(typeof(EventBean[]), NAME_NEWDATA)
                .AddParam(typeof(EventBean[]), NAME_OLDDATA);
            if (numStreams == 1) {
                forge.UpdateCodegen(updateMethod, classScope);
            }
            else {
                updateMethod.Block.MethodThrowUnsupported();
            }

            // Process-Join-Result Method
            var processMethod = CodegenMethod
                .MakeMethod(typeof(void), forge.GetType(), CodegenSymbolProviderEmpty.INSTANCE, classScope)
                .WithOverride()
                .AddParam(typeof(ISet<MultiKey<EventBean>>), NAME_NEWDATA)
                .AddParam(typeof(ISet<MultiKey<EventBean>>), NAME_OLDDATA)
                .AddParam(
                    typeof(ExprEvaluatorContext),
                    "notApplicable");
            if (numStreams == 1) {
                processMethod.Block.MethodThrowUnsupported();
            }
            else {
                forge.ProcessCodegen(processMethod, classScope);
            }

            // Stop-Method (generates last as other methods may allocate members)
            var enumeratorMethod = CodegenMethod
                .MakeMethod(
                    typeof(IEnumerator<EventBean>),
                    forge.GetType(),
                    CodegenSymbolProviderEmpty.INSTANCE,
                    classScope)
                .WithOverride();
            forge.EnumeratorCodegen(enumeratorMethod, classScope);

            // NumChangesetRows (always zero for generated code)
            var numChangesetRowsProp = CodegenProperty
                .MakePropertyNode(typeof(int), forge.GetType(), CodegenSymbolProviderEmpty.INSTANCE, classScope)
                .WithOverride();
            numChangesetRowsProp.GetterBlock.BlockReturn(Constant(0));

            // OptionalOutputCondition (always null for generated code)
            var optionalOutputConditionProp = CodegenProperty
                .MakePropertyNode(typeof(OutputCondition), forge.GetType(), CodegenSymbolProviderEmpty.INSTANCE, classScope)
                .WithOverride();
            optionalOutputConditionProp.GetterBlock.BlockReturn(ConstantNull());

            // Stop-Method (no action for generated code)
            CodegenMethod stopMethod = CodegenMethod
                .MakeMethod(typeof(void), forge.GetType(), CodegenSymbolProviderEmpty.INSTANCE, classScope)
                .WithOverride()
                .AddParam(typeof(AgentInstanceStopServices), "svc");

            // Terminate-Method (no action for generated code)
            CodegenMethod terminatedMethod = CodegenMethod
                .MakeMethod(typeof(void), forge.GetType(), CodegenSymbolProviderEmpty.INSTANCE, classScope)
                .WithOverride();

            var innerProperties = new CodegenClassProperties();
            var innerMethods = new CodegenClassMethods();
            CodegenStackGenerator.RecursiveBuildStack(
                eventTypeGetter,
                "EventType",
                innerMethods,
                innerProperties);
            CodegenStackGenerator.RecursiveBuildStack(
                updateMethod,
                "Update",
                innerMethods,
                innerProperties);
            CodegenStackGenerator.RecursiveBuildStack(
                processMethod,
                "Process",
                innerMethods,
                innerProperties);
            CodegenStackGenerator.RecursiveBuildStack(
                enumeratorMethod,
                "GetEnumerator",
                innerMethods,
                innerProperties);
            CodegenStackGenerator.RecursiveBuildStack(
                numChangesetRowsProp,
                "NumChangesetRows",
                innerMethods,
                innerProperties);
            CodegenStackGenerator.RecursiveBuildStack(
                optionalOutputConditionProp,
                "OptionalOutputCondition",
                innerMethods,
                innerProperties);
            CodegenStackGenerator.RecursiveBuildStack(
                stopMethod,
                "Stop",
                innerMethods,
                innerProperties);
            CodegenStackGenerator.RecursiveBuildStack(
                terminatedMethod,
                "Terminated",
                innerMethods,
                innerProperties);


            var innerClass = new CodegenInnerClass(
                CLASSNAME_OUTPUTPROCESSVIEW,
                typeof(OutputProcessView),
                serviceCtor,
                Collections.GetEmptyList<CodegenTypedParam>(),
                innerMethods,
                innerProperties);
            innerClasses.Add(innerClass);
        }