/vqdr/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/vqdr/trunk

« back to all changes in this revision

Viewing changes to src/common/utils.vala

  • Committer: Gustav Hartvigsson
  • Date: 2020-06-07 18:48:24 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20200607184824-jf14f7a1b1di2i2q
* Initial code - far from done

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * The contects of this file is in the Public Domain.
3
 
 *
4
 
 * Created by Gustav Hartivgsson.
5
 
 */
6
 
 
7
 
namespace Vee {
8
 
  public delegate void FreeFunc (void * ptr);
9
 
 
10
 
 
 
1
namespace VQDR.Common.Utils {
11
2
  public int str_cmp (string a, string b) {
12
3
    return a.collate (b);
13
4
  }
14
5
  
15
 
 
16
6
  public void print_ln (string str, ...) {
17
7
    var va = va_list ();
18
 
    var tmp = str + "\n";
19
 
    stdout.vprintf (tmp, va);
20
 
  }
21
 
 
22
 
 
23
 
  public void err_print_ln (string str, ...) {
24
 
    var va = va_list ();
25
 
    var tmp = str + "\n";
26
 
    stderr.vprintf (tmp, va);
27
 
  }
28
 
 
29
 
 
 
8
    
 
9
    // Reallocate the string as it is not owned by the function.
 
10
    var tmp = str + "\n";
 
11
    
 
12
    // Hopefully this does not create any memony leaks. :-)
 
13
    print (tmp.vprintf (va));
 
14
  }
 
15
  
30
16
  public string object_to_string (GLib.Object obj) {
31
 
     StringBuilder strbldr = new StringBuilder ();
32
 
     internal_object_to_string (obj, ref strbldr);
33
 
     return strbldr.str;
34
 
  }
35
 
 
36
 
 
37
 
  string collect_string (string[] segments, string? separator = null) {
38
 
    var _len = segments.length;
39
 
    if (_len == 0) {
40
 
      return "";
41
 
    }
42
 
    if (_len == 1) {
43
 
      return segments[0];
44
 
    }
45
 
    StringBuilder strbldr = new StringBuilder ();
46
 
    if (separator != null) {
47
 
      for (var i = 0; i <= _len; i++) {
48
 
        strbldr.append (segments[i]);
49
 
        if (i < _len) {
50
 
          strbldr.append (separator);
51
 
        }
52
 
      }
53
 
    } else {
54
 
      for (var i = 0; i <= _len; i++) {
55
 
        strbldr.append (segments[i]);
56
 
      }
57
 
    } 
58
 
    return strbldr.str;
59
 
  }
60
 
 
61
 
 
62
 
  internal unowned StringBuilder internal_object_to_string (GLib.Object obj,
63
 
                                                  ref StringBuilder str_builder,
64
 
                                                  int32 nesting = 0) {
65
 
    GLib.ObjectClass obj_class =
66
 
      (GLib.ObjectClass) obj.get_type ().class_ref ();
67
 
    
68
 
    for (var i = 0; i < nesting; i++) {
69
 
     str_builder.append ("\t");
70
 
    }
71
 
    
72
 
    str_builder.append ("((")
 
17
    GLib.ObjectClass real_obj = (GLib.ObjectClass) obj.get_type ().class_ref ();
 
18
    
 
19
    var str_builder = new GLib.StringBuilder ();
 
20
    
 
21
    
 
22
    str_builder.append ("(")
73
23
               .append (obj.get_type().name ())
74
 
               .append_printf (")->(%p):\n", obj);
 
24
               .append ("):\n");
75
25
    
76
 
    foreach (GLib.ParamSpec ps in obj_class.list_properties ()) {
 
26
    foreach (GLib.ParamSpec ps in real_obj.list_properties ()) {
77
27
      
78
28
      if (ps.value_type == 0 || ps.value_type == GLib.Type.INVALID) {
79
29
        continue;
86
36
      if (prop_val.type () == GLib.Type.INVALID || prop_val.type () == 0) {
87
37
        continue;
88
38
      }
89
 
 
 
39
      
90
40
      obj.get_property (prop_name, ref prop_val);
91
41
      
92
 
      for (var i = 0; i < nesting; i++) {
93
 
        str_builder.append ("\t");
94
 
      }
95
 
 
96
 
      str_builder.append ("\t(")
 
42
      
 
43
      str_builder.append ("\t (")
97
44
                 .append (prop_val.type_name ())
98
45
                 .append (") ")
99
46
                 .append (prop_name)
100
 
                 .append (":");
101
 
 
 
47
                 .append (": ");
 
48
      
 
49
      
102
50
      switch (prop_val.type ()) {
103
51
        case (GLib.Type.STRING):
104
 
          if (prop_val.dup_string () == null) {
105
 
            str_builder.append ("(null)");
106
 
          } else {
107
 
            str_builder.append (prop_val.dup_string ());
108
 
          }
 
52
          str_builder.append (prop_val.get_string ());
109
53
        break;
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 ());
128
72
        break;
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 ());
132
76
        break;
133
77
        case (GLib.Type.FLOAT):
139
83
        case (GLib.Type.LONG):
140
84
          str_builder.append (prop_val.get_long ().to_string ());
141
85
        break;
 
86
        case (GLib.Type.OBJECT):
 
87
          str_builder.append_printf ("%llX", (((long)((pointer)prop_val.get_object ()))));
 
88
        break;
 
89
        case (GLib.Type.PARAM):
 
90
          var spsc = prop_val.get_param ();
 
91
          str_builder.append ("name: ")
 
92
                     .append (spsc.name)
 
93
                     .append (" type: ")
 
94
                     .append (spsc.value_type.name ());
 
95
        break;
142
96
        case (GLib.Type.POINTER):
143
 
          str_builder.append ("(")
144
 
                     .append_printf ("%p", prop_val.get_pointer ());
145
 
          str_builder.append (")");
146
 
        break;
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 ())));
151
98
        break;
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 ());
167
114
        break;
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 ("")
173
 
                     .append (ts1)
174
 
                     .append ("\n\t(\n");
175
 
          GLib.VariantIter iter = v.iterator ();
176
 
          tv = iter.next_value ();
177
 
          while (tv != null) {
178
 
            unowned string ts2 = tv.get_type_string ();
179
 
            string tp = tv.print (true);
180
 
            str_builder.append ("\t\t((")
181
 
                       .append (ts2)
182
 
                       .append ("): ")
183
 
                       .append (tp)
184
 
                       .append (")\n");
185
 
            tv = iter.next_value ();
186
 
          }
187
 
          
 
116
          GLib.Variant v = prop_val.get_variant ();
 
117
          str_builder.append ("(\n")
 
118
                     .append (v.print (true))
 
119
                     .append ("\n)");
188
120
        break;
189
 
 
190
 
      }
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);
196
 
      }
197
 
 
 
121
      }
198
122
      str_builder.append ("\n");
199
 
    }
200
 
    for (var i = 0; i < nesting; i++) {
201
 
      str_builder.append ("\t");
202
 
    }
203
 
    str_builder.append (")\n");
204
 
    return str_builder;
 
123
      
 
124
    }
 
125
    
 
126
    return str_builder.str;
205
127
  }
206
128
  
207
129
}