private void GenerateVariableLoadContextInternal(CSTextDocumentBuilder text, string context, DOMEVariable variable, LookupBackedSet <string, string> settings)
        {
            IndexSituation       index_situation = variable.GetVariableContextIndexSituation();
            CSTextDocumentWriter code            = text.CreateWriterWithVariablePairs(
                "TYPE", GetTypeConcept().GetStoreTypeName(),
                "SET_FUNCTION", settings.ConvertBool("custom_load_context", "LoadContextIntermediate" + variable.GetVariableFunctionName(), "Set" + variable.GetVariableFunctionName()),
                "CONTEXT", context,
                "GET_CONTEXT_FUNCTION", variable.GetVariableContext().GetGetContextFunctionName(),
                "INDEX", index_situation.GetIndex().ToString()
                );

            string context_expression = "?CONTEXT.?GET_CONTEXT_FUNCTION()";

            if (index_situation.IsShared())
            {
                context_expression = "?CONTEXT.?GET_CONTEXT_FUNCTION(?INDEX)";
            }

            if (settings.IsTrue("skip_context_conversion"))
            {
                code.Write("?SET_FUNCTION(" + context_expression + ");");
            }
            else
            {
                string value_expression = GetTypeConcept().GetContextToTypeExpression(context_expression);
                if (GetTypeConcept().GetTypeName() != GetTypeConcept().GetStoreTypeName())
                {
                    value_expression = "(?TYPE)" + value_expression;
                }

                code.Write("?SET_FUNCTION(" + value_expression + ");");
            }
        }
Example #2
0
        private void GenerateVariableAddFunction(CSTextDocumentBuilder text, DOMEVariable variable, LookupBackedSet <string, string> settings)
        {
            if (settings.IsNot("add", "none"))
            {
                CSTextDocumentWriter code = text.CreateWriterWithVariablePairs(
                    "ADD_ACCESS", settings.Lookup("add"),
                    "ADD_OVERRIDE", settings.ConvertBool("add_override", "override"),
                    "ADD_VIRTUAL", settings.ConvertBool("add_virtual", "virtual"),
                    "TYPE", GetTypeConcept().GetStoreTypeName(),
                    "VARIABLE", variable.GetVariableName(),
                    "ADD_VARIABLE_FUNCTION", "Add" + variable.GetVariableFunctionName().StyleAsSingularWord(),
                    "ADD_VARIABLES_FUNCTION", "Add" + variable.GetVariableFunctionName().StyleAsPluralWord(),
                    "ON_ADD_VARIABLE_FUNCTION", "OnAdd" + variable.GetVariableFunctionName().StyleAsSingularWord()
                    );

                if (settings.IsTrue("add_single"))
                {
                    code.Write("?ADD_ACCESS ?ADD_OVERRIDE ?ADD_VIRTUAL void ?ADD_VARIABLE_FUNCTION(?TYPE input)", delegate() {
                        GenerateVariableAddFunctionBody(text, variable, "input", settings);

                        if (settings.IsTrue("hook_add"))
                        {
                            code.Write("?ON_ADD_VARIABLE_FUNCTION(input);");
                        }
                    });
                }

                if (settings.IsTrue("add_multiple"))
                {
                    code.Write("?ADD_ACCESS void ?ADD_VARIABLES_FUNCTION(IEnumerable<?TYPE> input)", delegate() {
                        if (IsSingleParentEnforced())
                        {
                            code.Write("input.ProcessCopy(i => ?ADD_VARIABLE_FUNCTION(i));");
                        }
                        else
                        {
                            code.Write("input.Process(i => ?ADD_VARIABLE_FUNCTION(i));");
                        }
                    });

                    code.Write("?ADD_ACCESS void ?ADD_VARIABLES_FUNCTION(params ?TYPE[] input)", delegate() {
                        code.Write("?ADD_VARIABLES_FUNCTION((IEnumerable<?TYPE>)input);");
                    });
                }
            }
        }
        private void GenerateVariableSetFunction(CSTextDocumentBuilder text, DOMEVariable variable, LookupBackedSet <string, string> settings)
        {
            if (settings.IsNot("set", "none"))
            {
                CSTextDocumentWriter code = text.CreateWriterWithVariablePairs(
                    "SET_ACCESS", settings.Lookup("set"),
                    "SET_OVERRIDE", settings.ConvertBool("set_override", "override"),
                    "SET_VIRTUAL", settings.ConvertBool("set_virtual", "virtual"),
                    "TYPE", GetTypeConcept().GetStoreTypeName(),
                    "VARIABLE", variable.GetVariableName(),
                    "SET_VARIABLE_FUNCTION", "Set" + variable.GetVariableFunctionName(),
                    "ON_SET_VARIABLE_FUNCTION", "OnSet" + variable.GetVariableFunctionName()
                    );

                code.Write("?SET_ACCESS ?SET_OVERRIDE ?SET_VIRTUAL void ?SET_VARIABLE_FUNCTION(?TYPE input)", delegate() {
                    GenerateVariableSetFunctionBody(text, variable, "input", settings);

                    if (settings.IsTrue("hook_set"))
                    {
                        code.Write("?ON_SET_VARIABLE_FUNCTION(input);");
                    }
                });
            }
        }