public static EocDll Translate(ProjectConverter P, DllDeclareInfo rawInfo) { var libraryName = rawInfo.LibraryName; var entryPoint = rawInfo.EntryPoint; if (string.IsNullOrEmpty(entryPoint)) { entryPoint = P.IdToNameMap.GetUserDefinedName(rawInfo.Id); } var name = P.GetUserDefinedName_SimpleCppName(rawInfo.Id); var info = new EocCmdInfo() { ReturnDataType = rawInfo.ReturnDataType == 0 ? null : EocDataTypes.Translate(P, rawInfo.ReturnDataType), CppName = $"{P.DllNamespace}::{name}", Parameters = rawInfo.Parameters.Select((x) => { var dataType = EocDataTypes.Translate(P, x.DataType, x.ArrayParameter); return(new EocParameterInfo() { ByRef = x.ByRef || x.ArrayParameter || !EocDataTypes.IsValueType(dataType), Optional = false, VarArgs = false, DataType = dataType, CppName = P.GetUserDefinedName_SimpleCppName(x.Id) }); }).ToList() }; return(new EocDll(P, name, info, libraryName, entryPoint)); }
public EocDllExport(ProjectConverter p, string name, EocCmdInfo info, string exportId) { P = p ?? throw new ArgumentNullException(nameof(p)); Name = name ?? throw new ArgumentNullException(nameof(name)); Info = info ?? throw new ArgumentNullException(nameof(info)); ExportId = exportId ?? Name; }
public EocDll(ProjectConverter p, string name, EocCmdInfo info, string libraryName, string entryPoint) { P = p ?? throw new ArgumentNullException(nameof(p)); Name = name ?? throw new ArgumentNullException(nameof(name)); Info = info ?? throw new ArgumentNullException(nameof(info)); LibraryName = libraryName ?? throw new ArgumentNullException(nameof(libraryName)); EntryPoint = entryPoint ?? throw new ArgumentNullException(nameof(EntryPoint)); }
internal void WriteMethodHeader(CodeWriter writer, EocCmdInfo eocCmdInfo, string name, bool isVirtual, string className = null, bool writeDefaultValue = true) { var paramName = GetParamNameFromInfo(eocCmdInfo.Parameters); writer.NewLine(); if (isVirtual) { writer.Write("virtual "); } var numOfOptionalAtEnd = 0; for (int i = eocCmdInfo.Parameters.Count - 1; i >= 0; i--) { if (eocCmdInfo.Parameters[i].Optional) { numOfOptionalAtEnd++; } else { break; } } var startOfOptionalAtEnd = eocCmdInfo.Parameters.Count - numOfOptionalAtEnd; writer.Write(eocCmdInfo.ReturnDataType == null ? "void" : eocCmdInfo.ReturnDataType.ToString()); writer.Write(" __stdcall "); if (className != null) { writer.Write(className); writer.Write("::"); } writer.Write(name); writer.Write("("); for (int i = 0; i < eocCmdInfo.Parameters.Count; i++) { if (i != 0) { writer.Write(", "); } writer.Write(GetParameterTypeString(eocCmdInfo.Parameters[i])); writer.Write(" "); writer.Write(paramName[i]); if (writeDefaultValue && i >= startOfOptionalAtEnd) { writer.Write(" = std::nullopt"); } } writer.Write(")"); }
internal void DefineMethod(CodeWriter writer, EocCmdInfo eocCmdInfo, string name, bool isVirtual) { WriteMethodHeader(writer, eocCmdInfo, name, isVirtual, null, true); writer.Write(";"); }
public void AnalyzeDependencies(AdjacencyGraph <string, IEdge <string> > graph, EocCmdInfo info, string refId = null) { if (info == null) { return; } refId = refId ?? info.CppName; graph.AddVertex(refId); AnalyzeDependencies(graph, refId, info.ReturnDataType); foreach (var x in info.Parameters) { var varRefId = $"{refId}|{x.Name}"; graph.AddVerticesAndEdge(new Edge <string>(refId, varRefId)); AnalyzeDependencies(graph, varRefId, x.DataType); } }