Open3D (C++ API)  0.17.0
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
18namespace open3d {
19namespace 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