コード例 #1
0
 protected override void GenerateCodeInterfaceMethodsForField(MemberFieldDefinition field)
 {
     _codeBuilder.DecreaseIndent();
     _codeBuilder.AppendLine(field.ProtectionLevel.GetCLRProtectionName() + ":");
     _codeBuilder.IncreaseIndent();
     base.GenerateCodeInterfaceMethodsForField(field);
 }
コード例 #2
0
        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);");
        }
コード例 #3
0
 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);
         }
     }
 }
コード例 #4
0
        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;
                }
            }
        }
コード例 #5
0
        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("}");
        }
コード例 #6
0
 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");
 }
コード例 #7
0
        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("}");
        }
コード例 #8
0
        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);
        }
コード例 #9
0
 protected override string GetNativeInvokationTarget(MemberFieldDefinition field)
 {
     return("static_cast<" + ProxyName + "*>(_native)->" + _classDefinition.FullyQualifiedNativeName + "::" + field.NativeName);
 }
コード例 #10
0
        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("}");
                }
            }
        }
コード例 #11
0
        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("}");
            }
        }
コード例 #12
0
 protected virtual void GenerateCodeInterfaceMethodsForField(MemberFieldDefinition field)
 {
     GenerateCodeMethodsForField(field);
 }
コード例 #13
0
 protected virtual void GenerateCodeInterfacePropertyField(MemberFieldDefinition field)
 {
     GenerateCodePropertyField(field);
 }
コード例 #14
0
 protected virtual void GenerateCodePropertyField(MemberFieldDefinition field)
 {
 }
コード例 #15
0
 protected virtual void GenerateCodeStaticField(MemberFieldDefinition field)
 {
 }