Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/metal-cpp/Foundation/NSDefines.hpp
21066 views
1
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
2
//
3
// Foundation/NSDefines.hpp
4
//
5
// Copyright 2020-2024 Apple Inc.
6
//
7
// Licensed under the Apache License, Version 2.0 (the "License");
8
// you may not use this file except in compliance with the License.
9
// You may obtain a copy of the License at
10
//
11
// http://www.apache.org/licenses/LICENSE-2.0
12
//
13
// Unless required by applicable law or agreed to in writing, software
14
// distributed under the License is distributed on an "AS IS" BASIS,
15
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
// See the License for the specific language governing permissions and
17
// limitations under the License.
18
//
19
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
20
21
#pragma once
22
23
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
24
25
// Forward declarations to avoid conflicts with Godot types (String, Object, Error)
26
namespace NS {
27
class Array;
28
class Dictionary;
29
class Error;
30
class Object;
31
class String;
32
class URL;
33
} // namespace NS
34
35
#define _NS_WEAK_IMPORT __attribute__((weak_import))
36
#ifdef METALCPP_SYMBOL_VISIBILITY_HIDDEN
37
#define _NS_EXPORT __attribute__((visibility("hidden")))
38
#else
39
#define _NS_EXPORT __attribute__((visibility("default")))
40
#endif // METALCPP_SYMBOL_VISIBILITY_HIDDEN
41
#define _NS_EXTERN extern "C" _NS_EXPORT
42
#define _NS_INLINE inline __attribute__((always_inline))
43
#define _NS_PACKED __attribute__((packed))
44
45
#define _NS_CONST(type, name) _NS_EXTERN type const name
46
#define _NS_ENUM(type, name) enum name : type
47
#define _NS_OPTIONS(type, name) \
48
using name = type; \
49
enum : name
50
51
#define _NS_CAST_TO_UINT(value) static_cast<NS::UInteger>(value)
52
#define _NS_VALIDATE_SIZE(ns, name) static_assert(sizeof(ns::name) == sizeof(ns##name), "size mismatch " #ns "::" #name)
53
#define _NS_VALIDATE_ENUM(ns, name) static_assert(_NS_CAST_TO_UINT(ns::name) == _NS_CAST_TO_UINT(ns##name), "value mismatch " #ns "::" #name)
54
55
//-------------------------------------------------------------------------------------------------------------------------------------------------------------
56
57