root/opal/class/opal_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$
  15  *
  16  * Additional copyrights may follow
  17  *
  18  * $HEADER$
  19  */
  20 /** @file
  21  *
  22  */
  23 
  24 #ifndef OPAL_RING_BUFFER_H
  25 #define OPAL_RING_BUFFER_H
  26 
  27 #include "opal_config.h"
  28 
  29 #include "opal/threads/threads.h"
  30 #include "opal/class/opal_object.h"
  31 #include "opal/util/output.h"
  32 
  33 BEGIN_C_DECLS
  34 
  35 /**
  36  * dynamic pointer ring
  37  */
  38 struct opal_ring_buffer_t {
  39     /** base class */
  40     opal_object_t super;
  41     /** synchronization object */
  42     opal_mutex_t lock;
  43     opal_condition_t cond;
  44     bool in_use;
  45     /* head/tail indices */
  46     int head;
  47     int tail;
  48     /** size of list, i.e. number of elements in addr */
  49     int size;
  50     /** pointer to ring */
  51     char **addr;
  52 };
  53 /**
  54  * Convenience typedef
  55  */
  56 typedef struct opal_ring_buffer_t opal_ring_buffer_t;
  57 /**
  58  * Class declaration
  59  */
  60 OPAL_DECLSPEC OBJ_CLASS_DECLARATION(opal_ring_buffer_t);
  61 
  62 /**
  63  * Initialize the ring buffer, defining its size.
  64  *
  65  * @param ring Pointer to a ring buffer (IN/OUT)
  66  * @param size The number of elements in the ring (IN)
  67  *
  68  * @return OPAL_SUCCESS if all initializations were succesful. Otherwise,
  69  *  the error indicate what went wrong in the function.
  70  */
  71 OPAL_DECLSPEC int opal_ring_buffer_init(opal_ring_buffer_t* ring, int size);
  72 
  73 /**
  74  * Push an item onto the ring buffer
  75  *
  76  * @param ring Pointer to ring (IN)
  77  * @param ptr Pointer value (IN)
  78  *
  79  * @return OPAL_SUCCESS. Returns error if ring cannot take
  80  *  another entry
  81  */
  82 OPAL_DECLSPEC void* opal_ring_buffer_push(opal_ring_buffer_t *ring, void *ptr);
  83 
  84 
  85 /**
  86  * Pop an item off of the ring. The oldest entry on the ring will be
  87  * returned. If nothing on the ring, NULL is returned.
  88  *
  89  * @param ring          Pointer to ring (IN)
  90  *
  91  * @return Error code.  NULL indicates an error.
  92  */
  93 
  94 OPAL_DECLSPEC void* opal_ring_buffer_pop(opal_ring_buffer_t *ring);
  95 
  96 /*
  97  * Access an element of the ring, without removing it, indexed
  98  * starting at the tail - a value of -1 will return the element
  99  * at the head of the ring
 100  */
 101 OPAL_DECLSPEC void* opal_ring_buffer_poke(opal_ring_buffer_t *ring, int i);
 102 
 103 END_C_DECLS
 104 
 105 #endif /* OPAL_RING_BUFFER_H */

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