/* Modules Definitions
** 
** Distributed under the terms of the MIT License.
*/

#ifndef _FSSH_ATOMIC_H
#define _FSSH_ATOMIC_H


#include "fssh_types.h"


#ifdef __cplusplus
extern "C" {
#endif


void	fssh_atomic_set(int32_t* value, int32_t newValue);
int32_t	fssh_atomic_get_and_set(int32_t* value, int32_t newValue);
int32_t	fssh_atomic_test_and_set(int32_t *value, int32_t newValue,
			int32_t testAgainst);
int32_t	fssh_atomic_add(int32_t *value, int32_t addValue);
int32_t	fssh_atomic_and(int32_t *value, int32_t andValue);
int32_t	fssh_atomic_or(int32_t *value, int32_t orValue);	
int32_t	fssh_atomic_get(int32_t *value);

void	fssh_atomic_set64(int64_t* value, int64_t newValue);
int64_t	fssh_atomic_get_and_set64(int64_t* value, int64_t newValue);
int64_t	fssh_atomic_test_and_set64(int64_t *value, int64_t newValue,
			int64_t testAgainst);
int64_t	fssh_atomic_add64(int64_t *value, int64_t addValue);
int64_t	fssh_atomic_and64(int64_t *value, int64_t andValue);
int64_t	fssh_atomic_or64(int64_t *value, int64_t orValue);	
int64_t	fssh_atomic_get64(int64_t *value);

#ifdef __cplusplus
}
#endif


#endif	/* _FSSH_ATOMIC_H */