dmsdk_ffi 0.1.0

Auto-generated bindings to Defold's dmSDK
Documentation
// Copyright 2020-2022 The Defold Foundation
// Copyright 2014-2020 King
// Copyright 2009-2014 Ragnar Svensson, Christian Murray
// Licensed under the Defold License version 1.0 (the "License"); you may not use
// this file except in compliance with the License.
// 
// You may obtain a copy of the License, together with FAQs at
// https://www.defold.com/license
// 
// 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 DMSDK_STATIC_ASSERT_H
#define DMSDK_STATIC_ASSERT_H

/*# Static assert
 *
 *
 * ```cpp
 * void test() {
 *     DM_STATIC_ASSERT(sizeof(int) == 4, Invalid_int_size);
 * }
 * ```
 *
 * @document
 * @name Static Assert
 * @namespace dmStaticAssert
 * @path engine/dlib/src/dmsdk/dlib/static_assert.h
 */

/*# compile time assert
 * This is using C++11 `static_assert` on platforms that support it and use c++11. Otherwise
 * it's using a c construct to check the condition.
 * As such, it is currently required to be used whithin a function scope.
 *
 * @macro
 * @name DM_STATIC_ASSERT
 * @param x [type:bool] expression
 * @param xmsg [type:string] expression
 *
 * @examples
 * Verify the size of a struct is within a limit
 *
 * ```cpp
 * DM_STATIC_ASSERT(sizeof(MyStruct) <= 32, Invalid_Struct_Size);
 * ```
 */

#if __cplusplus >= 201103L
    // For backwards compatibility, we need to keep the old error format
    #define DM_STATIC_ASSERT(x, error) static_assert(x, #error)
#else
    #define DM_STATIC_ASSERT(x, error) \
        do { \
            static const char error[(x)?1:-1] = {0};\
            (void) error;\
        } while(0)
#endif

// Trick to remove false positives when building using the clang analyzer

#if defined(__clang_analyzer__)
    inline void analyzer_use_pointer(void** pp){
        *((uintptr_t)p) = (uintptr_t)1;
    }
    #define ANALYZE_USE_POINTER(_P) analyzer_use_pointer((void**)&(_P))
#else
    #define ANALYZE_USE_POINTER(_P)
#endif

#endif // DMSDK_STATIC_ASSERT_H