2
* The contects of this file is in the Public Domain.
4
* Created by Gustav Hartivgsson.
8
public delegate void FreeFunc (void * ptr);
1
namespace VQDR.Common.Utils {
11
2
public int str_cmp (string a, string b) {
12
3
return a.collate (b);
16
6
public void print_ln (string str, ...) {
17
7
var va = va_list ();
19
stdout.vprintf (tmp, va);
23
public void err_print_ln (string str, ...) {
26
stderr.vprintf (tmp, va);
9
// Reallocate the string as it is not owned by the function.
12
// Hopefully this does not create any memony leaks. :-)
13
print (tmp.vprintf (va));
30
16
public string object_to_string (GLib.Object obj) {
31
StringBuilder strbldr = new StringBuilder ();
32
internal_object_to_string (obj, ref strbldr);
37
string collect_string (string[] segments, string? separator = null) {
38
var _len = segments.length;
45
StringBuilder strbldr = new StringBuilder ();
46
if (separator != null) {
47
for (var i = 0; i <= _len; i++) {
48
strbldr.append (segments[i]);
50
strbldr.append (separator);
54
for (var i = 0; i <= _len; i++) {
55
strbldr.append (segments[i]);
62
internal unowned StringBuilder internal_object_to_string (GLib.Object obj,
63
ref StringBuilder str_builder,
65
GLib.ObjectClass obj_class =
66
(GLib.ObjectClass) obj.get_type ().class_ref ();
68
for (var i = 0; i < nesting; i++) {
69
str_builder.append ("\t");
72
str_builder.append ("((")
17
GLib.ObjectClass real_obj = (GLib.ObjectClass) obj.get_type ().class_ref ();
19
var str_builder = new GLib.StringBuilder ();
22
str_builder.append ("(")
73
23
.append (obj.get_type().name ())
74
.append_printf (")->(%p):\n", obj);
76
foreach (GLib.ParamSpec ps in obj_class.list_properties ()) {
26
foreach (GLib.ParamSpec ps in real_obj.list_properties ()) {
78
28
if (ps.value_type == 0 || ps.value_type == GLib.Type.INVALID) {
86
36
if (prop_val.type () == GLib.Type.INVALID || prop_val.type () == 0) {
90
40
obj.get_property (prop_name, ref prop_val);
92
for (var i = 0; i < nesting; i++) {
93
str_builder.append ("\t");
96
str_builder.append ("\t(")
43
str_builder.append ("\t (")
97
44
.append (prop_val.type_name ())
99
46
.append (prop_name)
102
50
switch (prop_val.type ()) {
103
51
case (GLib.Type.STRING):
104
if (prop_val.dup_string () == null) {
105
str_builder.append ("(null)");
107
str_builder.append (prop_val.dup_string ());
52
str_builder.append (prop_val.get_string ());
110
54
case (GLib.Type.INT):
111
55
str_builder.append (prop_val.get_int ().to_string ());
127
71
str_builder.append (prop_val.get_enum ().to_string ());
129
73
case (GLib.Type.FLAGS):
130
// TODO: Probobly needs better handling, but this will do.
74
// Probobly needs better handling, but this will do.
131
75
str_builder.append (prop_val.get_flags ().to_string ());
133
77
case (GLib.Type.FLOAT):
139
83
case (GLib.Type.LONG):
140
84
str_builder.append (prop_val.get_long ().to_string ());
86
case (GLib.Type.OBJECT):
87
str_builder.append_printf ("%llX", (((long)((pointer)prop_val.get_object ()))));
89
case (GLib.Type.PARAM):
90
var spsc = prop_val.get_param ();
91
str_builder.append ("name: ")
94
.append (spsc.value_type.name ());
142
96
case (GLib.Type.POINTER):
143
str_builder.append ("(")
144
.append_printf ("%p", prop_val.get_pointer ());
145
str_builder.append (")");
147
case (GLib.Type.BOXED):
148
str_builder.append ("(")
149
.append_printf ("%p", prop_val.get_boxed ());
150
str_builder.append (")");
97
str_builder.append_printf ("%llX", (((long)prop_val.get_pointer ())));
152
99
case (GLib.Type.UCHAR):
153
100
var v = prop_val.get_uchar ();
166
113
str_builder.append (prop_val.get_ulong ().to_string ());
168
115
case (GLib.Type.VARIANT):
169
GLib.Variant v = prop_val.dup_variant ();
170
GLib.Variant? tv = null;
171
unowned string ts1 = v.get_type_string ();
172
str_builder.append ("")
175
GLib.VariantIter iter = v.iterator ();
176
tv = iter.next_value ();
178
unowned string ts2 = tv.get_type_string ();
179
string tp = tv.print (true);
180
str_builder.append ("\t\t((")
185
tv = iter.next_value ();
116
GLib.Variant v = prop_val.get_variant ();
117
str_builder.append ("(\n")
118
.append (v.print (true))
191
if (prop_val.type ().is_a (typeof (GLib.Object))) {
192
var new_nesting = nesting + 1;
193
GLib.Object? dup_obj = prop_val.dup_object ();
194
str_builder.append_printf ("->(%p):\n", dup_obj);
195
internal_object_to_string (dup_obj, ref str_builder, new_nesting);
198
122
str_builder.append ("\n");
200
for (var i = 0; i < nesting; i++) {
201
str_builder.append ("\t");
203
str_builder.append (")\n");
126
return str_builder.str;