![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /etc/alternatives/mpi/openmpi/opal/class/ |
Upload File : |
/* -*- Mode: C; c-basic-offset:4 ; -*- */ /* * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * University Research and Technology * Corporation. All rights reserved. * Copyright (c) 2004-2008 The University of Tennessee and The University * of Tennessee Research Foundation. All rights * reserved. * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * University of Stuttgart. All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2010 Cisco Systems, Inc. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow * * $HEADER$ */ /** @file * */ #ifndef OPAL_RING_BUFFER_H #define OPAL_RING_BUFFER_H #include "opal_config.h" #include "opal/threads/threads.h" #include "opal/class/opal_object.h" #include "opal/util/output.h" BEGIN_C_DECLS /** * dynamic pointer ring */ struct opal_ring_buffer_t { /** base class */ opal_object_t super; /** synchronization object */ opal_mutex_t lock; opal_condition_t cond; bool in_use; /* head/tail indices */ int head; int tail; /** size of list, i.e. number of elements in addr */ int size; /** pointer to ring */ char **addr; }; /** * Convenience typedef */ typedef struct opal_ring_buffer_t opal_ring_buffer_t; /** * Class declaration */ OPAL_DECLSPEC OBJ_CLASS_DECLARATION(opal_ring_buffer_t); /** * Initialize the ring buffer, defining its size. * * @param ring Pointer to a ring buffer (IN/OUT) * @param size The number of elements in the ring (IN) * * @return OPAL_SUCCESS if all initializations were succesful. Otherwise, * the error indicate what went wrong in the function. */ OPAL_DECLSPEC int opal_ring_buffer_init(opal_ring_buffer_t* ring, int size); /** * Push an item onto the ring buffer * * @param ring Pointer to ring (IN) * @param ptr Pointer value (IN) * * @return OPAL_SUCCESS. Returns error if ring cannot take * another entry */ OPAL_DECLSPEC void* opal_ring_buffer_push(opal_ring_buffer_t *ring, void *ptr); /** * Pop an item off of the ring. The oldest entry on the ring will be * returned. If nothing on the ring, NULL is returned. * * @param ring Pointer to ring (IN) * * @return Error code. NULL indicates an error. */ OPAL_DECLSPEC void* opal_ring_buffer_pop(opal_ring_buffer_t *ring); /* * Access an element of the ring, without removing it, indexed * starting at the tail - a value of -1 will return the element * at the head of the ring */ OPAL_DECLSPEC void* opal_ring_buffer_poke(opal_ring_buffer_t *ring, int i); END_C_DECLS #endif /* OPAL_RING_BUFFER_H */