/simpletypesystem/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/simpletypesystem/trunk
77 by Gustav Hartvigsson
* More work on SStream... Requiers Mutex suppert :-)
1
#include "Stream.h"
2
#include "StreamPrivate.h"
3
4
schar *
5
_s_stream_method_to_string (SStream * self);
6
7
SStream *
8
s_stream_new () {
9
  SStream * self = s_malloc (sizeof (SStream));
121.1.3 by Gustav Hartvigsson
* Made the GC switchable at rutime (once) when compiled with S_USE_GC set.
10
  SStreamClass * klass = s_malloc (sizeof (SStreamClass));
11
  self->priv = s_malloc (sizeof (SStreamPrivate));
12
  
77 by Gustav Hartvigsson
* More work on SStream... Requiers Mutex suppert :-)
13
  /* Lock as fast as we can. Prevents any issues. */
98 by Gustav Hartvigsson
* Started work on SRingBuffer to be used in SStream.
14
  self->priv->mutex = s_mutex_new ();
15
  s_mutex_lock (self->priv->mutex);
16
  
17
  s_stream_internal_initialize (klass);
18
  
19
  s_object_set_class (S_OBJECT (self), S_OBJECT_CLASS (klass));
77 by Gustav Hartvigsson
* More work on SStream... Requiers Mutex suppert :-)
20
  s_object_set_to_string_method (S_OBJECT (self),
21
                                 TO_STRING_FUNC (_s_stream_method_to_string));
22
  
23
  
24
  s_mutex_unlock (self->priv->mutex);
98 by Gustav Hartvigsson
* Started work on SRingBuffer to be used in SStream.
25
  return self;
77 by Gustav Hartvigsson
* More work on SStream... Requiers Mutex suppert :-)
26
}
27
28
size_t
29
s_stream_get_beffered (SStream * self) {
30
  return self->priv->buffered;
31
}
32
33
schar *
34
_s_stream_method_to_string (SStream * self) {
35
  return s_string_new_fmt ("(SStream: refcount: %d, buffered: %d)",
36
                           s_object_get_refcount (S_OBJECT (self)),
37
                           s_stream_get_beffered (self));
38
}
39
98 by Gustav Hartvigsson
* Started work on SRingBuffer to be used in SStream.
40
void
41
s_stream_write (SStream * self, size_t len, sbyte * data) {
42
  s_mutex_lock (self->priv->mutex);
43
  
44
  SStreamClass * klass = S_STREAM_CLASS (s_object_get_class (S_OBJECT(self)));
45
  
46
  klass->writer (self, len, data);
47
  
48
  s_mutex_unlock (self->priv->mutex);
49
}
50
51
sbyte *
52
s_stream_read (SStream * self, size_t len) {
53
  s_mutex_lock (self->priv->mutex);
54
  
55
  sbyte * bytes = NULL;
56
  
57
  SStreamClass * klass = S_STREAM_CLASS (s_object_get_class (S_OBJECT(self)));
58
  
59
  bytes = klass->reader (self, len);
60
  
61
  s_mutex_unlock (self->priv->mutex);
62
  
63
  return bytes;
64
}
65
66
void
99 by Gustav Hartvigsson
* Working on RingBuffer and Stream.
67
s_stream_internal_initialize (SStreamClass * klass) {
98 by Gustav Hartvigsson
* Started work on SRingBuffer to be used in SStream.
68
  klass->writer = s_stream_internal_write;
69
  klass->reader = s_stream_internal_read;
70
}
71
72
void
99 by Gustav Hartvigsson
* Working on RingBuffer and Stream.
73
s_stream_internal_write (SStream * self, size_t len, sbyte * data) {
74
  
75
  
76
  
77
}
78
79
sbyte *
80
s_stream_internal_read (SStream * self, size_t len) {
81
  sbyte * bytes = NULL;
82
  
83
  
84
  return bytes;
85
}
86
87
88
89
90