aboutsummaryrefslogtreecommitdiff
path: root/assets/blender/gleis/rail_together.png
diff options
context:
space:
mode:
authororwell96 <mono96.mml@gmail.com>2017-02-02 23:07:09 +0100
committerorwell96 <mono96.mml@gmail.com>2017-02-02 23:07:09 +0100
commit4882abb1c08cdade0a56763cbc88e675a4600f2c (patch)
tree2789c986abc1d362f6d30ce45fca92ba5f1e33f6 /assets/blender/gleis/rail_together.png
parentbcf82ed70d62aeb42b0f6d70aa5ef54ac2b046af (diff)
parent54b78023d7b1f15525658e61aa1dfba0040b99f8 (diff)
downloadadvtrains-4882abb1c08cdade0a56763cbc88e675a4600f2c.tar.gz
advtrains-4882abb1c08cdade0a56763cbc88e675a4600f2c.tar.bz2
advtrains-4882abb1c08cdade0a56763cbc88e675a4600f2c.zip
Merge PR from mbb: add better textures and crafts
Diffstat (limited to 'assets/blender/gleis/rail_together.png')
0 files changed, 0 insertions, 0 deletions
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef THREADING_ATOMIC_H #define THREADING_ATOMIC_H #if __cplusplus >= 201103L #include <atomic> template<typename T> using Atomic = std::atomic<T>; template<typename T> using GenericAtomic = std::atomic<T>; #else #define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) #define CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) #if GCC_VERSION >= 407 || CLANG_VERSION >= 302 #define ATOMIC_LOAD_GENERIC(T, v) do { \ T _val; \ __atomic_load(&(v), &(_val), __ATOMIC_SEQ_CST); \ return _val; \ } while(0) #define ATOMIC_LOAD(T, v) return __atomic_load_n (&(v), __ATOMIC_SEQ_CST) #define ATOMIC_STORE(T, v, x) __atomic_store (&(v), &(x), __ATOMIC_SEQ_CST); return x #define ATOMIC_EXCHANGE(T, v, x) return __atomic_exchange (&(v), &(x), __ATOMIC_SEQ_CST) #define ATOMIC_ADD_EQ(T, v, x) return __atomic_add_fetch (&(v), (x), __ATOMIC_SEQ_CST) #define ATOMIC_SUB_EQ(T, v, x) return __atomic_sub_fetch (&(v), (x), __ATOMIC_SEQ_CST) #define ATOMIC_POST_INC(T, v) return __atomic_fetch_add (&(v), 1, __ATOMIC_SEQ_CST) #define ATOMIC_POST_DEC(T, v) return __atomic_fetch_sub (&(v), 1, __ATOMIC_SEQ_CST) #define ATOMIC_CAS(T, v, e, d) return __atomic_compare_exchange(&(v), &(e), &(d), \ false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) #else #define ATOMIC_USE_LOCK #include "threading/mutex.h" #define ATOMIC_LOCK_OP(T, op) do { \ m_mutex.lock(); \ T _val = (op); \ m_mutex.unlock(); \ return _val; \ } while (0) #define ATOMIC_LOCK_CAS(T, v, e, d) do { \ m_mutex.lock(); \ bool _eq = (v == e); \ if (_eq) \ v = d; \ m_mutex.unlock(); \ return _eq; \ } while (0) #define ATOMIC_LOAD(T, v) ATOMIC_LOCK_OP(T, v) #define ATOMIC_LOAD_GENERIC(T, v) ATOMIC_LOAD(T, v) #define ATOMIC_STORE(T, v, x) ATOMIC_LOCK_OP(T, v = x) #define ATOMIC_EXCHANGE(T, v, x) do { \ m_mutex.lock(); \ T _val = v; \ v = x; \ m_mutex.unlock(); \ return _val; \ } while (0)