Diff for /libelwix/inc/elwix/aring.h between versions 1.1.2.1 and 1.5.2.1

version 1.1.2.1, 2025/09/26 08:58:05 version 1.5.2.1, 2026/02/11 13:33:22
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 46  SUCH DAMAGE. Line 46  SUCH DAMAGE.
 #ifndef __ARING_H  #ifndef __ARING_H
 #define __ARING_H  #define __ARING_H
   
   #define E_ATOMIC_ALIGN  alignas(sizeof(int) * 8)
   
 typedef struct {  typedef struct {
        atomic_int        rb_head;        E_ATOMIC_ALIGN  int             rb_head;
        atomic_int        rb_tail;        E        E_ATOMIC_ALIGN   int             rb_tail;
        int             rb_bufnum;                        int             rb_bufnum;
        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 108  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);
 /*
  * lrb_getw() - Get address for write
  *
  * @lrb = Linear ring buffer
  * @len = Return available buffer length for write
  * return: NULL error or !=NULL pointer for write
  * remark: After use of lrb_getw() and write to pointer.
  *              You should update ring buffer with lrb_enqueue(,NULL,wrote_len,)
  */
 void *lrb_getw(lrbuf_t *lrb, size_t *len);
 /*
  * lrb_getr() - Get address for read
  *
  * @lrb = Linear ring buffer
  * @len = Return available data length for read
  * return: NULL error or !=NULL pointer for read
  * remark: After use of lrb_getr() and read from pointer.
  *              You could update ring buffer with lrb_dequeue(,NULL,read_len)
  */
 void *lrb_getr(lrbuf_t *lrb, size_t *len);
   
   
 #endif  #endif

Removed from v.1.1.2.1  
changed lines
  Added in v.1.5.2.1


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