Swapped from using system call wrappers to just system calls and designing the C/C++ RT.
This commit is contained in:
58
include/ehs/system/Lock.h
Normal file
58
include/ehs/system/Lock.h
Normal file
@@ -0,0 +1,58 @@
|
||||
#pragma once
|
||||
|
||||
#include "ehs/Types.h"
|
||||
|
||||
namespace ehs
|
||||
{
|
||||
class Lock
|
||||
{
|
||||
/// Does an atomic lock add operation.
|
||||
/// @param [in] a The address of the value to add to.
|
||||
/// @param [in] b The value to add from.
|
||||
static void Add(UInt_64* a, UInt_64 b);
|
||||
|
||||
/// Does an atomic lock subtract operation.
|
||||
/// @param [in] a The address of the value to subtract to.
|
||||
/// @param [in] b The value to subtract from.
|
||||
static void Sub(UInt_64* a, UInt_64 b);
|
||||
|
||||
/// Does an atomic lock compare exchange operation.
|
||||
/// @param [in/out] a The address of the value to compare with the value of b.
|
||||
/// @param [in/out] b The address of the value to compare with the value of a.
|
||||
/// @param [in] setter The address of the value to set the value of b to when a and b are equal.
|
||||
/// @returns True if equal.
|
||||
/// @note If a and b are not equal the value at the address of a will be set to the value at the address of b.
|
||||
static bool CmpXchg(UInt_64* a, UInt_64* b, UInt_64 setter);
|
||||
|
||||
/// Does an atomic lock and operation.
|
||||
/// @param [in] a The address of the first value to compare.
|
||||
/// @param [in] b The second value to compare.
|
||||
static void And(UInt_64* a, UInt_64 b);
|
||||
|
||||
/// Does an atomic lock or operation.
|
||||
/// @param [in] a The address of the first value to compare.
|
||||
/// @param [in] b The second value to compare.
|
||||
static void Or(UInt_64* a, UInt_64 b);
|
||||
|
||||
/// Does an atomic lock xor operation.
|
||||
/// @param [in] a The address of the first value to compare.
|
||||
/// @param [in] b The second value to compare.
|
||||
static void XOr(UInt_64* a, UInt_64 b);
|
||||
|
||||
/// Does an atomic lock increase operation.
|
||||
/// @param [in] a The address of the value to increase.
|
||||
static void Inc(UInt_64* a);
|
||||
|
||||
/// Does an atomic lock decrease operation.
|
||||
/// @param [in] a The address of the value to decrease.
|
||||
static void Dec(UInt_64* a);
|
||||
|
||||
/// Does an atomic lock not operation.
|
||||
/// @param [in] a The address of the value to not.
|
||||
static void Not(UInt_64* a);
|
||||
|
||||
/// Does an atomic lock negate operation.
|
||||
/// @param [in] a The address of the value to negate.
|
||||
static void Neg(UInt_64* a);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user