mirror of
https://github.com/celisej567/mcpe.git
synced 2025-12-31 17:49:17 +03:00
53 lines
1.1 KiB
C++
53 lines
1.1 KiB
C++
/*
|
|
* Copyright (c) 2014, Oculus VR, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
*/
|
|
|
|
#include "LocklessTypes.h"
|
|
|
|
using namespace RakNet;
|
|
|
|
LocklessUint32_t::LocklessUint32_t()
|
|
{
|
|
value=0;
|
|
}
|
|
LocklessUint32_t::LocklessUint32_t(uint32_t initial)
|
|
{
|
|
value=initial;
|
|
}
|
|
uint32_t LocklessUint32_t::Increment(void)
|
|
{
|
|
#ifdef _WIN32
|
|
return (uint32_t) InterlockedIncrement(&value);
|
|
#elif defined(ANDROID) || defined(__S3E__) || defined(__APPLE__)
|
|
uint32_t v;
|
|
mutex.Lock();
|
|
++value;
|
|
v=value;
|
|
mutex.Unlock();
|
|
return v;
|
|
#else
|
|
return __sync_fetch_and_add (&value, (uint32_t) 1);
|
|
#endif
|
|
}
|
|
uint32_t LocklessUint32_t::Decrement(void)
|
|
{
|
|
#ifdef _WIN32
|
|
return (uint32_t) InterlockedDecrement(&value);
|
|
#elif defined(ANDROID) || defined(__S3E__) || defined(__APPLE__)
|
|
uint32_t v;
|
|
mutex.Lock();
|
|
--value;
|
|
v=value;
|
|
mutex.Unlock();
|
|
return v;
|
|
#else
|
|
return __sync_fetch_and_add (&value, (uint32_t) -1);
|
|
#endif
|
|
}
|