Diff for /libelwix/inc/elwix/aring.h between versions 1.2 and 1.4.4.1

version 1.2, 2025/09/26 10:16:59 version 1.4.4.1, 2026/02/10 15:49:08
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;
                           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); \
                                           (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 127  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.2  
changed lines
  Added in v.1.4.4.1


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