protected override void GenerateCodeInterfaceMethodsForField(MemberFieldDefinition field) { _codeBuilder.DecreaseIndent(); _codeBuilder.AppendLine(field.ProtectionLevel.GetCLRProtectionName() + ":"); _codeBuilder.IncreaseIndent(); base.GenerateCodeInterfaceMethodsForField(field); }
protected override void GenerateCodeMethodsForField(MemberFieldDefinition field) { _codeBuilder.AppendLine(GetCLRTypeName(field) + " get_" + field.NativeName + "();"); ParamDefinition param = new ParamDefinition(this.MetaDef, field, "value"); _codeBuilder.AppendLine("void set_" + field.NativeName + "(" + param.Type.GetCLRParamTypeName(param) + " value);"); }
protected virtual string GetNativeInvokationTarget(MemberFieldDefinition field) { if (!field.IsStatic) { if (field.ProtectionLevel == ProtectionLevel.Public) { return(GetNativeInvokationTarget() + "->" + field.NativeName); } else if (field.ProtectionLevel == ProtectionLevel.Protected) { string proxyName = NativeProtectedStaticsProxy.GetProtectedStaticsProxyName(_classDefinition); return("static_cast<" + proxyName + "*>(_native)->" + field.NativeName); } else { throw new Exception("Unexpected"); } } else { if (field.ProtectionLevel == ProtectionLevel.Public) { return(field.ContainingClass.FullyQualifiedNativeName + "::" + field.NativeName); } else { return(NativeProtectedStaticsProxy.GetProtectedStaticsProxyName(field.ContainingClass) + "::" + field.NativeName); } } }
public ClassDefinition(NamespaceDefinition nsDef, ClassDefinition surroundingClass, XmlElement elem) : base(nsDef, surroundingClass, elem) { if (GetType() == typeof(ClassDefinition) && elem.Name != "class") { throw new Exception("Not class element"); } foreach (XmlElement child in elem.ChildNodes) { switch (child.Name) { case "function": MemberMethodDefinition func = new MemberMethodDefinition(child, this); if (func.NativeName != "DECLARE_INIT_CLROBJECT_METHOD_OVERRIDE" && func.NativeName != "_Init_CLRObject" && !func.NativeName.StartsWith("OGRE_")) { AddNewFunction(func); } break; case "variable": MemberFieldDefinition field = new MemberFieldDefinition(child, this); if (field.NativeName != Name && field.NativeName != "DECLARE_CLRHANDLE" && field.NativeName != "_CLRHandle" && !field.NativeName.StartsWith("OGRE_")) { Members.Add(field); } break; case "inherits": List <string> ilist = new List <string>(); foreach (XmlElement sub in child.ChildNodes) { if (sub.Name != "baseClass") { throw new Exception("Unknown element; expected 'baseClass'"); } if (sub.InnerText != "") { if (sub.InnerText == "CLRObject") { this.AddAttribute(new CLRObjectAttribute()); this._isDirectSubclassOfCLRObject = true; } else { ilist.Add(sub.InnerText); } } } BaseClassesNames = ilist.ToArray(); break; default: AbstractTypeDefinition type = MetaDef.Factory.CreateType(Namespace, this, child); NestedTypes.Add(type); break; } } }
protected override void GenerateCodePropertyField(MemberFieldDefinition field) { //TODO comments for fields //AddComments(field); string ptype = GetCLRTypeName(field); _codeBuilder.AppendFormatIndent("property {0} {1}\n{{\n", ptype, CodeStyleDefinition.ToCamelCase(field.NativeName)); _codeBuilder.IncreaseIndent(); _codeBuilder.AppendLine(ptype + " get()\n{"); _codeBuilder.AppendLine("\treturn " + NameToPrivate(field) + ";"); _codeBuilder.AppendLine("}"); _codeBuilder.DecreaseIndent(); _codeBuilder.AppendLine("}"); }
protected override void GenerateCodeStaticField(MemberFieldDefinition field) { base.GenerateCodeStaticField(field); _codeBuilder.AppendIndent(""); if (field.IsConst) { _codeBuilder.Append("const "); } if (field.IsStatic) { _codeBuilder.Append("static "); } _codeBuilder.Append(GetCLRTypeName(field) + " " + field.NativeName + " = " + field.MemberType.ProduceNativeCallConversionCode(field.FullNativeName, field) + ";\n\n"); }
protected override void GenerateCodeMethodsForField(MemberFieldDefinition field) { string managedType = field.MemberType.ProduceNativeCallConversionCode(GetNativeInvokationTarget(field), field); _codeBuilder.AppendLine(GetCLRTypeName(field) + " " + GetClassName() + "::get_" + field.NativeName + "()"); _codeBuilder.AppendLine("{"); _codeBuilder.AppendLine("\treturn " + managedType + ";"); _codeBuilder.AppendLine("}"); ParamDefinition param = new ParamDefinition(this.MetaDef, field, "value"); _codeBuilder.AppendLine("void " + GetClassName() + "::set_" + field.NativeName + "(" + param.Type.GetCLRParamTypeName(param) + " value)"); _codeBuilder.AppendLine("{"); _codeBuilder.IncreaseIndent(); _codeBuilder.AppendLine(GetNativeInvokationTarget(field) + " = " + AddParameterConversion(param) + ";"); _codeBuilder.DecreaseIndent(); _codeBuilder.AppendLine("}"); }
public MemberFieldDefinition GetField(string name, bool raiseException) { MemberFieldDefinition field = null; foreach (MemberFieldDefinition f in Fields) { if (f.NativeName == name) { field = f; break; } } if (field == null && raiseException) { throw new Exception(String.Format("DefField not found for '{0}'", name)); } return(field); }
protected override string GetNativeInvokationTarget(MemberFieldDefinition field) { return("static_cast<" + ProxyName + "*>(_native)->" + _classDefinition.FullyQualifiedNativeName + "::" + field.NativeName); }
protected override void GenerateCodePropertyField(MemberFieldDefinition field) { string ptype = GetCLRTypeName(field); string pname = GetClassName() + "::" + (field.HasAttribute <RenameAttribute>() ? field.GetAttribute <RenameAttribute> ().Name : field.NativeName); if (field.IsNativeArray) { if (field.MemberType.HasAttribute <NativeValueContainerAttribute>() || (field.MemberType.IsValueType && !field.MemberType.HasWrapType(WrapTypes.NativePtrValueType))) { ParamDefinition tmpParam = new ParamDefinition(this.MetaDef, field, field.NativeName + "_array"); switch (field.PassedByType) { case PassedByType.Value: tmpParam.PassedByType = PassedByType.Pointer; break; case PassedByType.Pointer: tmpParam.PassedByType = PassedByType.PointerPointer; break; default: throw new Exception("Unexpected"); } ptype = GetCLRTypeName(tmpParam); string managedType = field.MemberType.ProduceNativeCallConversionCode(GetNativeInvokationTarget(field), tmpParam); _codeBuilder.AppendLine(ptype + " " + pname + "::get()"); _codeBuilder.AppendLine("{"); _codeBuilder.AppendLine("\treturn " + managedType + ";"); _codeBuilder.AppendLine("}"); } else { string managedType = field.MemberType.ProduceNativeCallConversionCode(GetNativeInvokationTarget(field) + "[index]", field); _codeBuilder.AppendLine(ptype + " " + pname + "::get(int index)"); _codeBuilder.AppendLine("{"); _codeBuilder.AppendLine("\tif (index < 0 || index >= " + field.ArraySize + ") throw gcnew IndexOutOfRangeException();"); _codeBuilder.AppendLine("\treturn " + managedType + ";"); _codeBuilder.AppendLine("}"); _codeBuilder.AppendLine("void " + pname + "::set(int index, " + ptype + " value )"); _codeBuilder.AppendLine("{"); _codeBuilder.IncreaseIndent(); _codeBuilder.AppendLine("if (index < 0 || index >= " + field.ArraySize + ") throw gcnew IndexOutOfRangeException();"); string param = AddParameterConversion(new ParamDefinition(this.MetaDef, field, "value")); _codeBuilder.AppendLine(GetNativeInvokationTarget(field) + "[index] = " + param + ";"); _codeBuilder.DecreaseIndent(); _codeBuilder.AppendLine("}"); } } else if (_cachedMembers.Contains(field)) { string managedType; if (field.MemberType.IsSTLContainer) { managedType = GetNativeInvokationTarget(field); } else { managedType = field.MemberType.ProduceNativeCallConversionCode(GetNativeInvokationTarget(field), field); } string priv = NameToPrivate(field); _codeBuilder.AppendLine(ptype + " " + pname + "::get()"); _codeBuilder.AppendLine("{"); if (!field.IsStatic) { _codeBuilder.AppendLine("\treturn ( CLR_NULL == " + priv + " ) ? (" + priv + " = " + managedType + ") : " + priv + ";"); } else { _codeBuilder.AppendLine("\treturn " + priv + ";"); } _codeBuilder.AppendLine("}"); } else { string managedType = field.MemberType.ProduceNativeCallConversionCode(GetNativeInvokationTarget(field), field); _codeBuilder.AppendLine(ptype + " " + pname + "::get()"); _codeBuilder.AppendLine("{"); _codeBuilder.AppendLine("\treturn " + managedType + ";"); _codeBuilder.AppendLine("}"); if ( // SharedPtrs can be copied by value. Let all be copied by value just to be sure (field.PassedByType == PassedByType.Pointer || field.Type.IsValueType) !IsReadOnly && !field.MemberType.HasAttribute <ReadOnlyForFieldsAttribute>() && !field.IsConst) { _codeBuilder.AppendLine("void " + pname + "::set( " + ptype + " value )"); _codeBuilder.AppendLine("{"); _codeBuilder.IncreaseIndent(); string param = AddParameterConversion(new ParamDefinition(this.MetaDef, field, "value")); _codeBuilder.AppendLine(GetNativeInvokationTarget(field) + " = " + param + ";"); _codeBuilder.DecreaseIndent(); _codeBuilder.AppendLine("}"); } } }
protected override void GenerateCodePropertyField(MemberFieldDefinition field) { //TODO comments for fields //AddComments(field); string ptype; if (field.IsNativeArray) { if (field.MemberType.HasAttribute <NativeValueContainerAttribute>() || (field.MemberType.IsValueType && !field.MemberType.HasWrapType(WrapTypes.NativePtrValueType))) { ParamDefinition tmpParam = new ParamDefinition(this.MetaDef, field, field.NativeName); switch (field.PassedByType) { case PassedByType.Value: tmpParam.PassedByType = PassedByType.Pointer; break; case PassedByType.Pointer: tmpParam.PassedByType = PassedByType.PointerPointer; break; default: throw new Exception("Unexpected"); } ptype = tmpParam.MemberTypeCLRName; _codeBuilder.AppendIndent(""); if (field.IsStatic) { _codeBuilder.Append("static "); } _codeBuilder.AppendFormat("property {0} {1}\n", ptype, field.NativeName); _codeBuilder.AppendLine("{"); _codeBuilder.AppendLine(field.ProtectionLevel.GetCLRProtectionName() + ":"); _codeBuilder.AppendLine("\t" + ptype + " get();"); _codeBuilder.AppendLine("}"); } else { ptype = field.MemberTypeCLRName; _codeBuilder.AppendIndent(""); if (field.IsStatic) { _codeBuilder.Append("static "); } _codeBuilder.AppendFormat("property {0} {1}[int]\n", ptype, field.NativeName); _codeBuilder.AppendLine("{"); _codeBuilder.AppendLine(field.ProtectionLevel.GetCLRProtectionName() + ":"); _codeBuilder.AppendLine("\t" + ptype + " get(int index);"); _codeBuilder.AppendLine("\tvoid set(int index, " + ptype + " value);"); _codeBuilder.AppendLine("}"); } } else if (_cachedMembers.Contains(field)) { ptype = field.MemberTypeCLRName; _codeBuilder.AppendIndent(""); if (field.IsStatic) { _codeBuilder.Append("static "); } _codeBuilder.AppendFormat("property {0} {1}\n", ptype, field.NativeName); _codeBuilder.AppendLine("{"); _codeBuilder.AppendLine(field.ProtectionLevel.GetCLRProtectionName() + ":"); _codeBuilder.AppendLine("\t" + ptype + " get();"); _codeBuilder.AppendLine("}"); } else { ptype = GetCLRTypeName(field); _codeBuilder.AppendIndent(""); if (field.IsStatic) { _codeBuilder.Append("static "); } if (field.HasAttribute <RenameAttribute>()) { _codeBuilder.AppendFormat("property {0} {1}\n", ptype, field.GetAttribute <RenameAttribute>().Name); } else { _codeBuilder.AppendFormat("property {0} {1}\n", ptype, field.NativeName); } _codeBuilder.AppendLine("{"); _codeBuilder.AppendLine(field.ProtectionLevel.GetCLRProtectionName() + ":"); _codeBuilder.AppendLine("\t" + ptype + " get();"); if ( // SharedPtrs can be copied by value. Let all be copied by value just to be sure (field.PassedByType == PassedByType.Pointer || field.Type.IsValueType) !IsReadOnly && !field.MemberType.HasAttribute <ReadOnlyForFieldsAttribute>() && !field.IsConst) { _codeBuilder.AppendLine(field.ProtectionLevel.GetCLRProtectionName() + ":"); _codeBuilder.AppendLine("\tvoid set(" + ptype + " value);"); } _codeBuilder.AppendLine("}"); } }
protected virtual void GenerateCodeInterfaceMethodsForField(MemberFieldDefinition field) { GenerateCodeMethodsForField(field); }
protected virtual void GenerateCodeInterfacePropertyField(MemberFieldDefinition field) { GenerateCodePropertyField(field); }
protected virtual void GenerateCodePropertyField(MemberFieldDefinition field) { }
protected virtual void GenerateCodeStaticField(MemberFieldDefinition field) { }