25#ifndef ODTRVIS16BITATOMICOPS
26#define ODTRVIS16BITATOMICOPS
43#ifndef TD_SINGLE_THREAD
44 return (
OdUInt32)::OdInterlockedIncrement(
reinterpret_cast<volatile int*
>(&incVal));
52#ifndef TD_SINGLE_THREAD
53 return (
OdUInt32)::OdInterlockedDecrement(
reinterpret_cast<volatile int*
>(&decVal));
70#ifndef TD_SINGLE_THREAD
71#ifdef InterlockedIncrement16
73 return InterlockedIncrement16(
reinterpret_cast<volatile SHORT*
>(&incVal));
75 if (&incVal < &refVal)
77 volatile int *pReg =
reinterpret_cast<volatile int*
>(&incVal);
79 return (
OdUInt16)(::OdInterlockedExchangeAdd(pReg, 1 << 16) >> 16) + 1;
81 return (
OdUInt16)::OdInterlockedIncrement(pReg);
86 volatile int *pReg =
reinterpret_cast<volatile int*
>(&refVal);
88 return (
OdUInt16)::OdInterlockedIncrement(pReg);
90 return (
OdUInt16)(::OdInterlockedExchangeAdd(pReg, 1 << 16) >> 16) + 1;
102#ifndef TD_SINGLE_THREAD
103#ifdef InterlockedDecrement16
105 return InterlockedDecrement16(
reinterpret_cast<volatile SHORT*
>(&decVal));
107 if (&decVal < &refVal)
109 volatile int *pReg =
reinterpret_cast<volatile int*
>(&decVal);
111 return (
OdUInt16)(::OdInterlockedExchangeAdd(pReg, -(1 << 16)) >> 16) - 1;
113 return (
OdUInt16)::OdInterlockedDecrement(pReg);
118 volatile int *pReg =
reinterpret_cast<volatile int*
>(&refVal);
120 return (
OdUInt16)::OdInterlockedDecrement(pReg);
122 return (
OdUInt16)(::OdInterlockedExchangeAdd(pReg, -(1 << 16)) >> 16) - 1;
OdUInt16 interlockedPostIncrement16(OdUInt16 &incVal, OdUInt16 &refVal)
OdUInt16 interlockedDecrement16(OdUInt16 &decVal, OdUInt16 &refVal)
OdUInt32 interlockedIncrement32(OdUInt32 &incVal)
OdUInt16 interlockedIncrement16(OdUInt16 &incVal, OdUInt16 &refVal)
OdUInt32 interlockedDecrement32(OdUInt32 &decVal)
OdUInt16 interlockedPostDecrement16(OdUInt16 &decVal, OdUInt16 &refVal)
OdUInt32 interlockedPostIncrement32(OdUInt32 &incVal)
OdUInt32 interlockedPostDecrement32(OdUInt32 &decVal)