private.h 1.8 KB

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