1/* 2 * Copyright (c) 2012 Ronald S. Bultje <rsbultje@gmail.com> 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21#ifndef AVUTIL_ATOMIC_H 22#define AVUTIL_ATOMIC_H 23 24#include "config.h" 25 26#if HAVE_ATOMICS_NATIVE 27 28#if HAVE_ATOMICS_GCC 29#include "atomic_gcc.h" 30#elif HAVE_ATOMICS_WIN32 31#include "atomic_win32.h" 32#elif HAVE_ATOMICS_SUNCC 33#include "atomic_suncc.h" 34#endif 35 36#else 37 38/** 39 * Load the current value stored in an atomic integer. 40 * 41 * @param ptr atomic integer 42 * @return the current value of the atomic integer 43 * @note This acts as a memory barrier. 44 */ 45int avpriv_atomic_int_get(volatile int *ptr); 46 47/** 48 * Store a new value in an atomic integer. 49 * 50 * @param ptr atomic integer 51 * @param val the value to store in the atomic integer 52 * @note This acts as a memory barrier. 53 */ 54void avpriv_atomic_int_set(volatile int *ptr, int val); 55 56/** 57 * Add a value to an atomic integer. 58 * 59 * @param ptr atomic integer 60 * @param inc the value to add to the atomic integer (may be negative) 61 * @return the new value of the atomic integer. 62 * @note This does NOT act as a memory barrier. This is primarily 63 * intended for reference counting. 64 */ 65int avpriv_atomic_int_add_and_fetch(volatile int *ptr, int inc); 66 67/** 68 * Atomic pointer compare and swap. 69 * 70 * @param ptr pointer to the pointer to operate on 71 * @param oldval do the swap if the current value of *ptr equals to oldval 72 * @param newval value to replace *ptr with 73 * @return the value of *ptr before comparison 74 */ 75void *avpriv_atomic_ptr_cas(void * volatile *ptr, void *oldval, void *newval); 76 77#endif /* HAVE_ATOMICS_NATIVE */ 78 79#endif /* AVUTIL_ATOMIC_H */ 80