Windows2003-3790/public/sdk/inc/winbase_interlockedunsigned.h
2020-09-30 16:53:55 +02:00

190 lines
4.3 KiB
C

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
winbase_interlockedunsigned.h
Abstract:
Simple inline casting wrappers of the Interlocked functions to act on ULONG and ULONGLONG.
Author:
Jay Krell (JayKrell) April 2002
Environment:
Revision History:
--*/
#if !defined(MICROSOFT_WINDOWS_WINBASE_INTERLOCKED_UNSIGNED_H_INCLUDED) /* { */
#define MICROSOFT_WINDOWS_WINBASE_INTERLOCKED_UNSIGNED_H_INCLUDED
#if _MSC_VER > 1000
#pragma once
#endif
#if !defined(RC_INVOKED) /* { */
#if !defined(MIDL_PASS) /* { */
#if !defined(MICROSOFT_WINDOWS_WINBASE_H_DEFINE_INTERLOCKED_UNSIGNED)
#define MICROSOFT_WINDOWS_WINBASE_H_DEFINE_INTERLOCKED_UNSIGNED (_WIN32_WINNT >= 0x0502 || !defined(_WINBASE_))
#endif
#if MICROSOFT_WINDOWS_WINBASE_H_DEFINE_INTERLOCKED_UNSIGNED /* { */
FORCEINLINE
ULONG
InterlockedIncrementUlong(
IN OUT ULONG volatile *Addend
)
{
return (ULONG)InterlockedIncrement((LONG volatile *)Addend);
}
FORCEINLINE
ULONG
InterlockedDecrementUlong(
IN OUT ULONG volatile *Addend
)
{
return (ULONG)InterlockedDecrement((LONG volatile *)Addend);
}
FORCEINLINE
ULONG
InterlockedExchangeUlong(
IN OUT ULONG volatile *Target,
IN ULONG Value
)
{
return (ULONG)InterlockedExchange((LONG volatile *)Target, (LONG)Value);
}
FORCEINLINE
ULONG
InterlockedExchangeAddUlong(
IN OUT ULONG volatile *Addend,
IN ULONG Value
)
{
return (ULONG)InterlockedExchangeAdd((LONG volatile *)Addend, (LONG)Value);
}
FORCEINLINE
ULONG
InterlockedCompareExchangeUlong (
IN OUT ULONG volatile *Destination,
IN ULONG Exchange,
IN ULONG Comperand
)
{
return (ULONG)InterlockedCompareExchange((LONG volatile *)Destination, (LONG)Exchange, (LONG)Comperand);
}
#define InterlockedIncrementDword InterlockedIncrementUlong
#define InterlockedDecrementDword InterlockedDecrementUlong
#define InterlockedExchangeDword InterlockedExchangeUlong
#define InterlockedExchangeAddDword InterlockedExchangeAddUlong
#define InterlockedCompareExchangeDword InterlockedCompareExchangeUlong
#if defined(_WIN64)
FORCEINLINE
ULONGLONG
InterlockedIncrementUnsigned64(
IN OUT ULONGLONG volatile *Addend
)
{
return (ULONGLONG)InterlockedIncrement64((LONGLONG volatile *)Addend);
}
FORCEINLINE
ULONGLONG
InterlockedDecrementUnsigned64(
IN OUT ULONGLONG volatile *Addend
)
{
return (ULONGLONG)InterlockedDecrement64((LONGLONG volatile *)Addend);
}
FORCEINLINE
ULONGLONG
InterlockedExchangeUnsigned64(
IN OUT ULONGLONG volatile *Target,
IN ULONGLONG Value
)
{
return (ULONGLONG)InterlockedExchange64((LONGLONG volatile *)Target, (LONGLONG)Value);
}
FORCEINLINE
ULONGLONG
InterlockedExchangeAddUnsigned64(
IN OUT ULONGLONG volatile *Addend,
IN ULONGLONG Value
)
{
return (ULONGLONG)InterlockedExchangeAdd64((LONGLONG volatile *)Addend, (LONGLONG)Value);
}
#endif
FORCEINLINE
ULONGLONG
InterlockedCompareExchangeUnsigned64 (
IN OUT ULONGLONG volatile *Destination,
IN ULONGLONG Exchange,
IN ULONGLONG Comperand
)
{
return (ULONGLONG)InterlockedCompareExchange64((LONGLONG volatile *)Destination, (LONGLONG)Exchange, (LONGLONG)Comperand);
}
#if defined(_WINBASE_)
FORCEINLINE
ULONGLONG
InterlockedAndUnsigned64 (
IN OUT ULONGLONG volatile *Destination,
IN ULONGLONG Value
)
{
return (ULONGLONG)InterlockedAnd64((LONGLONG volatile *)Destination, (LONGLONG)Value);
}
FORCEINLINE
ULONGLONG
InterlockedOrUnsigned64 (
IN OUT ULONGLONG volatile *Destination,
IN ULONGLONG Value
)
{
return (ULONGLONG)InterlockedOr64((LONGLONG volatile *)Destination, (LONGLONG)Value);
}
FORCEINLINE
ULONGLONG
InterlockedXorUnsigned64 (
IN OUT ULONGLONG volatile *Destination,
IN ULONGLONG Value
)
{
return (ULONGLONG)InterlockedXor64((LONGLONG volatile *)Destination, (LONGLONG)Value);
}
#endif /* _WINBASE_ */
#endif /* } MICROSOFT_WINBASE_H_DEFINE_INTERLOCKED_UNSIGNED */
#undef MICROSOFT_WINBASE_H_DEFINE_INTERLOCKED_UNSIGNED
#define MICROSOFT_WINBASE_H_DEFINE_INTERLOCKED_UNSIGNED 0
#endif /* } MIDL_PASS */
#endif /* } RC_INVOKED */
#endif /* } MICROSOFT_WINDOWS_WINBASE_INTERLOCKED_UNSIGNED_H_INCLUDED */