/simpletypesystem/trunk

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

« back to all changes in this revision

Viewing changes to libssts/Callback.c

  • Committer: Gustav Hartvigsson
  • Date: 2015-10-28 14:45:22 UTC
  • mto: This revision was merged to the branch mainline in revision 111.
  • Revision ID: gustav.hartvigsson@gmail.com-20151028144522-fo54z73ssjex0emw
* SMap seems to be broken... Or could it be SObject's Callback stuff? Or SLinkedList?

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
#include "Callback.h"
24
24
 
 
25
SCallbackEntry *
 
26
s_callback_entry_new_real (const schar * name,
 
27
                           Callback callback,
 
28
                           SCallbackType type) {
 
29
  SCallbackEntry * self = malloc (sizeof (SCallbackEntry));
 
30
  self->name = s_string_new (name);
 
31
  self->callback = callback;
 
32
  self->type = type;
 
33
  return self;
 
34
}
 
35
 
 
36
void
 
37
s_callback_entry_free (SCallbackEntry * self) {
 
38
  //free (self->name)
 
39
  free (self);
 
40
}
 
41
 
 
42
void
 
43
s_object_install_callbacks (SObject * obj,
 
44
                            size_t n_callbacks,
 
45
                            SCallbackEntry ** callback_entries) {
 
46
  assert (obj);
 
47
  assert (callback_entries);
 
48
  s_dbg_print ("Adding Callbacks, n_callbacks: %zd", n_callbacks);
 
49
  for (size_t i = 0; i < n_callbacks ; i++) {
 
50
    s_dbg_print ("Loop: Adding Callbacks");
 
51
    SCallbackEntry * entry = callback_entries[i];
 
52
    s_object_install_callback (obj, entry);
 
53
  }
 
54
}
 
55
 
 
56
void
 
57
s_object_install_callback (SObject * obj,
 
58
                           SCallbackEntry * callback_entry) {
 
59
  //
 
60
  assert (obj);
 
61
  assert (callback_entry);
 
62
  s_dbg_print ("Adding callback");
 
63
  s_map_add (obj->callbacks, callback_entry->name, callback_entry);
 
64
}
 
65
 
 
66
spointer
 
67
s_object_notify (SObject * self,
 
68
                 schar * name,
 
69
                 spointer * user_data) {
 
70
  //
 
71
  SCallbackEntry * entry = s_map_get (self->callbacks, name);
 
72
  assert (s_string_is_equal (entry->name, name));
 
73
 
 
74
  Callback callback = entry->callback;
 
75
  return callback (self, user_data);
 
76
}
25
77