mirror of
https://github.com/mcneel/opennurbs.git
synced 2026-03-22 02:20:35 +08:00
Sync changes from upstream repository
Co-authored-by: Alain <alain@mcneel.com> Co-authored-by: Andrew Le Bihan <andy@mcneel.com> Co-authored-by: Bozo <bozo@mcneel.com> Co-authored-by: chuck <chuck@mcneel.com> Co-authored-by: Dale Fugier <dale@mcneel.com> Co-authored-by: Giulio Piacentino <giulio@mcneel.com> Co-authored-by: John Croudy <croudyj@gmail.com> Co-authored-by: Mikko Oksanen <mikko@mcneel.com> Co-authored-by: Pierre Cuvilliers <pierre@mcneel.com> Co-authored-by: Steve Baer <steve@mcneel.com>
This commit is contained in:
@@ -1,105 +1,105 @@
|
||||
/* $NoKeywords: $ */
|
||||
/*
|
||||
//
|
||||
// Copyright (c) 1993-2013 Robert McNeel & Associates. All rights reserved.
|
||||
// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
|
||||
// McNeel & Associates.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
|
||||
// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
|
||||
// MERCHANTABILITY ARE HEREBY DISCLAIMED.
|
||||
//
|
||||
// For complete openNURBS copyright information see <http://www.opennurbs.org>.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////
|
||||
*/
|
||||
|
||||
#include "opennurbs.h"
|
||||
|
||||
#if !defined(ON_COMPILING_OPENNURBS)
|
||||
// This check is included in all opennurbs source .c and .cpp files to insure
|
||||
// ON_COMPILING_OPENNURBS is defined when opennurbs source is compiled.
|
||||
// When opennurbs source is being compiled, ON_COMPILING_OPENNURBS is defined
|
||||
// and the opennurbs .h files alter what is declared and how it is declared.
|
||||
#error ON_COMPILING_OPENNURBS must be defined when compiling opennurbs
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(ON_COMPILER_CLANG)
|
||||
ON_Lock::ON_Lock() ON_NOEXCEPT
|
||||
: m_lock_value(ON_Lock::UnlockedValue)
|
||||
{}
|
||||
#endif
|
||||
|
||||
/*
|
||||
Description:
|
||||
ON_TestIntLock is used as the test function in sleep locks that
|
||||
set 4 byte integer values. If the input value of lock is test_value,
|
||||
then it is set to sleep_value.
|
||||
Parameters:
|
||||
test_value - [in]
|
||||
sleep_value - [in]
|
||||
lock - [in/out]
|
||||
4 byte integer to test.
|
||||
If lock == test_value, then lock is set to sleep_value.
|
||||
If lock != test_value, then the value of lock is not changed
|
||||
Returns:
|
||||
The input value of lock.
|
||||
*/
|
||||
|
||||
/*
|
||||
Description:
|
||||
ON_SetIntLock is used to unconditionally
|
||||
lock = lock_value and return the original value of lock
|
||||
as an atomic operation.
|
||||
It is intended to be used when a sleep lock is employed to make
|
||||
setting the lock thread safe.
|
||||
Parameters:
|
||||
lock - [in/out]
|
||||
4 byte integer to set
|
||||
lock_value - [in]
|
||||
Returns:
|
||||
The input value of lock.
|
||||
*/
|
||||
|
||||
int ON_Lock::IsLocked()
|
||||
{
|
||||
const int is_locked = m_lock_value;
|
||||
return is_locked;
|
||||
}
|
||||
|
||||
bool ON_Lock::GetDefaultLock()
|
||||
{
|
||||
return GetLock(ON_Lock::DefaultLockedValue);
|
||||
}
|
||||
|
||||
bool ON_Lock::ReturnDefaultLock()
|
||||
{
|
||||
return ReturnLock(ON_Lock::DefaultLockedValue);
|
||||
}
|
||||
|
||||
bool ON_Lock::GetLock(int lock_value)
|
||||
{
|
||||
if ( ON_Lock::UnlockedValue == lock_value || ON_Lock::InvalidLockValue == lock_value )
|
||||
return false;
|
||||
int test_value = ON_Lock::UnlockedValue;
|
||||
const bool rc = m_lock_value.compare_exchange_strong(test_value, lock_value);
|
||||
return (rc && ON_Lock::UnlockedValue == test_value);
|
||||
}
|
||||
|
||||
bool ON_Lock::ReturnLock(int lock_value)
|
||||
{
|
||||
if ( ON_Lock::UnlockedValue == lock_value || ON_Lock::InvalidLockValue == lock_value )
|
||||
return false;
|
||||
int test_value = lock_value;
|
||||
const bool rc = m_lock_value.compare_exchange_strong(test_value,ON_Lock::UnlockedValue);
|
||||
return (rc && lock_value == test_value);
|
||||
}
|
||||
|
||||
int ON_Lock::BreakLock()
|
||||
{
|
||||
const int previous_lock_value = m_lock_value;
|
||||
m_lock_value = ON_Lock::UnlockedValue;
|
||||
return previous_lock_value;
|
||||
}
|
||||
|
||||
/* $NoKeywords: $ */
|
||||
/*
|
||||
//
|
||||
// Copyright (c) 1993-2013 Robert McNeel & Associates. All rights reserved.
|
||||
// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
|
||||
// McNeel & Associates.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
|
||||
// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
|
||||
// MERCHANTABILITY ARE HEREBY DISCLAIMED.
|
||||
//
|
||||
// For complete openNURBS copyright information see <http://www.opennurbs.org>.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////
|
||||
*/
|
||||
|
||||
#include "opennurbs.h"
|
||||
|
||||
#if !defined(ON_COMPILING_OPENNURBS)
|
||||
// This check is included in all opennurbs source .c and .cpp files to insure
|
||||
// ON_COMPILING_OPENNURBS is defined when opennurbs source is compiled.
|
||||
// When opennurbs source is being compiled, ON_COMPILING_OPENNURBS is defined
|
||||
// and the opennurbs .h files alter what is declared and how it is declared.
|
||||
#error ON_COMPILING_OPENNURBS must be defined when compiling opennurbs
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(ON_COMPILER_CLANG)
|
||||
ON_Lock::ON_Lock() ON_NOEXCEPT
|
||||
: m_lock_value(ON_Lock::UnlockedValue)
|
||||
{}
|
||||
#endif
|
||||
|
||||
/*
|
||||
Description:
|
||||
ON_TestIntLock is used as the test function in sleep locks that
|
||||
set 4 byte integer values. If the input value of lock is test_value,
|
||||
then it is set to sleep_value.
|
||||
Parameters:
|
||||
test_value - [in]
|
||||
sleep_value - [in]
|
||||
lock - [in/out]
|
||||
4 byte integer to test.
|
||||
If lock == test_value, then lock is set to sleep_value.
|
||||
If lock != test_value, then the value of lock is not changed
|
||||
Returns:
|
||||
The input value of lock.
|
||||
*/
|
||||
|
||||
/*
|
||||
Description:
|
||||
ON_SetIntLock is used to unconditionally
|
||||
lock = lock_value and return the original value of lock
|
||||
as an atomic operation.
|
||||
It is intended to be used when a sleep lock is employed to make
|
||||
setting the lock thread safe.
|
||||
Parameters:
|
||||
lock - [in/out]
|
||||
4 byte integer to set
|
||||
lock_value - [in]
|
||||
Returns:
|
||||
The input value of lock.
|
||||
*/
|
||||
|
||||
int ON_Lock::IsLocked()
|
||||
{
|
||||
const int is_locked = m_lock_value;
|
||||
return is_locked;
|
||||
}
|
||||
|
||||
bool ON_Lock::GetDefaultLock()
|
||||
{
|
||||
return GetLock(ON_Lock::DefaultLockedValue);
|
||||
}
|
||||
|
||||
bool ON_Lock::ReturnDefaultLock()
|
||||
{
|
||||
return ReturnLock(ON_Lock::DefaultLockedValue);
|
||||
}
|
||||
|
||||
bool ON_Lock::GetLock(int lock_value)
|
||||
{
|
||||
if ( ON_Lock::UnlockedValue == lock_value || ON_Lock::InvalidLockValue == lock_value )
|
||||
return false;
|
||||
int test_value = ON_Lock::UnlockedValue;
|
||||
const bool rc = m_lock_value.compare_exchange_strong(test_value, lock_value);
|
||||
return (rc && ON_Lock::UnlockedValue == test_value);
|
||||
}
|
||||
|
||||
bool ON_Lock::ReturnLock(int lock_value)
|
||||
{
|
||||
if ( ON_Lock::UnlockedValue == lock_value || ON_Lock::InvalidLockValue == lock_value )
|
||||
return false;
|
||||
int test_value = lock_value;
|
||||
const bool rc = m_lock_value.compare_exchange_strong(test_value,ON_Lock::UnlockedValue);
|
||||
return (rc && lock_value == test_value);
|
||||
}
|
||||
|
||||
int ON_Lock::BreakLock()
|
||||
{
|
||||
const int previous_lock_value = m_lock_value;
|
||||
m_lock_value = ON_Lock::UnlockedValue;
|
||||
return previous_lock_value;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user