17
17
public class Serializer : IWrapper, IDisposable {
19
IntPtr serializer = IntPtr.Zero;
21
bool disposed = false;
23
public IntPtr Handle {
24
get { return serializer; }
19
private HandleRef handle;
21
private bool disposed = false;
22
private World world = Redland.World.AddReference ();
24
public HandleRef Handle {
25
get { return handle; }
28
[DllImport ("librdf")]
29
static extern IntPtr librdf_new_serializer (HandleRef world, IntPtr name, IntPtr mime_type, IntPtr type_uri);
27
31
public Serializer (string name, string mime_type, Uri type_uri)
28
: this (Redland.World, name, mime_type, type_uri)
32
[DllImport ("librdf")]
33
static extern IntPtr librdf_new_serializer (IntPtr world, IntPtr name, IntPtr mime_type, IntPtr type_uri);
35
private Serializer (World world, string name, string mime_type, Uri type_uri)
37
IntPtr iname = Marshal.StringToHGlobalAuto (name);
38
IntPtr imime_type = Marshal.StringToHGlobalAuto (mime_type);
41
serializer = librdf_new_serializer (IntPtr.Zero, iname, imime_type, IntPtr.Zero);
43
serializer = librdf_new_serializer (IntPtr.Zero, iname, imime_type, type_uri.Handle);
44
else if (type_uri == null)
45
serializer = librdf_new_serializer (world.Handle, iname, imime_type, IntPtr.Zero);
33
IntPtr iname = Util.StringToHGlobalUTF8 (name);
34
IntPtr imime_type = Util.StringToHGlobalUTF8 (mime_type);
35
IntPtr serializer = IntPtr.Zero;
38
serializer = librdf_new_serializer
39
(world.Handle, iname, imime_type, IntPtr.Zero);
47
serializer = librdf_new_serializer (world.Handle, iname, imime_type, type_uri.Handle);
48
Marshal.FreeHGlobal (iname);
49
Marshal.FreeHGlobal (imime_type);
41
serializer = librdf_new_serializer
42
(world.Handle, iname, imime_type, type_uri.Handle.Handle);
44
handle = new HandleRef (this, serializer);
45
Marshal.FreeHGlobal (iname);
46
Marshal.FreeHGlobal (imime_type);
53
49
[DllImport ("librdf")]
54
static extern void librdf_free_serializer (IntPtr serializer);
50
static extern void librdf_free_serializer (HandleRef serializer);
56
52
protected void Dispose (bool disposing)
59
55
// if disposing is true, then dispose of managed
62
if (serializer != IntPtr.Zero) {
63
librdf_free_serializer (serializer);
64
serializer = IntPtr.Zero;
58
if (handle.Handle != IntPtr.Zero) {
59
librdf_free_serializer (handle);
60
handle = new HandleRef (this, IntPtr.Zero);
62
world.RemoveReference ();
81
79
[DllImport ("librdf")]
82
static extern int librdf_serializer_serialize_model (IntPtr serializer, IntPtr file, IntPtr base_uri, IntPtr model);
80
static extern int librdf_serializer_serialize_model (HandleRef serializer, IntPtr file, HandleRef base_uri, HandleRef model);
84
82
public int SerializeModel (IntPtr file, Uri base_uri, Model model)
86
84
// FIXME: throw exceptions instead of using ret code?
87
return librdf_serializer_serialize_model (serializer, file, base_uri.Handle, model.Handle);
85
return librdf_serializer_serialize_model (handle, file, base_uri.Handle, model.Handle);
91
89
[DllImport ("librdf")]
92
static extern int librdf_serializer_serialize_model_to_file (IntPtr serializer, IntPtr name, IntPtr base_uri, IntPtr model);
90
static extern int librdf_serializer_serialize_model_to_file (HandleRef serializer, IntPtr name, HandleRef base_uri, HandleRef model);
94
92
public int SerializeModel (string name, Uri base_uri, Model model)
96
IntPtr iname = Marshal.StringToHGlobalAuto (name);
97
int ret = librdf_serializer_serialize_model_to_file (serializer, iname, base_uri.Handle, model.Handle);
94
IntPtr iname = Util.StringToHGlobalUTF8 (name);
95
int ret = librdf_serializer_serialize_model_to_file (handle, iname, base_uri.Handle, model.Handle);
98
96
Marshal.FreeHGlobal (iname);
99
97
// FIXME: throw exceptions instead of using ret code?