1 Star 0 Fork 0

Vulkan/PLOOC

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
plooc_class_black_box.h 11.04 KB
一键复制 编辑 原始数据 按行查看 历史
GorgonMeducer 提交于 2020-11-28 10:17 . update version 4.5.7
/****************************************************************************
* Copyright 2017 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) *
* *
* 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. *
* *
****************************************************************************/
/*============================ INCLUDES ======================================*/
//#include <stdint.h>
//#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
/*============================ MACROS ========================================*/
#undef declare_class
#undef dcl_class
#undef def_class
#undef define_class
#undef __def_class
#undef end_def_class
#undef end_define_class
#undef __end_def_class
#undef extern_class
#undef __extern_class
#undef end_extern_class
#undef __end_extern_class
#undef class
#undef __class
/*============================ MACROFIED FUNCTIONS ===========================*/
#if defined(__PLOOC_CLASS_IMPLEMENT__) || defined(__PLOOC_CLASS_IMPLEMENT)
# ifdef __OOC_DEBUG__
# define __def_class(__name, __public ,...) \
typedef struct __name __name; \
typedef struct __##__name __##__name; \
struct __##__name { \
__public \
PLOOC_VISIBLE(__VA_ARGS__) \
}; \
struct __name { \
__public \
PLOOC_VISIBLE(__VA_ARGS__) \
};
# else
# define __def_class(__name, __public, ...) \
typedef struct __name __name; \
typedef struct __##__name __##__name; \
struct __##__name { \
__public \
PLOOC_VISIBLE(__VA_ARGS__) \
}; \
struct __name { \
__public \
PLOOC_INVISIBLE(__VA_ARGS__) \
};
# endif
# define __end_def_class(__name, ...)
# undef private_member
# define private_member(...) PLOOC_VISIBLE(__VA_ARGS__)
# undef public_member
# define public_member(...) PLOOC_VISIBLE(__VA_ARGS__)
# undef __class
# define __class(__name) __##__name
# define class(__name) __class(__name)
#define __extern_class(__name,...)
#define __end_extern_class(__name, ...)
#else
#ifndef __OOC_DEBUG__
# define __def_class(__name, __public, ...) \
typedef struct __name __name; \
typedef struct __##__name __##__name; \
struct __##__name { \
__public \
PLOOC_VISIBLE(__VA_ARGS__) \
};
#define __extern_class(__name,__public, ...) \
typedef struct __name __name; \
struct __name { \
__public \
PLOOC_INVISIBLE(__VA_ARGS__) \
};
#define __end_extern_class(__name, ...)
# undef private_member
# define private_member(...) PLOOC_VISIBLE(__VA_ARGS__)
# undef public_member
# define public_member(...) PLOOC_VISIBLE(__VA_ARGS__)
#else
# define __def_class(__name, __public, ...) \
typedef struct __name __name; \
typedef struct __##__name __##__name; \
struct __##__name { \
__public \
PLOOC_VISIBLE(__VA_ARGS__) \
};
#define __extern_class(__name,__public, ...) \
typedef struct __name __name; \
struct __name { \
__public \
PLOOC_VISIBLE(__VA_ARGS__) \
};
#define __end_extern_class(__name, ...)
# undef private_member
# define private_member(...) PLOOC_INVISIBLE(__VA_ARGS__)
# undef public_member
# define public_member(...) PLOOC_VISIBLE(__VA_ARGS__)
#endif
# define __end_def_class(__name, ...)
#endif
# undef __class
# define __class(__name) __##__name
# undef class
# define class(__name) __class(__name)
#define declare_class(__name) typedef struct __name __name;
#define dcl_class(__name) declare_class(__name)
#define end_def_class(__name, ...) __end_def_class(__name, __VA_ARGS__)
#define end_define_class(__name, ...) end_def_class(__name, ...)
#define def_class(__name,__public, ...) \
__def_class(__name, __public, __VA_ARGS__)
#define define_class(__name, __public, ...) \
def_class(__name,__public, __VA_ARGS__)
#define class(__name) __class(__name)
#define extern_class(__name, __public, ...) \
__extern_class(__name, __public,__VA_ARGS__)
#define end_extern_class(__name, ...) __end_extern_class(__name, __VA_ARGS__)
#ifndef __PLOOC_CLASS_BLACK_BOX_H__
#define __PLOOC_CLASS_BLACK_BOX_H__
/*! \brief macro for initializing class in compiler-time
*! \param __type class name
*! \param __obj target object
*! \param ... initialization list
*/
#define __INIT_CLASS_OBJ(__type, __obj, ...) \
union { \
class(__type) __##__obj; \
__type; \
} __obj = { \
.__##__obj = __VA_ARGS__ \
}
#define init_class_obj(__type, __obj, ...) \
__INIT_CLASS_OBJ(__type, __obj, __VA_ARGS__)
#define __EXTERN_CLASS_OBJ( __type, __obj ) \
extern union { \
class(__type) __##__obj; \
__type; \
}__obj;
#define extern_class_obj(__type, __obj) \
__EXTERN_CLASS_OBJ( __type, __obj )
#endif
/*----------------------------------------------------------------------------*
* new standard (lower case) *
*----------------------------------------------------------------------------*/
# undef __class_internal
# define __class_internal(__src, __des, __type, ...) \
class(__type) *(__des) = (class(__type) *)(__src); \
PLOOC_UNUSED_PARAM(__des); \
__with_class(__type, (__src), __VA_ARGS__)
# undef class_internal
# define class_internal(__src, __des, __type,...) \
__class_internal(__src, __des, __type, __VA_ARGS__)
# undef __with_class
# define __with_class(__type, __src, ...) \
{ \
class(__type)*_ =(class(__type) *)(__src); \
PLOOC_UNUSED_PARAM(_); \
__VA_ARGS__; \
} \
for (class(__type)*_ =(class(__type) *)(__src); NULL != _; _ = NULL)
# undef with_class
# define with_class(__type, __src, ...) \
__with_class(__type, __src, __VA_ARGS__)
#undef which
#define which(...) PLOOC_VISIBLE(__VA_ARGS__)
/*============================ TYPES =========================================*/
/*============================ GLOBAL VARIABLES ==============================*/
/*============================ LOCAL VARIABLES ===============================*/
/*============================ PROTOTYPES ====================================*/
#undef __PLOOC_CLASS_IMPLEMENT__
#undef __PLOOC_CLASS_INHERIT__
#undef __PLOOC_CLASS_IMPLEMENT
#undef __PLOOC_CLASS_INHERIT
#ifdef __cplusplus
}
#endif
/* EOF */
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/vulkan/PLOOC.git
git@gitee.com:vulkan/PLOOC.git
vulkan
PLOOC
PLOOC
master

搜索帮助