/alps/fastwriter

To get this branch, use:
bzr branch http://darksoft.org/webbzr/alps/fastwriter
1 by Suren A. Chilingaryan
Initial release
1
#ifndef _FASTWRITER_PRIVATE_H
2
#define _FASTWRITER_PRIVATE_H
3
4 by Suren A. Chilingaryan
Few synchronization and alignment related fixes
4
#define FASTWRITER_SYNCIO_ALIGN 512
1 by Suren A. Chilingaryan
Initial release
5
#define FASTWRITER_DEFAULT_BUFFER_SIZE 134217728 /* 128 MB */
6
#define FASTWRITER_RESERVE_MEMORY 536870912 /* 512 MB */
7
8
#include <pthread.h>
9
#include "fastwriter.h"
10
11
typedef struct {
12
    fastwriter_flags_t flags;
13
    size_t buffer_size;
14
} fastwriter_parameters_t;
15
16
typedef enum {
17
    FASTWRITER_WRITE_FLAGS_DEFAULT = 0,
18
    FASTWRITER_WRITE_FLAG_FORCE = 1		/**< Force writting all passed data */
19
} fastwriter_write_flags_t;
20
21
typedef struct {
22
    int (*open)(fastwriter_t *ctx, const char *name, fastwriter_flags_t flags);
23
    void (*close)(fastwriter_t *ctx);
24
    int (*write)(fastwriter_t *ctx, fastwriter_write_flags_t flags, size_t size, void *data, size_t *written);
25
} fastwriter_api_t;
26
27
struct fastwrtier_s {
28
    fastwriter_api_t *api;		/**< Writer API */
29
    void *ctx;				/**< Writer Context */
30
    
31
    fastwriter_flags_t flags;
32
33
    int clean_locks;
34
    volatile int err;		        /**< indicates error reported by the writter backend */
35
    volatile int run_flag;
36
    pthread_t wthread;
37
    pthread_cond_t data_cond;		/**< broadcasted when new data arrives */
38
    pthread_mutex_t data_cond_mutex;
39
    pthread_cond_t space_cond;		/**< broadcasted when some space is freed */
40
    pthread_mutex_t space_cond_mutex;
41
42
    void *buffer;
43
    size_t size;		/**< size of the ring buffer in bytes */
44
    size_t max_usage;		/**< maximal number of bytes used in ring buffer */
45
    volatile size_t tail;	/**< first unwritten data in the ring buffer */
46
    volatile size_t head;	/**< last commited data in the ring buffer */
47
    size_t pos;			/**< last pushed data in the ring buffer */
48
49
    size_t written;		/**< number of bytes written */
50
    size_t commited;		/**< number of bytes commited */
51
    size_t chunked;		/**< number of bytes chunked */
52
53
    fastwriter_parameters_t params;
54
};
55
56
#endif /* _FASTWRITER_PRIVATE_H */