/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 src/Box.c

  • Committer: Gustav Hartvigsson
  • Date: 2015-08-26 21:43:01 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20150826214301-a3ms101kvjx4g0qq
* General documentation clean up.
* Made the doxygen optimise for C
* Changed SBoxPrivate to use union
* Implemented the s_box_new_xxx functions
* moved free_func from SBoxClass to SBoxPrivate to lessen confusion with SObjectClass->free, and keep it private.
* Added S_ERROR_TYPE_ERROR to represent generic type errors.
* Added CALLBACK(k) macro
* Made a group for SMatrix.
* Added documentation for various functions and what not.

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
SBoxPrivate {
6
6
  sboolean                      free_data;
7
7
  SType                         object_type;
8
 
  SObject *                     m_sobject;
9
 
  spointer                      m_ptr;
10
 
  sboolean                      m_sboolean;
11
 
  int                           m_int;
12
 
  long                          m_long;
13
 
  short                         m_short;
14
 
  char                          m_char;
15
 
  wchar_t                       m_wchar;
16
 
  unsigned int                  m_uint;
17
 
  unsigned long                 m_ulong;
18
 
  unsigned short                m_ushort;
19
 
  char *                        m_string;
20
 
  wchar_t *                     m_wstring;
 
8
  FreeFunc                      free_func;
 
9
  union {
 
10
    SObject *                   m_sobject;
 
11
    spointer                    m_ptr;
 
12
    sboolean                    m_sboolean;
 
13
    int                         m_int;
 
14
    long                        m_long;
 
15
    short                       m_short;
 
16
    char                        m_char;
 
17
    wchar_t                     m_wchar;
 
18
    unsigned int                m_uint;
 
19
    unsigned long               m_ulong;
 
20
    unsigned short              m_ushort;
 
21
    char *                      m_string;
 
22
    wchar_t *                   m_wstring;
 
23
  } data;
21
24
};
22
25
 
23
26
void
34
37
  s_object_set_class (S_OBJECT (self), S_OBJECT_CLASS (klass));
35
38
  s_object_set_free_method (S_OBJECT (self), FREE_METHOD (s_method_box_free));
36
39
  
37
 
  return self;
38
 
}
39
 
 
40
 
SBox *
41
 
s_box_new_pointer (spointer object);
42
 
 
43
 
SBox *
44
 
s_box_new_sobject (SObject * object);
45
 
 
46
 
SBox *
47
 
s_box_new_int (int i);
48
 
 
49
 
SBox *
50
 
s_box_new_long (long l);
51
 
 
52
 
SBox *
53
 
s_box_new_short (short s);
54
 
 
55
 
SBox *
56
 
s_box_new_char (char c);
57
 
 
58
 
SBox *
59
 
s_box_new_wchar (wchar_t wc);
60
 
 
61
 
SBox *
62
 
s_box_new_uint (unsigned int ui);
63
 
 
64
 
SBox *
65
 
s_box_new_ulong (long l);
66
 
 
67
 
SBox *
68
 
s_box_new_ushort (short s);
69
 
 
70
 
SBox *
71
 
s_box_new_string (char * s);
72
 
 
73
 
SBox *
74
 
s_box_new_wstring (wchar_t * ws);
 
40
  self->priv->free_func = NULL;
 
41
  
 
42
  return self;
 
43
}
 
44
 
 
45
SBox *
 
46
s_box_new_pointer (spointer object) {
 
47
  SBox * self = internal_s_box_new ();
 
48
  self->priv->data.m_ptr = object;
 
49
  self->priv->object_type = S_TYPE_POINTER;
 
50
  
 
51
  return self;
 
52
}
 
53
 
 
54
SBox *
 
55
s_box_new_sobject (SObject * object) {
 
56
  SBox * self = internal_s_box_new ();
 
57
  self->priv->data.m_sobject = object;
 
58
  self->priv->object_type = S_TYPE_OBJECT;
 
59
  
 
60
  return self;
 
61
}
 
62
 
 
63
SBox *
 
64
s_box_new_int (int i) {
 
65
  SBox * self = internal_s_box_new ();
 
66
  self->priv->data.m_int = i;
 
67
  self->priv->object_type = S_TYPE_INT;
 
68
  
 
69
  return self;
 
70
}
 
71
 
 
72
SBox *
 
73
s_box_new_long (long l) {
 
74
  SBox * self = internal_s_box_new ();
 
75
  self->priv->data.m_long = l;
 
76
  self->priv->object_type = S_TYPE_LONG;
 
77
  
 
78
  return self;
 
79
}
 
80
 
 
81
SBox *
 
82
s_box_new_short (short s) {
 
83
  SBox * self = internal_s_box_new ();
 
84
  self->priv->data.m_short = s;
 
85
  self->priv->object_type = S_TYPE_SHORT;
 
86
  
 
87
  return self;
 
88
}
 
89
 
 
90
SBox *
 
91
s_box_new_char (char c) {
 
92
  SBox * self = internal_s_box_new ();
 
93
  self->priv->data.m_char = c;
 
94
  self->priv->object_type = S_TYPE_CHAR;
 
95
  
 
96
  return self;
 
97
}
 
98
 
 
99
SBox *
 
100
s_box_new_wchar (wchar_t wc) {
 
101
  SBox * self = internal_s_box_new ();
 
102
  self->priv->data.m_wchar = wc;
 
103
  self->priv->object_type = S_TYPE_WCHAR;
 
104
  
 
105
  return self;
 
106
}
 
107
 
 
108
SBox *
 
109
s_box_new_uint (unsigned int ui) {
 
110
  SBox * self = internal_s_box_new ();
 
111
  self->priv->data.m_uint = ui;
 
112
  self->priv->object_type = S_TYPE_UINT;
 
113
  
 
114
  return self;
 
115
}
 
116
 
 
117
 
 
118
SBox *
 
119
s_box_new_ulong (unsigned long ul) {
 
120
  SBox * self = internal_s_box_new ();
 
121
  self->priv->data.m_ulong = ul;
 
122
  self->priv->object_type = S_TYPE_ULONG;
 
123
  
 
124
  return self;
 
125
}
 
126
 
 
127
SBox *
 
128
s_box_new_ushort (unsigned short us)  {
 
129
  SBox * self = internal_s_box_new ();
 
130
  self->priv->data.m_ushort = us;
 
131
  self->priv->object_type = S_TYPE_USHORT;
 
132
  
 
133
  return self;
 
134
}
 
135
 
 
136
SBox *
 
137
s_box_new_string (char * s) {
 
138
  SBox * self = internal_s_box_new ();
 
139
  self->priv->data.m_string = s;
 
140
  self->priv->object_type = S_TYPE_STRING;
 
141
  
 
142
  return self;
 
143
}
 
144
 
 
145
SBox *
 
146
s_box_new_wstring (wchar_t * ws) {
 
147
  SBox * self = internal_s_box_new ();
 
148
  self->priv->data.m_wstring = ws;
 
149
  self->priv->object_type = S_TYPE_WSTRING;
 
150
  
 
151
  return self;
 
152
}
75
153
 
76
154
void
77
155
s_box_free (SBox * self) {
80
158
 
81
159
void
82
160
s_box_set_free_data_on_free (SBox * self, sboolean free_data) {
83
 
  
 
161
  self->priv->free_data = free_data;
84
162
}
85
163
 
86
164
void
87
165
s_box_set_free_func (SBox * self, FreeFunc free_func) {
88
 
  SBoxClass * klass = S_BOX_CLASS (s_object_get_class(S_OBJECT (self)));
89
 
  klass->free_func = free_func;
 
166
  self->priv->free_func = free_func;
90
167
}
91
168
 
 
169
 
 
170
spointer *
 
171
s_box_get_pointer (SBox * self);
 
172
 
 
173
 
 
174
SObject *
 
175
s_box_get_sobject (SBox * self);
 
176
 
 
177
 
 
178
int
 
179
s_box_get_int (SBox * self);
 
180
 
 
181
 
 
182
long
 
183
s_box_get_long (SBox * self);
 
184
 
 
185
 
 
186
short
 
187
s_box_get_short (SBox * self);
 
188
 
 
189
 
 
190
char
 
191
s_box_get_char (SBox * self);
 
192
 
 
193
 
 
194
wchar_t
 
195
s_box_get_wchar (SBox * self);
 
196
 
 
197
unsigned int
 
198
s_box_get_uint (SBox * self);
 
199
 
 
200
unsigned long
 
201
s_box_get_ulong (SBox * self);
 
202
 
 
203
unsigned short
 
204
s_box_get_ushort (SBox * self);
 
205
 
 
206
char *
 
207
s_box_get_string (SBox * self);
 
208
 
 
209
wchar_t *
 
210
s_box_get_wstring (SBox * self);
 
211
 
92
212
void
93
213
s_method_box_free (SBox * self) {
94
214
  SBoxClass * klass = S_BOX_CLASS (s_object_get_class(S_OBJECT(self)));
95
215
  
96
216
  SBoxPrivate * priv = self->priv;
97
217
  
98
 
  FreeFunc free_func = klass->free_func;
 
218
  FreeFunc free_func = priv->free_func;
99
219
  
100
220
  if (priv->free_data) {
101
221
    switch (priv->object_type) {
102
222
      case S_TYPE_OBJECT:
103
 
        s_object_free (priv->m_sobject);
 
223
        s_object_free (priv->data.m_sobject);
104
224
        break;
105
225
      case S_TYPE_POINTER:
106
226
        if (free_func) {
107
 
          free_func (priv->m_ptr);
 
227
          free_func (priv->data.m_ptr);
108
228
        } else {
109
 
          free (priv->m_ptr);
 
229
          free (priv->data.m_ptr);
110
230
        }
111
231
        break;
112
232
      case S_TYPE_STRING:
113
 
        free (priv->m_string);
 
233
        free (priv->data.m_string);
114
234
        break;
115
235
      case S_TYPE_WSTRING:
116
 
        free (priv->m_wstring);
 
236
        free (priv->data.m_wstring);
117
237
        break;
118
238
      default:
119
239
        s_warn_print ("[SBox] free_data was set despite not being an object"