/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-06-04 17:36:18 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20150604173618-qobcg09u33eyrpfd
* started work SBox (Untested).
* Fixed compilation errors.
* added more macros and made use of them.
* Added more documentation.
* Made s_object_get_class return a SObjectClass pointer instead.
* Reorderd S_TYPE_* enum.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#include "Box.h"
 
2
#include <stdlib.h>
 
3
 
 
4
struct SBoxPrivate {
 
5
  sboolean                      free_data;
 
6
  SType                         object_type;
 
7
  SObject *                     m_sobject;
 
8
  spointer                      m_ptr;
 
9
  sboolean                      m_sboolean;
 
10
  int                           m_int;
 
11
  long                          m_long;
 
12
  short                         m_short;
 
13
  char                          m_char;
 
14
  wchar_t                       m_wchar;
 
15
  unsigned int                  m_uint;
 
16
  unsigned long                 m_ulong;
 
17
  unsigned short                m_ushort;
 
18
  char *                        m_string;
 
19
  wchar_t *                     m_wstring;
 
20
};
 
21
 
 
22
void s_method_box_free (SBox * self);
 
23
 
 
24
/* Private function to allocate and set methods to the SBox.
 
25
 */
 
26
SBox * s_box_new () {
 
27
  SBox * self = malloc (sizeof (SBox));
 
28
  SBoxClass * klass = malloc (sizeof (SBoxClass));
 
29
  s_object_initialize (S_OBJECT (self), "SBox");
 
30
  
 
31
  s_object_set_class (S_OBJECT (self), S_OBJECT_CLASS (klass));
 
32
  s_object_set_free_method (S_OBJECT (self), FREE_METHOD (s_method_box_free));
 
33
  
 
34
  return self;
 
35
}
 
36
 
 
37
SBox * s_box_new_pointer (spointer object);
 
38
 
 
39
SBox * s_box_new_sobject (SObject * object);
 
40
 
 
41
SBox * s_box_new_int (int i);
 
42
 
 
43
SBox * s_box_new_long (long l);
 
44
 
 
45
SBox * s_box_new_short (short s);
 
46
 
 
47
SBox * s_box_new_char (char c);
 
48
 
 
49
SBox * s_box_new_wchar (wchar_t wc);
 
50
 
 
51
SBox * s_box_new_uint (unsigned int ui);
 
52
 
 
53
SBox * s_box_new_ulong (long l);
 
54
 
 
55
SBox * s_box_new_ushort (short s);
 
56
 
 
57
SBox * s_box_new_string (char * s);
 
58
 
 
59
SBox * s_box_new_wstring (wchar_t * ws);
 
60
 
 
61
void s_box_free (SBox * self) {
 
62
  s_object_free (S_OBJECT (self));
 
63
}
 
64
 
 
65
void s_box_set_free_data_on_free (SBox * self, sboolean free_data) {
 
66
  
 
67
}
 
68
 
 
69
void s_box_set_free_func (SBox * self, FreeFunc free_func) {
 
70
  SBoxClass * klass = S_BOX_CLASS (s_object_get_class(S_OBJECT (self)));
 
71
  klass->free_func = free_func;
 
72
}
 
73
 
 
74
void s_method_box_free (SBox * self) {
 
75
  SBoxClass * klass = S_BOX_CLASS (s_object_get_class(S_OBJECT(self)));
 
76
  
 
77
  SBoxPrivate * priv = self->priv;
 
78
  
 
79
  FreeFunc free_func = klass->free_func;
 
80
  
 
81
  if (priv->free_data) {
 
82
    switch (priv->object_type) {
 
83
      case S_TYPE_OBJECT:
 
84
        s_object_free (priv->m_sobject);
 
85
        break;
 
86
      case S_TYPE_POINTER:
 
87
        if (free_func) {
 
88
          free_func (priv->m_ptr);
 
89
        } else {
 
90
          free (priv->m_ptr);
 
91
        }
 
92
        break;
 
93
      case S_TYPE_STRING:
 
94
        free (priv->m_string);
 
95
        break;
 
96
      case S_TYPE_WSTRING:
 
97
        free (priv->m_wstring);
 
98
        break;
 
99
      default:
 
100
        s_warn_print ("[SBox] free_data was set despite not being an object"
 
101
                      "that can be freed.");
 
102
    }
 
103
  }
 
104
  
 
105
  free (self->priv);
 
106
  free (klass);
 
107
  
 
108
}
 
109
 
2
110