// Copyright 2012 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. #ifndef SYNC_H #define SYNC_H class sync { public: template static bool compare_and_swap(T *address, T oldValue, T newValue) { return __sync_bool_compare_and_swap(address, oldValue, newValue); } template static T increment(T *address) { return __sync_add_and_fetch(address, 1); } template static T decrement(T *address) { return __sync_sub_and_fetch(address, 1); } template static T increment(T &address) { return __sync_add_and_fetch(&address, 1); } template static T decrement(T &address) { return __sync_sub_and_fetch(&address, 1); } template static T read(T *address) { return __sync_add_and_fetch(address, 0); } template static T read(T &address) { return __sync_add_and_fetch(&address, 0); } }; #endif /* SYNC_H */