/vqdr/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/vqdr/trunk
1 by Gustav Hartvigsson
* Initial code - far from done
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
}