/alps/fastwriter

To get this branch, use:
bzr branch http://suren.me/webbzr/alps/fastwriter

« back to all changes in this revision

Viewing changes to private.h

  • Committer: Suren A. Chilingaryan
  • Date: 2011-12-13 13:57:51 UTC
  • Revision ID: csa@dside.dyndns.org-20111213135751-bpzkwwn7ujnkdekc
Initial release

Show diffs side-by-side

added added

removed removed

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