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 */ |