| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /*
- * 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
- }
|