root/opal/mca/pmix/pmix4x/pmix/src/class/pmix_ring_buffer.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* -*- Mode: C; c-basic-offset:4 ; -*- */
   2 /*
   3  * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
   4  *                         University Research and Technology
   5  *                         Corporation.  All rights reserved.
   6  * Copyright (c) 2004-2008 The University of Tennessee and The University
   7  *                         of Tennessee Research Foundation.  All rights
   8  *                         reserved.
   9  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
  10  *                         University of Stuttgart.  All rights reserved.
  11  * Copyright (c) 2004-2005 The Regents of the University of California.
  12  *                         All rights reserved.
  13  * Copyright (c) 2010      Cisco Systems, Inc. All rights reserved.
  14  * Copyright (c) 2016      Intel, Inc. All rights reserved.
  15  * $COPYRIGHT$
  16  *
  17  * Additional copyrights may follow
  18  *
  19  * $HEADER$
  20  */
  21 /** @file
  22  *
  23  */
  24 
  25 #ifndef PMIX_RING_BUFFER_H
  26 #define PMIX_RING_BUFFER_H
  27 
  28 #include <src/include/pmix_config.h>
  29 
  30 #include "src/class/pmix_object.h"
  31 #include "src/util/output.h"
  32 
  33 BEGIN_C_DECLS
  34 
  35 /**
  36  * dynamic pointer ring
  37  */
  38 struct pmix_ring_buffer_t {
  39     /** base class */
  40     pmix_object_t super;
  41     /* head/tail indices */
  42     int head;
  43     int tail;
  44     /** size of list, i.e. number of elements in addr */
  45     int size;
  46     /** pointer to ring */
  47     char **addr;
  48 };
  49 /**
  50  * Convenience typedef
  51  */
  52 typedef struct pmix_ring_buffer_t pmix_ring_buffer_t;
  53 /**
  54  * Class declaration
  55  */
  56 PMIX_CLASS_DECLARATION(pmix_ring_buffer_t);
  57 
  58 /**
  59  * Initialize the ring buffer, defining its size.
  60  *
  61  * @param ring Pointer to a ring buffer (IN/OUT)
  62  * @param size The number of elements in the ring (IN)
  63  *
  64  * @return PMIX_SUCCESS if all initializations were succesful. Otherwise,
  65  *  the error indicate what went wrong in the function.
  66  */
  67 PMIX_EXPORT int pmix_ring_buffer_init(pmix_ring_buffer_t* ring, int size);
  68 
  69 /**
  70  * Push an item onto the ring buffer, displacing the oldest
  71  * item on the ring if the ring is full
  72  *
  73  * @param ring Pointer to ring (IN)
  74  * @param ptr Pointer value (IN)
  75  *
  76  * @return Pointer to displaced item, NULL if ring
  77  *         is not yet full
  78  */
  79 PMIX_EXPORT void* pmix_ring_buffer_push(pmix_ring_buffer_t *ring, void *ptr);
  80 
  81 
  82 /**
  83  * Pop an item off of the ring. The oldest entry on the ring will be
  84  * returned. If nothing on the ring, NULL is returned.
  85  *
  86  * @param ring          Pointer to ring (IN)
  87  *
  88  * @return Error code.  NULL indicates an error.
  89  */
  90 
  91 PMIX_EXPORT void* pmix_ring_buffer_pop(pmix_ring_buffer_t *ring);
  92 
  93 /*
  94  * Access an element of the ring, without removing it, indexed
  95  * starting at the tail - a value of -1 will return the element
  96  * at the head of the ring
  97  */
  98 PMIX_EXPORT void* pmix_ring_buffer_poke(pmix_ring_buffer_t *ring, int i);
  99 
 100 END_C_DECLS
 101 
 102 #endif /* PMIX_RING_BUFFER_H */

/* [<][>][^][v][top][bottom][index][help] */