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++; }
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++; }
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++; }
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++; }
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++; }