private static void WriteCoordSetFunction(Specification S, G25.CG.Shared.CGdata cgd, G25.FloatType FT, string gmvTypeName, int groupIdx, int elementIdx, int groupSize, RefGA.BasisBlade B) { StringBuilder declSB = cgd.m_declSB; StringBuilder defSB = (S.m_inlineSet) ? cgd.m_inlineDefSB : cgd.m_defSB; String bladeName = B.ToLangString(S.m_basisVectorNames); string varName = "A"; string coordName = bladeName + "_coord"; // do we inline this func? string inlineStr = G25.CG.Shared.Util.GetInlineString(S, S.m_inlineSet, " "); string funcName = gmvTypeName + "_set_" + bladeName; string funcDecl = inlineStr + "void " + funcName + "(" + gmvTypeName + " *" + varName + ", " + FT.type + " " + coordName + ")"; declSB.AppendLine("/** Sets the " + B.ToString(S.m_basisVectorNames) + " coordinate of '" + varName + "' */"); declSB.Append(funcDecl); declSB.AppendLine(";"); defSB.AppendLine(""); defSB.Append(funcDecl); defSB.AppendLine(" {"); defSB.AppendLine("\t" + gmvTypeName + "_reserveGroup_" + groupIdx + "(" + varName + ");"); defSB.AppendLine("\t" + varName + "->c[" + S.m_namespace + "_mvSize[" + varName + "->gu & " + ((1 << groupIdx) - 1) + "] + " + elementIdx + "] = " + coordName + ";"); defSB.AppendLine("}"); }
private static void WriteCoordExtractFunction(Specification S, G25.CG.Shared.CGdata cgd, G25.FloatType FT, string gmvTypeName, int groupIdx, int elementIdx, RefGA.BasisBlade B) { StringBuilder declSB = cgd.m_declSB; StringBuilder defSB = (S.m_inlineSet) ? cgd.m_inlineDefSB : cgd.m_defSB; String bladeName = B.ToLangString(S.m_basisVectorNames); string varName = "A"; // do we inline this func? string inlineStr = G25.CG.Shared.Util.GetInlineString(S, S.m_inlineSet, " "); string funcName = gmvTypeName + "_" + bladeName; string funcDecl = inlineStr + FT.type + " " + funcName + "(const " + gmvTypeName + " *" + varName + ")"; string comment = "/** Returns the " + B.ToString(S.m_basisVectorNames) + " coordinate of '" + varName + "' */"; // declSB.AppendLine("/* group : " + groupIdx + " element: " + elementIdx + "*/"); declSB.AppendLine(comment); declSB.Append(funcDecl); declSB.AppendLine(";"); defSB.AppendLine(""); defSB.Append(funcDecl); defSB.AppendLine(" {"); defSB.AppendLine("\treturn (" + varName + "->gu & " + (1 << groupIdx) + ") ? " + varName + "->c[" + S.m_namespace + "_mvSize[" + varName + "->gu & " + ((1 << groupIdx) - 1) + "] + " + elementIdx + "] : " + FT.DoubleToString(S, 0.0) + ";"); defSB.AppendLine("}"); // add extract coord extract function for scalar if (B.Grade() == 0) { string floatFuncName = gmvTypeName + "_" + FT.type; string floatFuncDecl = inlineStr + FT.type + " " + floatFuncName + "(const " + gmvTypeName + " *" + varName + ")"; declSB.AppendLine(comment); declSB.Append(floatFuncDecl); declSB.AppendLine(";"); defSB.Append(floatFuncDecl); defSB.AppendLine(" {"); defSB.AppendLine("\treturn " + funcName + "(" + varName + ");"); defSB.AppendLine("}"); } }
private static void WriteSetCoordFunction(StringBuilder SB, Specification S, G25.CG.Shared.CGdata cgd, G25.FloatType FT, string gmvTypeName, int groupIdx, int elementIdx, int groupSize, RefGA.BasisBlade B) { string bladeName = B.ToLangString(S.m_basisVectorNames); string funcName = G25.CG.Shared.Main.SETTER_PREFIX + bladeName; string coordName = "val"; string funcDecl = "\t" + Keywords.PublicAccessModifier(S) + " void " + funcName + "(" + FT.type + " " + coordName + ") "; SB.AppendLine("\t/// Sets the " + bladeName + " coordinate of this " + gmvTypeName + "."); SB.Append(funcDecl); SB.AppendLine(" {"); SB.AppendLine("\t\t" + GetReserveGroupString(S, groupIdx) + "();"); SB.AppendLine("\t\tm_c[" + groupIdx + "][" + elementIdx + "] = " + coordName + ";"); SB.AppendLine("\t}"); }
private static void WriteGetCoordFunction(StringBuilder SB, Specification S, G25.CG.Shared.CGdata cgd, G25.FloatType FT, string gmvTypeName, int groupIdx, int elementIdx, RefGA.BasisBlade B) { string bladeName = B.ToLangString(S.m_basisVectorNames); string funcName = G25.CG.Shared.Main.GETTER_PREFIX + bladeName; string funcDecl = "\t" + Keywords.PublicAccessModifier(S) + " " + FT.type + " " + funcName + "() "; int nbTabs = 1; new G25.CG.Shared.Comment("Returns the " + bladeName + " coordinate of this " + gmvTypeName).Write(SB, S, nbTabs); SB.Append(funcDecl); SB.AppendLine(" {"); SB.AppendLine("\t\treturn (m_c[" + groupIdx + "] == null) ? " + FT.DoubleToString(S, 0.0) + ": " + "m_c[" + groupIdx + "][" + elementIdx + "];"); SB.AppendLine("\t}"); }
private static void WriteSetCoordFunction(Specification S, G25.CG.Shared.CGdata cgd, G25.FloatType FT, StringBuilder SB, string gmvTypeName, int groupIdx, int elementIdx, int groupSize, RefGA.BasisBlade B) { string bladeName = B.ToLangString(S.m_basisVectorNames); // do we inline this func? string inlineStr = "inline "; string funcName = MainGenerator.SETTER_PREFIX + bladeName; string coordName = "val"; string funcDecl = "\t" + inlineStr + "void " + funcName + "(" + FT.type + " " + coordName + ") "; SB.AppendLine("\t/// Sets the " + bladeName + " coordinate of this " + gmvTypeName + "."); SB.Append(funcDecl); SB.AppendLine(" {"); SB.AppendLine("\t\treserveGroup_" + groupIdx + "();"); SB.AppendLine("\t\tm_c[" + S.m_namespace + "_mvSize[m_gu & " + ((1 << groupIdx) - 1) + "] + " + elementIdx + "] = " + coordName + ";"); SB.AppendLine("\t}"); }
private static void WriteGetCoordFunction(Specification S, G25.CG.Shared.CGdata cgd, G25.FloatType FT, StringBuilder SB, string gmvTypeName, int groupIdx, int elementIdx, RefGA.BasisBlade B) { string bladeName = B.ToLangString(S.m_basisVectorNames); // do we inline this func? string inlineStr = "inline "; string funcName = MainGenerator.GETTER_PREFIX + bladeName; string funcDecl = "\t" + inlineStr + FT.type + " " + funcName + "() const"; SB.AppendLine("\t/// Returns the " + bladeName + " coordinate of this " + gmvTypeName + "."); SB.Append(funcDecl); SB.AppendLine(" {"); SB.AppendLine("\t\treturn (m_gu & " + (1 << groupIdx) + ") ? " + "m_c[" + S.m_namespace + "_mvSize[m_gu & " + ((1 << groupIdx) - 1) + "] + " + elementIdx + "] : " + FT.DoubleToString(S, 0.0) + ";"); SB.AppendLine("\t}"); }