/simpletypesystem/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/simpletypesystem/trunk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#ifndef __H_THREAD__
#define __H_THREAD__

#include "defs.h"
#include "utils.h"
#include "Func.h"

BEGIN_DECLS

#include "config.h"

#if  !__STDC_NO_ATOMICS__
#pragma message ("We have _Atomic")
#include <stdatomic.h>
#else
#pragma message ("We don't have standard _Atomic. includeing external .h file.")
#include "external/stdatomic.h"
#endif

#if !__STDC_NO_THREADS__
#pragma message ("We have threads.h")
#include <threads.h>
#else
#pragma message ("We don't have standard threads.h. includeing external .h file.")
#include "external/threads.h"
#endif


/**
 * @defgroup Threading Threading
 * @addtogroup Threading
 * @{
 */


/**
 * Sleep for a set amount of micro seconds.
 */
void
s_usleep (slong us);


/* ****************************************************************************
 ********************************** SMutex ************************************
 **************************************************************************** */

/**
 * @defgroup Mutex Mutex
 * @addtogroup Mutex
 * @{
 */

/**
 * An SMutex is an opaque data type that handles the platform specifics of the
 * Mutex, if it exists. If not we roll our own.
 */
typedef struct SMutex SMutex;

/**
 * Create a new SMutex;
 */
SMutex *
s_mutex_new ();

/**
 * Free the mutex.
 */
void
s_mutex_free (SMutex * self);

/**
 * Lock the mutex.
 *
 * Returns a key used to unlock the mutex.
 */
sint
s_mutex_lock (SMutex * self);

/**
 * unlock the mutex.
 *
 * @param self The mutex to unlock;
 * @param key The key used to unlock the mutex.
 */
sint
s_mutex_unlock (SMutex * self);

/**
 * Check if a mutex is locked.
 *
 * Note that this operation is non-atomic and may be wrong. 
 */
sboolean
s_mutex_check_lock (SMutex * self);

/** @} */

/* ****************************************************************************
 ********************************** SThread ***********************************
 **************************************************************************** */

/**
 * @defgroup SThread SThread
 * @addtogroup SThread
 * @{
 */

/**
 * An opaque data type representing a Thread.
 */
typedef struct SThread SThread;

/**
 * Creat a now Thread.
 */
SThread *
s_thread_new (RunFunc func);

/**
 * Free the thread object.
 */
void
s_thread_free (SThread * self);

/**
 * Run the thread.
 */
sboolean
s_thread_run (SThread * self, spointer user_data);


/** @} */

/** @} */

END_DECLS
#endif /* __H_THREAD__ */