Open3D (C++ API)  0.18.0+fcf98ee
Atomic.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - Open3D: www.open3d.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2023 www.open3d.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <cstdint>
11 
12 #ifdef MSC_VER
13 #include <intrin.h>
14 #pragma intrinsic(_InterlockedExchangeAdd)
15 #pragma intrinsic(_InterlockedExchangeAdd64)
16 #endif
17 
18 namespace open3d {
19 namespace core {
20 
26 #ifdef __GNUC__
27  return __atomic_fetch_add(address, val, __ATOMIC_RELAXED);
28 #elif _MSC_VER
29  static_assert(sizeof(long) == sizeof(uint32_t),
30  "Expected long to be a 32 bit type");
31  return static_cast<uint32_t>(_InterlockedExchangeAdd(
32  reinterpret_cast<long*>(address), static_cast<long>(val)));
33 #else
34  static_assert(false, "AtomicFetchAddRelaxed not implemented for platform");
35 #endif
36 }
37 
43 #ifdef __GNUC__
44  return __atomic_fetch_add(address, val, __ATOMIC_RELAXED);
45 #elif _MSC_VER
46  return static_cast<uint64_t>(_InterlockedExchangeAdd64(
47  reinterpret_cast<int64_t*>(address), static_cast<int64_t>(val)));
48 #else
49  static_assert(false, "AtomicFetchAddRelaxed not implemented for platform");
50 #endif
51 }
52 
53 } // namespace core
54 } // namespace open3d
uint32_t AtomicFetchAddRelaxed(uint32_t *address, uint32_t val)
Definition: Atomic.h:25
const char const char value recording_handle imu_sample recording_handle uint8_t size_t data_size k4a_record_configuration_t config target_format k4a_capture_t capture_handle k4a_imu_sample_t imu_sample playback_handle k4a_logging_message_cb_t void min_level device_handle k4a_imu_sample_t timeout_in_ms capture_handle capture_handle capture_handle image_handle temperature_c k4a_image_t image_handle uint8_t image_handle image_handle image_handle image_handle uint32_t
Definition: K4aPlugin.cpp:548
const char const char value recording_handle imu_sample recording_handle uint8_t size_t data_size k4a_record_configuration_t config target_format k4a_capture_t capture_handle k4a_imu_sample_t imu_sample uint64_t
Definition: K4aPlugin.cpp:343
Definition: PinholeCameraIntrinsic.cpp:16