1
namespace VQDR.Common.Utils {
2
* The contects of this file is in the Public Domain.
4
* Created by Gustav Hartivgsson.
6
[CCode (cname = "V", cprefix = "v_")]
8
[CCode (cname = "v_str_cmp")]
2
9
public int str_cmp (string a, string b) {
3
10
return a.collate (b);
13
[CCode (cname = "v_print_ln")]
6
14
public void print_ln (string str, ...) {
7
15
var va = va_list ();
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));
17
stdout.vprintf (tmp, va);
20
[CCode (cname = "v_err_print_ln")]
21
public void err_print_ln (string str, ...) {
24
stderr.vprintf (tmp, va);
27
[CCode (cname = "v_object_to_string")]
16
28
public string object_to_string (GLib.Object obj) {
17
GLib.ObjectClass real_obj = (GLib.ObjectClass) obj.get_type ().class_ref ();
19
var str_builder = new GLib.StringBuilder ();
22
str_builder.append ("(")
29
StringBuilder strbldr = new StringBuilder ();
30
internal_object_to_string (obj, ref strbldr);
34
string collect_string (string[] segments) {
35
if (segments.length == 0) {
38
if (segments.length == 1) {
41
StringBuilder strbldr = new StringBuilder ();
42
foreach (var segment in segments) {
43
strbldr.append (segment);
48
[CCode (cname = "v_internal_object_to_string")]
49
internal unowned StringBuilder internal_object_to_string (GLib.Object obj,
50
ref StringBuilder str_builder,
52
GLib.ObjectClass obj_class =
53
(GLib.ObjectClass) obj.get_type ().class_ref ();
55
for (var i = 0; i < nesting; i++) {
56
str_builder.append ("\t");
59
str_builder.append ("((")
23
60
.append (obj.get_type().name ())
61
.append_printf (")->(%p):\n", obj);
26
foreach (GLib.ParamSpec ps in real_obj.list_properties ()) {
63
foreach (GLib.ParamSpec ps in obj_class.list_properties ()) {
28
65
if (ps.value_type == 0 || ps.value_type == GLib.Type.INVALID) {
36
73
if (prop_val.type () == GLib.Type.INVALID || prop_val.type () == 0) {
40
77
obj.get_property (prop_name, ref prop_val);
43
str_builder.append ("\t (")
79
for (var i = 0; i < nesting; i++) {
80
str_builder.append ("\t");
83
str_builder.append ("\t(")
44
84
.append (prop_val.type_name ())
46
86
.append (prop_name)
50
92
switch (prop_val.type ()) {
51
93
case (GLib.Type.STRING):
52
str_builder.append (prop_val.get_string ());
94
if (prop_val.dup_string () == null) {
95
str_builder.append ("(null)");
97
str_builder.append (prop_val.dup_string ());
54
100
case (GLib.Type.INT):
55
101
str_builder.append (prop_val.get_int ().to_string ());
83
129
case (GLib.Type.LONG):
84
130
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 ());
96
132
case (GLib.Type.POINTER):
97
str_builder.append_printf ("%llX", (((long)prop_val.get_pointer ())));
133
str_builder.append ("(")
134
.append_printf ("%p", prop_val.get_pointer ());
135
str_builder.append (")");
137
case (GLib.Type.BOXED):
138
str_builder.append ("(")
139
.append_printf ("%p", prop_val.get_boxed ());
140
str_builder.append (")");
99
142
case (GLib.Type.UCHAR):
100
143
var v = prop_val.get_uchar ();
113
156
str_builder.append (prop_val.get_ulong ().to_string ());
115
158
case (GLib.Type.VARIANT):
116
GLib.Variant v = prop_val.get_variant ();
117
str_builder.append ("(\n")
118
.append (v.print (true))
159
GLib.Variant v = prop_val.dup_variant ();
160
GLib.Variant? tv = null;
161
unowned string ts1 = v.get_type_string ();
162
str_builder.append ("")
165
GLib.VariantIter iter = v.iterator ();
166
tv = iter.next_value ();
168
unowned string ts2 = tv.get_type_string ();
169
string tp = tv.print (true);
170
str_builder.append ("\t\t((")
175
tv = iter.next_value ();
181
if (prop_val.type ().is_a (typeof (GLib.Object))) {
182
var new_nesting = nesting + 1;
183
GLib.Object? dup_obj = prop_val.dup_object ();
184
str_builder.append_printf ("->(%p):\n", dup_obj);
185
internal_object_to_string (dup_obj, ref str_builder, new_nesting);
122
188
str_builder.append ("\n");
126
return str_builder.str;
190
for (var i = 0; i < nesting; i++) {
191
str_builder.append ("\t");
193
str_builder.append (")\n");