summaryrefslogtreecommitdiffstats
path: root/src/nSocket/include/nstack_atomic.h
diff options
context:
space:
mode:
authorYalei Wang <william.wangyalei@huawei.com>2018-03-12 10:07:58 +0800
committerYalei Wang <william.wangyalei@huawei.com>2018-03-12 10:07:58 +0800
commitc398e6ec613c1f90ffe33608c511208100e7372f (patch)
tree554b2bc400e14e9ae8e838582e7433ea71eb499f /src/nSocket/include/nstack_atomic.h
parent71a4e2f34afa8018426f0e830050e50a1de6d375 (diff)
Add the nSocket module for dmm
Change-Id: I8b97fbe50c9c1c479072510b8d799fe711360da7 Signed-off-by: Yalei Wang <william.wangyalei@huawei.com>
Diffstat (limited to 'src/nSocket/include/nstack_atomic.h')
-rw-r--r--src/nSocket/include/nstack_atomic.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/nSocket/include/nstack_atomic.h b/src/nSocket/include/nstack_atomic.h
new file mode 100644
index 0000000..37ab451
--- /dev/null
+++ b/src/nSocket/include/nstack_atomic.h
@@ -0,0 +1,57 @@
+/*
+*
+* Copyright (c) 2018 Huawei Technologies Co.,Ltd.
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at:
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef _NSTACK_ATOMIC_H_
+#define _NSTACK_ATOMIC_H_
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "nstack_types.h"
+
+#ifdef __cplusplus
+/* *INDENT-OFF* */
+extern "C"{
+/* *INDENT-ON* */
+#endif
+
+typedef struct
+{
+ volatile ns_int32 counter;
+} atomic_t;
+
+#define atomic_set(v, i) ((v)->counter = (i))
+
+#define atomic_fetch_and_add(v, i) __sync_fetch_and_add(&(v)->counter, i)
+#define atomic_add_and_fetch(v, i) __sync_add_and_fetch(&(v)->counter, i)
+
+#define atomic_fetch_and_sub(v, i) __sync_fetch_and_sub(&(v)->counter, i)
+#define atomic_sub_and_fetch(v, i) __sync_sub_and_fetch(&(v)->counter, i)
+
+#define atomic_read(v) atomic_fetch_and_add(v, 0)
+#define atomic_inc(v) atomic_add_and_fetch(v, 1)
+#define atomic_dec(v)atomic_sub_and_fetch(v, 1)
+#define atomic_add(v, i) atomic_add_and_fetch(v, i)
+#define atomic_sub(v, i) atomic_sub_and_fetch(v,i)
+
+#define cas(ptr, oldValue, exchage) __sync_bool_compare_and_swap(ptr, oldValue, exchage)
+
+#ifdef __cplusplus
+/* *INDENT-OFF* */
+}
+/* *INDENT-ON* */
+#endif
+
+#endif