Diff for /libelwix/inc/elwix/aring.h between versions 1.3 and 1.4.4.2

version 1.3, 2025/09/26 16:01:58 version 1.4.4.2, 2026/02/10 17:24:39
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004 - 2025Copyright 2004 - 2026
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 55  typedef struct { Line 55  typedef struct {
                         struct iovec    *rb_buffer;                          struct iovec    *rb_buffer;
 } ringbuf_t;  } ringbuf_t;
   
   typedef struct {
           E_ATOMIC_ALIGN  unsigned int    lrb_head;
           E_ATOMIC_ALIGN  unsigned int    lrb_tail;
           E_ATOMIC_ALIGN  unsigned int    lrb_full;
                           int             lrb_size;
                           unsigned char   *lrb_data;
   } lrbuf_t;
   #define lrb_queued(x, r)        do { \
                                           u_int _h, _t; \
                                           _t = atomic_load_explicit((atomic_int*) &(x)->lrb_tail, memory_order_acquire); \
                                           _h = atomic_load_explicit((atomic_int*) &(x)->lrb_head, memory_order_relaxed); \
                                           if (_h == _t) \
                                                   (r) = atomic_load_explicit((atomic_int*) &(x)->lrb_full, memory_order_acquire) ? \
                                                           (x)->lrb_size : 0; \
                                           else \
                                                   (r) = (_h + (x)->lrb_size - _t) % (x)->lrb_size; \
                                   } while (0)
   #define lrb_unused(x, r)        do { \
                                           u_int _r; \
                                           lrb_queued((x), _r); \
                                           (r) = (x)->lrb_size - _r; \
                                   } while (0)
   
   
 /*  /*
  * rbuf_init() - Init ring buffer   * rbuf_init() - Init ring buffer
  *   *
Line 109  int rbuf_enqueue(ringbuf_t *rbuf, void *data, size_t l Line 132  int rbuf_enqueue(ringbuf_t *rbuf, void *data, size_t l
  * @out = Data, if =NULL, just dequeue data   * @out = Data, if =NULL, just dequeue data
  * return: -1 error, 1 buffer is empty or 0 ok   * return: -1 error, 1 buffer is empty or 0 ok
  */   */
int rbuf_dequeue(ringbuf_t *rbuf, struct iovec *out);int rbuf_dequeue(ringbuf_t *rbuf, struct iovec **out);
 
 
 /*
  * lrb_init() - Init linear ring buffer
  *
  * @lrb = Linear ring buffer
  * @size = Size of ring buffer
  * return: -1 error or 0 ok
  */
 int lrb_init(lrbuf_t *lrb, u_int size);
 /*
  * lrb_free() - Free linear ring buffer
  *
  * @lrb = Linear ring buffer
  * return: none
  */
 void lrb_free(lrbuf_t *lrb);
 /*
  * lrb_purge() - Purge all buffer
  *
  * @lrb = Linear ring buffer
  * return: none
  */
 void lrb_purge(lrbuf_t *lrb);
 /*
  * lrb_isempty() - Check buffer is empty
  *
  * @lrb = Linear ring buffer
  * return: -1 error, 0 it isn't empty
  */
 int lrb_isempty(lrbuf_t *lrb);
 /*
  * lrb_isfull() - Check buffer is full
  *
  * @lrb = Linear ring buffer
  * return: -1 error or 0 it isn't full
  */
 int lrb_isfull(lrbuf_t *lrb);
 /*
  * lrb_enqueue() - Enqueue data to buffer
  *
  * @lrb = Linear ring buffer
  * @data = Data
  * @len = Length
  * @lost = Permit to lost data
  * return: -1 error, 1 buffer is full or 0 ok
  */
 int lrb_enqueue(lrbuf_t *lrb, void *data, size_t len, int lost);
 /*
  * lrb_dequeue() - Dequeue data from buffer
  *
  * @lrb = Linear ring buffer
  * @data = Data, if =NULL, just dequeue data
  * @len = Length of data
  * return: -1 error, 0 buffer is empty or >0 stored data bytes
  */
 int lrb_dequeue(lrbuf_t *lrb, void *data, size_t len);
   
   
 #endif  #endif

Removed from v.1.3  
changed lines
  Added in v.1.4.4.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>