/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
namespace VQDR.Common.Utils {
 
2
  public int str_cmp (string a, string b) {
 
3
    return a.collate (b);
 
4
  }
 
5
  
 
6
  public void print_ln (string str, ...) {
 
7
    var va = va_list ();
 
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
  
 
16
  public string object_to_string (GLib.Object obj) {
 
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 ("(")
 
23
               .append (obj.get_type().name ())
 
24
               .append ("):\n");
 
25
    
 
26
    foreach (GLib.ParamSpec ps in real_obj.list_properties ()) {
 
27
      
 
28
      if (ps.value_type == 0 || ps.value_type == GLib.Type.INVALID) {
 
29
        continue;
 
30
      }
 
31
      
 
32
      var prop_name = ps.get_name ();
 
33
      
 
34
      Value prop_val = GLib.Value (ps.value_type);
 
35
      
 
36
      if (prop_val.type () == GLib.Type.INVALID || prop_val.type () == 0) {
 
37
        continue;
 
38
      }
 
39
      
 
40
      obj.get_property (prop_name, ref prop_val);
 
41
      
 
42
      
 
43
      str_builder.append ("\t (")
 
44
                 .append (prop_val.type_name ())
 
45
                 .append (") ")
 
46
                 .append (prop_name)
 
47
                 .append (": ");
 
48
      
 
49
      
 
50
      switch (prop_val.type ()) {
 
51
        case (GLib.Type.STRING):
 
52
          str_builder.append (prop_val.get_string ());
 
53
        break;
 
54
        case (GLib.Type.INT):
 
55
          str_builder.append (prop_val.get_int ().to_string ());
 
56
        break;
 
57
        case (GLib.Type.BOOLEAN):
 
58
          str_builder.append (prop_val.get_boolean ().to_string ());
 
59
        break;
 
60
        case (GLib.Type.CHAR):
 
61
          var v = prop_val.get_schar ();
 
62
          str_builder.append_c (v)
 
63
                     .append (" (")
 
64
                     .append_printf ("%hhx", v);
 
65
          str_builder.append (")");
 
66
        break;
 
67
        case (GLib.Type.DOUBLE):
 
68
          str_builder.append (prop_val.get_double ().to_string ());
 
69
        break;
 
70
        case (GLib.Type.ENUM):
 
71
          str_builder.append (prop_val.get_enum ().to_string ());
 
72
        break;
 
73
        case (GLib.Type.FLAGS):
 
74
          // Probobly needs better handling, but this will do.
 
75
          str_builder.append (prop_val.get_flags ().to_string ());
 
76
        break;
 
77
        case (GLib.Type.FLOAT):
 
78
          str_builder.append (prop_val.get_float ().to_string ());
 
79
        break;
 
80
        case (GLib.Type.INT64):
 
81
          str_builder.append (prop_val.get_int64 ().to_string ());
 
82
        break;
 
83
        case (GLib.Type.LONG):
 
84
          str_builder.append (prop_val.get_long ().to_string ());
 
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;
 
96
        case (GLib.Type.POINTER):
 
97
          str_builder.append_printf ("%llX", (((long)prop_val.get_pointer ())));
 
98
        break;
 
99
        case (GLib.Type.UCHAR):
 
100
          var v = prop_val.get_uchar ();
 
101
          str_builder.append_c ((char) v)
 
102
                     .append (" (")
 
103
                     .append_printf ("%hhx", v);
 
104
          str_builder.append (")");
 
105
        break;
 
106
        case (GLib.Type.UINT):
 
107
          str_builder.append (prop_val.get_uint ().to_string ());
 
108
        break;
 
109
        case (GLib.Type.UINT64):
 
110
          str_builder.append (prop_val.get_uint64 ().to_string ());
 
111
        break;
 
112
        case (GLib.Type.ULONG):
 
113
          str_builder.append (prop_val.get_ulong ().to_string ());
 
114
        break;
 
115
        case (GLib.Type.VARIANT):
 
116
          GLib.Variant v = prop_val.get_variant ();
 
117
          str_builder.append ("(\n")
 
118
                     .append (v.print (true))
 
119
                     .append ("\n)");
 
120
        break;
 
121
      }
 
122
      str_builder.append ("\n");
 
123
      
 
124
    }
 
125
    
 
126
    return str_builder.str;
 
127
  }
 
128
  
 
129
}