/vqdr/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/vqdr/trunk
9 by Gustav Hartvigsson
* object_to_string () - Prittier prints,
1
/*
2
 * The contects of this file is in the Public Domain.
3
 *
4
 * Created by Gustav Hartivgsson.
5
 */
64 by Gustav Hartvigsson
[General] Major refactoring. Utils -> Vee nenaming.
6
7
namespace Vee {
62 by Gustav Hartvigsson
various changes
8
  public delegate void FreeFunc (void * ptr);
60 by Gustav Hartvigsson
Added int32_abs () to Utils.
9
64 by Gustav Hartvigsson
[General] Major refactoring. Utils -> Vee nenaming.
10
1 by Gustav Hartvigsson
* Initial code - far from done
11
  public int str_cmp (string a, string b) {
12
    return a.collate (b);
13
  }
14
  
64 by Gustav Hartvigsson
[General] Major refactoring. Utils -> Vee nenaming.
15
1 by Gustav Hartvigsson
* Initial code - far from done
16
  public void print_ln (string str, ...) {
17
    var va = va_list ();
43 by Gustav Hartvigsson
* Added err_print_ln.
18
    var tmp = str + "\n";
19
    stdout.vprintf (tmp, va);
20
  }
21
64 by Gustav Hartvigsson
[General] Major refactoring. Utils -> Vee nenaming.
22
43 by Gustav Hartvigsson
* Added err_print_ln.
23
  public void err_print_ln (string str, ...) {
24
    var va = va_list ();
25
    var tmp = str + "\n";
26
    stderr.vprintf (tmp, va);
1 by Gustav Hartvigsson
* Initial code - far from done
27
  }
54 by Gustav Hartvigsson
More work torwards inperementing the parser.
28
64 by Gustav Hartvigsson
[General] Major refactoring. Utils -> Vee nenaming.
29
1 by Gustav Hartvigsson
* Initial code - far from done
30
  public string object_to_string (GLib.Object obj) {
39 by Gustav Hartvigsson
Made objcet_to_string () recursive when dealing with GObjects.
31
     StringBuilder strbldr = new StringBuilder ();
32
     internal_object_to_string (obj, ref strbldr);
33
     return strbldr.str;
34
  }
35
64 by Gustav Hartvigsson
[General] Major refactoring. Utils -> Vee nenaming.
36
61 by Gustav Hartvigsson
* Fixed up Utils.collect_string, added seperator argument.
37
  string collect_string (string[] segments, string? separator = null) {
38
    var _len = segments.length;
39
    if (_len == 0) {
43 by Gustav Hartvigsson
* Added err_print_ln.
40
      return "";
41
    }
61 by Gustav Hartvigsson
* Fixed up Utils.collect_string, added seperator argument.
42
    if (_len == 1) {
43 by Gustav Hartvigsson
* Added err_print_ln.
43
      return segments[0];
44
    }
45
    StringBuilder strbldr = new StringBuilder ();
61 by Gustav Hartvigsson
* Fixed up Utils.collect_string, added seperator argument.
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
    } 
43 by Gustav Hartvigsson
* Added err_print_ln.
58
    return strbldr.str;
59
  }
60
64 by Gustav Hartvigsson
[General] Major refactoring. Utils -> Vee nenaming.
61
54 by Gustav Hartvigsson
More work torwards inperementing the parser.
62
  internal unowned StringBuilder internal_object_to_string (GLib.Object obj,
40 by Gustav Hartvigsson
Sort of fixed object_to_string ()...
63
                                                  ref StringBuilder str_builder,
52.1.3 by Gustav Hartvigsson
int -> int32
64
                                                  int32 nesting = 0) {
57 by Gustav Hartvigsson
Made sure that no text rows exeed 80 columns.
65
    GLib.ObjectClass obj_class =
66
      (GLib.ObjectClass) obj.get_type ().class_ref ();
40 by Gustav Hartvigsson
Sort of fixed object_to_string ()...
67
    
68
    for (var i = 0; i < nesting; i++) {
69
     str_builder.append ("\t");
70
    }
71
    
72
    str_builder.append ("((")
1 by Gustav Hartvigsson
* Initial code - far from done
73
               .append (obj.get_type().name ())
40 by Gustav Hartvigsson
Sort of fixed object_to_string ()...
74
               .append_printf (")->(%p):\n", obj);
1 by Gustav Hartvigsson
* Initial code - far from done
75
    
40 by Gustav Hartvigsson
Sort of fixed object_to_string ()...
76
    foreach (GLib.ParamSpec ps in obj_class.list_properties ()) {
1 by Gustav Hartvigsson
* Initial code - far from done
77
      
78
      if (ps.value_type == 0 || ps.value_type == GLib.Type.INVALID) {
79
        continue;
80
      }
81
      
82
      var prop_name = ps.get_name ();
83
      
84
      Value prop_val = GLib.Value (ps.value_type);
85
      
86
      if (prop_val.type () == GLib.Type.INVALID || prop_val.type () == 0) {
87
        continue;
88
      }
40 by Gustav Hartvigsson
Sort of fixed object_to_string ()...
89
1 by Gustav Hartvigsson
* Initial code - far from done
90
      obj.get_property (prop_name, ref prop_val);
91
      
40 by Gustav Hartvigsson
Sort of fixed object_to_string ()...
92
      for (var i = 0; i < nesting; i++) {
93
        str_builder.append ("\t");
94
      }
95
9 by Gustav Hartvigsson
* object_to_string () - Prittier prints,
96
      str_builder.append ("\t(")
1 by Gustav Hartvigsson
* Initial code - far from done
97
                 .append (prop_val.type_name ())
98
                 .append (") ")
99
                 .append (prop_name)
40 by Gustav Hartvigsson
Sort of fixed object_to_string ()...
100
                 .append (":");
101
1 by Gustav Hartvigsson
* Initial code - far from done
102
      switch (prop_val.type ()) {
103
        case (GLib.Type.STRING):
9 by Gustav Hartvigsson
* object_to_string () - Prittier prints,
104
          if (prop_val.dup_string () == null) {
105
            str_builder.append ("(null)");
8 by Gustav Hartvigsson
* Fixed string handling in gobject_to_string ().
106
          } else {
9 by Gustav Hartvigsson
* object_to_string () - Prittier prints,
107
            str_builder.append (prop_val.dup_string ());
8 by Gustav Hartvigsson
* Fixed string handling in gobject_to_string ().
108
          }
1 by Gustav Hartvigsson
* Initial code - far from done
109
        break;
110
        case (GLib.Type.INT):
111
          str_builder.append (prop_val.get_int ().to_string ());
112
        break;
113
        case (GLib.Type.BOOLEAN):
114
          str_builder.append (prop_val.get_boolean ().to_string ());
115
        break;
116
        case (GLib.Type.CHAR):
117
          var v = prop_val.get_schar ();
118
          str_builder.append_c (v)
119
                     .append (" (")
120
                     .append_printf ("%hhx", v);
121
          str_builder.append (")");
122
        break;
123
        case (GLib.Type.DOUBLE):
124
          str_builder.append (prop_val.get_double ().to_string ());
125
        break;
126
        case (GLib.Type.ENUM):
127
          str_builder.append (prop_val.get_enum ().to_string ());
128
        break;
129
        case (GLib.Type.FLAGS):
9 by Gustav Hartvigsson
* object_to_string () - Prittier prints,
130
          // TODO: Probobly needs better handling, but this will do.
1 by Gustav Hartvigsson
* Initial code - far from done
131
          str_builder.append (prop_val.get_flags ().to_string ());
132
        break;
133
        case (GLib.Type.FLOAT):
134
          str_builder.append (prop_val.get_float ().to_string ());
135
        break;
136
        case (GLib.Type.INT64):
137
          str_builder.append (prop_val.get_int64 ().to_string ());
138
        break;
139
        case (GLib.Type.LONG):
140
          str_builder.append (prop_val.get_long ().to_string ());
141
        break;
142
        case (GLib.Type.POINTER):
9 by Gustav Hartvigsson
* object_to_string () - Prittier prints,
143
          str_builder.append ("(")
39 by Gustav Hartvigsson
Made objcet_to_string () recursive when dealing with GObjects.
144
                     .append_printf ("%p", prop_val.get_pointer ());
9 by Gustav Hartvigsson
* object_to_string () - Prittier prints,
145
          str_builder.append (")");
146
        break;
147
        case (GLib.Type.BOXED):
148
          str_builder.append ("(")
39 by Gustav Hartvigsson
Made objcet_to_string () recursive when dealing with GObjects.
149
                     .append_printf ("%p", prop_val.get_boxed ());
9 by Gustav Hartvigsson
* object_to_string () - Prittier prints,
150
          str_builder.append (")");
1 by Gustav Hartvigsson
* Initial code - far from done
151
        break;
152
        case (GLib.Type.UCHAR):
153
          var v = prop_val.get_uchar ();
154
          str_builder.append_c ((char) v)
155
                     .append (" (")
156
                     .append_printf ("%hhx", v);
157
          str_builder.append (")");
158
        break;
159
        case (GLib.Type.UINT):
160
          str_builder.append (prop_val.get_uint ().to_string ());
161
        break;
162
        case (GLib.Type.UINT64):
163
          str_builder.append (prop_val.get_uint64 ().to_string ());
164
        break;
165
        case (GLib.Type.ULONG):
166
          str_builder.append (prop_val.get_ulong ().to_string ());
167
        break;
168
        case (GLib.Type.VARIANT):
9 by Gustav Hartvigsson
* object_to_string () - Prittier prints,
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
          
1 by Gustav Hartvigsson
* Initial code - far from done
188
        break;
40 by Gustav Hartvigsson
Sort of fixed object_to_string ()...
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
1 by Gustav Hartvigsson
* Initial code - far from done
198
      str_builder.append ("\n");
199
    }
40 by Gustav Hartvigsson
Sort of fixed object_to_string ()...
200
    for (var i = 0; i < nesting; i++) {
201
      str_builder.append ("\t");
202
    }
203
    str_builder.append (")\n");
39 by Gustav Hartvigsson
Made objcet_to_string () recursive when dealing with GObjects.
204
    return str_builder;
1 by Gustav Hartvigsson
* Initial code - far from done
205
  }
206
  
207
}