コード例 #1
0
        public override void Generate(GenerationInfo gen_info)
        {
            Method copy = methods["Copy"] as Method;

            methods.Remove("Copy");
            methods.Remove("Free");

            gen_info.CurrentType = Name;

            StreamWriter sw = gen_info.Writer = gen_info.OpenStream(Name);

            base.Generate(gen_info);
            sw.WriteLine("\t\t[DllImport(\"glibsharpglue-2\", CallingConvention = CallingConvention.Cdecl)]");
            sw.WriteLine("\t\tstatic extern IntPtr glibsharp_value_get_boxed (ref GLib.Value val);");
            sw.WriteLine();
            sw.WriteLine("\t\t[DllImport(\"glibsharpglue-2\", CallingConvention = CallingConvention.Cdecl)]");
            sw.WriteLine("\t\tstatic extern void glibsharp_value_set_boxed (ref GLib.Value val, ref " + QualifiedName + " boxed);");
            sw.WriteLine();
            sw.WriteLine("\t\tpublic static explicit operator GLib.Value (" + QualifiedName + " boxed)");
            sw.WriteLine("\t\t{");

            sw.WriteLine("\t\t\tGLib.Value val = GLib.Value.Empty;");
            sw.WriteLine("\t\t\tval.Init (" + Name + "Attribute.GType);");
            sw.WriteLine("\t\t\tglibsharp_value_set_boxed (ref val, ref boxed);");
            sw.WriteLine("\t\t\treturn val;");
            sw.WriteLine("\t\t}");
            sw.WriteLine();
            sw.WriteLine("\t\tpublic static explicit operator " + QualifiedName + " (GLib.Value val)");
            sw.WriteLine("\t\t{");

            sw.WriteLine("\t\t\tIntPtr boxed_ptr = glibsharp_value_get_boxed (ref val);");
            sw.WriteLine("\t\t\treturn New (boxed_ptr);");
            sw.WriteLine("\t\t}");

            if (copy != null && copy.IsDeprecated)
            {
                sw.WriteLine();
                sw.WriteLine("\t\t[Obsolete(\"This is a no-op\")]");
                sw.WriteLine("\t\tpublic " + QualifiedName + " Copy() {");
                sw.WriteLine("\t\t\treturn this;");
                sw.WriteLine("\t\t}");
            }

            sw.WriteLine("#endregion");
            AppendCustom(sw, gen_info.CustomDir);
            sw.WriteLine("\t}");
            var method = GetMethod("GetType") ?? GetMethod("GetGType");

            if (method != null)
            {
                AttributeHelper.Gen(sw, Name, LibraryName, method.CName);
            }
            sw.WriteLine("}");
            sw.Close();
            gen_info.Writer = null;
            Statistics.BoxedCount++;
        }
コード例 #2
0
        public override void Generate(GenerationInfo gen_info)
        {
            StreamWriter sw = gen_info.OpenStream(Name);

            sw.WriteLine("namespace " + NS + " {");
            sw.WriteLine();
            sw.WriteLine("\tusing System;");
            sw.WriteLine("\tusing System.Runtime.InteropServices;");
            sw.WriteLine();

            sw.WriteLine("#region Autogenerated code");

            if (Elem.GetAttribute("type") == "flags")
            {
                sw.WriteLine("\t[Flags]");
            }
            if (Elem.HasAttribute("gtype"))
            {
                sw.WriteLine("\t[{0}]", Name);
            }

            string access = IsInternal ? "internal" : "public";

            sw.WriteLine("\t" + access + " enum " + Name + enum_type + " {");
            sw.WriteLine();

            foreach (string member in members)
            {
                sw.WriteLine(member);
            }

            sw.WriteLine("\t}");

            if (Elem.HasAttribute("gtype"))
            {
                AttributeHelper.Gen(sw, Name, LibraryName, Elem.GetAttribute("gtype"));
            }

            sw.WriteLine("#endregion");
            sw.WriteLine("}");
            sw.Close();
            Statistics.EnumCount++;
        }
コード例 #3
0
        public override void Generate(GenerationInfo gen_info)
        {
            gen_info.CurrentType = Name;

            StreamWriter sw = gen_info.Writer = gen_info.OpenStream(Name);

            base.Generate(gen_info);
            sw.WriteLine("#endregion");
            AppendCustom(sw, gen_info.CustomDir);
            sw.WriteLine("\t}");
            var method = GetMethod("GetType") ?? GetMethod("GetGType");

            if (method != null)
            {
                AttributeHelper.Gen(sw, Name, LibraryName, method.CName);
            }
            sw.WriteLine("}");
            sw.Close();
            gen_info.Writer = null;
            Statistics.StructCount++;
        }
コード例 #4
0
        public override void Generate(GenerationInfo gen_info)
        {
            gen_info.CurrentType = Name;

            StreamWriter sw = gen_info.Writer = gen_info.OpenStream(Name);

            sw.WriteLine("namespace " + NS + " {");
            sw.WriteLine();
            sw.WriteLine("\tusing System;");
            sw.WriteLine("\tusing System.Collections;");
            sw.WriteLine("\tusing System.Runtime.InteropServices;");
            sw.WriteLine();

            sw.WriteLine("#region Autogenerated code");

            SymbolTable table = SymbolTable.Table;

            Method ref_, unref, dispose;

            GetSpecialMethods(out ref_, out unref, out dispose);

            if (IsDeprecated)
            {
                sw.WriteLine("\t[Obsolete]");
            }
            GenerateAttribute(sw);
            sw.Write("\t{0} class " + Name, IsInternal ? "internal" : "public");
            string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));

            if (cs_parent != "")
            {
                sw.Write(" : " + cs_parent);
            }
            else
            {
                sw.Write(" : GLib.Opaque");
            }
            sw.WriteLine(" {");
            sw.WriteLine();

            GenFields(gen_info);
            GenMethods(gen_info, null, null);
            GenCtors(gen_info);

            if (ref_ != null)
            {
                ref_.GenerateImport(sw);
                sw.WriteLine("\t\tprotected override void Ref (IntPtr raw)");
                sw.WriteLine("\t\t{");
                sw.WriteLine("\t\t\tif (!Owned) {");
                sw.WriteLine("\t\t\t\t" + ref_.CName + " (raw);");
                sw.WriteLine("\t\t\t\tOwned = true;");
                sw.WriteLine("\t\t\t}");
                sw.WriteLine("\t\t}");
                sw.WriteLine();

                if (ref_.IsDeprecated)
                {
                    sw.WriteLine("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
                    if (ref_.ReturnType == "void")
                    {
                        sw.WriteLine("\t\tpublic void Ref () {}");
                    }
                    else
                    {
                        sw.WriteLine("\t\tpublic " + Name + " Ref () { return this; }");
                    }
                    sw.WriteLine();
                }
            }

            if (unref != null)
            {
                unref.GenerateImport(sw);
                sw.WriteLine("\t\tprotected override void Unref (IntPtr raw)");
                sw.WriteLine("\t\t{");
                sw.WriteLine("\t\t\tif (Owned) {");
                sw.WriteLine("\t\t\t\t" + unref.CName + " (raw);");
                sw.WriteLine("\t\t\t\tOwned = false;");
                sw.WriteLine("\t\t\t}");
                sw.WriteLine("\t\t}");
                sw.WriteLine();

                if (unref.IsDeprecated)
                {
                    sw.WriteLine("\t\t[Obsolete(\"" + QualifiedName + " is now refcounted automatically\")]");
                    sw.WriteLine("\t\tpublic void Unref () {}");
                    sw.WriteLine();
                }
            }

            if (dispose != null)
            {
                dispose.GenerateImport(sw);
                sw.WriteLine("\t\tprotected override void Free (IntPtr raw)");
                sw.WriteLine("\t\t{");
                sw.WriteLine("\t\t\t" + dispose.CName + " (raw);");
                sw.WriteLine("\t\t}");
                sw.WriteLine();

                if (dispose.IsDeprecated)
                {
                    sw.WriteLine("\t\t[Obsolete(\"" + QualifiedName + " is now freed automatically\")]");
                    sw.WriteLine("\t\tpublic void " + dispose.Name + " () {}");
                    sw.WriteLine();
                }
            }

#if false
            Method copy = Methods ["Copy"] as Method;
            if (copy != null && copy.Parameters.Count == 0)
            {
                sw.WriteLine("\t\tprotected override GLib.Opaque Copy (IntPtr raw)");
                sw.WriteLine("\t\t{");
                sw.WriteLine("\t\t\tGLib.Opaque result = new " + QualifiedName + " (" + copy.CName + " (raw));");
                sw.WriteLine("\t\t\tresult.Owned = true;");
                sw.WriteLine("\t\t\treturn result;");
                sw.WriteLine("\t\t}");
                sw.WriteLine();
            }
#endif
            sw.WriteLine("#endregion");

            AppendCustom(sw, gen_info.CustomDir);

            sw.WriteLine("\t}");
            var parentGType = GetParentWithGType(this);
            if (parentGType == this)
            {
                var method = parentGType.GetMethod("GetType") ?? parentGType.GetMethod("GetGType");
                AttributeHelper.Gen(sw, Name, LibraryName, method.CName);
            }
            sw.WriteLine("}");

            sw.Close();
            gen_info.Writer = null;
            Statistics.OpaqueCount++;
        }
コード例 #5
0
        public override void Generate(GenerationInfo gen_info)
        {
            gen_info.CurrentType = Name;

            string        asm_name = gen_info.AssemblyName.Length == 0 ? NS.ToLower() + "-sharp" : gen_info.AssemblyName;
            DirectoryInfo di       = GetDirectoryInfo(gen_info.Dir, asm_name);

            StreamWriter sw = gen_info.Writer = gen_info.OpenStream(Name);

            sw.WriteLine("namespace " + NS + " {");
            sw.WriteLine();
            sw.WriteLine("\tusing System;");
            sw.WriteLine("\tusing System.Collections;");
            sw.WriteLine("\tusing System.Runtime.InteropServices;");
            sw.WriteLine();

            SymbolTable table = SymbolTable.Table;

            sw.WriteLine("#region Autogenerated code");
            if (IsDeprecated)
            {
                sw.WriteLine("\t[Obsolete]");
            }
            foreach (string attr in custom_attrs)
            {
                sw.WriteLine("\t" + attr);
            }
            GenerateAttribute(sw);
            sw.Write("\t{0} {1}class " + Name, IsInternal ? "internal" : "public", IsAbstract ? "abstract " : "");
            string cs_parent = table.GetCSType(Elem.GetAttribute("parent"));

            if (cs_parent != "")
            {
                di.objects.Add(CName, QualifiedName);
                sw.Write(" : " + cs_parent);
            }
            foreach (string iface in interfaces)
            {
                if (Parent != null && Parent.Implements(iface))
                {
                    continue;
                }
                sw.Write(", " + table.GetCSType(iface));
            }
            foreach (string iface in managed_interfaces)
            {
                if (Parent != null && Parent.Implements(iface))
                {
                    continue;
                }
                sw.Write(", " + iface);
            }
            sw.WriteLine(" {");
            sw.WriteLine();

            GenCtors(gen_info);
            GenProperties(gen_info, null);
            GenFields(gen_info);
            GenChildProperties(gen_info);

            bool has_sigs = (sigs != null && sigs.Count > 0);

            if (!has_sigs)
            {
                foreach (string iface in interfaces)
                {
                    ClassBase igen = table.GetClassGen(iface);
                    if (igen != null && igen.Signals != null)
                    {
                        has_sigs = true;
                        break;
                    }
                }
            }

            if (has_sigs && Elem.HasAttribute("parent"))
            {
                GenSignals(gen_info, null);
            }

            if (vm_nodes.Count > 0)
            {
                if (gen_info.GlueEnabled)
                {
                    GenVirtualMethods(gen_info);
                }
                else
                {
                    Statistics.VMIgnored       = true;
                    Statistics.ThrottledCount += vm_nodes.Count;
                }
            }

            GenMethods(gen_info, null, null);

            if (interfaces.Count != 0)
            {
                Hashtable all_methods = new Hashtable();
                foreach (Method m in Methods.Values)
                {
                    all_methods[m.Name] = m;
                }
                Hashtable collisions = new Hashtable();
                foreach (string iface in interfaces)
                {
                    ClassBase igen = table.GetClassGen(iface);
                    foreach (Method m in igen.Methods.Values)
                    {
                        Method collision = all_methods[m.Name] as Method;
                        if (collision != null && collision.Signature.Types == m.Signature.Types)
                        {
                            collisions[m.Name] = true;
                        }
                        else
                        {
                            all_methods[m.Name] = m;
                        }
                    }
                }

                foreach (string iface in interfaces)
                {
                    if (Parent != null && Parent.Implements(iface))
                    {
                        continue;
                    }
                    ClassBase igen = table.GetClassGen(iface);
                    igen.GenMethods(gen_info, collisions, this);
                    igen.GenProperties(gen_info, this);
                    igen.GenSignals(gen_info, this);
                }
            }

            foreach (XmlElement str in strings)
            {
                sw.Write("\t\tpublic static string " + str.GetAttribute("name"));
                sw.WriteLine(" {\n\t\t\t get { return \"" + str.GetAttribute("value") + "\"; }\n\t\t}");
            }

            if (cs_parent != String.Empty && GetExpected(CName) != QualifiedName)
            {
                sw.WriteLine();
                sw.WriteLine("\t\tstatic " + Name + " ()");
                sw.WriteLine("\t\t{");
                sw.WriteLine("\t\t\tGtkSharp." + Studlify(asm_name) + ".ObjectManager.Initialize ();");
                sw.WriteLine("\t\t}");
            }

            sw.WriteLine("#endregion");
            AppendCustom(sw, gen_info.CustomDir);

            sw.WriteLine("\t}");
            var parentGType = GetParentWithGType(this);

            if (parentGType == this)
            {
                var method = parentGType.GetMethod("GetType") ?? parentGType.GetMethod("GetGType");
                AttributeHelper.Gen(sw, Name, LibraryName, method.CName);
            }
            sw.WriteLine("}");

            sw.Close();
            gen_info.Writer = null;
            Statistics.ObjectCount++;
        }