1 /** 2 * \file 3 * Copyright 2016 Microsoft 4 * Licensed under the MIT license. See LICENSE file in the project root for full license information. 5 */ 6 #ifndef __MONO_METADATA_CLASS_INLINES_H__ 7 #define __MONO_METADATA_CLASS_INLINES_H__ 8 9 #include <mono/metadata/class-internals.h> 10 #include <mono/metadata/tabledefs.h> 11 12 static inline gboolean mono_class_is_def(MonoClass * klass)13mono_class_is_def (MonoClass *klass) 14 { 15 return klass->class_kind == MONO_CLASS_DEF; 16 } 17 18 static inline gboolean mono_class_is_gtd(MonoClass * klass)19mono_class_is_gtd (MonoClass *klass) 20 { 21 return klass->class_kind == MONO_CLASS_GTD; 22 } 23 24 static inline gboolean mono_class_is_ginst(MonoClass * klass)25mono_class_is_ginst (MonoClass *klass) 26 { 27 return klass->class_kind == MONO_CLASS_GINST; 28 } 29 30 static inline gboolean mono_class_is_gparam(MonoClass * klass)31mono_class_is_gparam (MonoClass *klass) 32 { 33 return klass->class_kind == MONO_CLASS_GPARAM; 34 } 35 36 static inline gboolean mono_class_is_array(MonoClass * klass)37mono_class_is_array (MonoClass *klass) 38 { 39 return klass->class_kind == MONO_CLASS_ARRAY; 40 } 41 42 static inline gboolean mono_class_is_pointer(MonoClass * klass)43mono_class_is_pointer (MonoClass *klass) 44 { 45 return klass->class_kind == MONO_CLASS_POINTER; 46 } 47 48 static inline gboolean mono_class_is_abstract(MonoClass * klass)49mono_class_is_abstract (MonoClass *klass) 50 { 51 return mono_class_get_flags (klass) & TYPE_ATTRIBUTE_ABSTRACT; 52 } 53 54 static inline gboolean mono_class_is_interface(MonoClass * klass)55mono_class_is_interface (MonoClass *klass) 56 { 57 return mono_class_get_flags (klass) & TYPE_ATTRIBUTE_INTERFACE; 58 } 59 60 static inline gboolean mono_class_is_sealed(MonoClass * klass)61mono_class_is_sealed (MonoClass *klass) 62 { 63 return mono_class_get_flags (klass) & TYPE_ATTRIBUTE_SEALED; 64 } 65 66 static inline gboolean mono_class_is_before_field_init(MonoClass * klass)67mono_class_is_before_field_init (MonoClass *klass) 68 { 69 return mono_class_get_flags (klass) & TYPE_ATTRIBUTE_BEFORE_FIELD_INIT; 70 } 71 72 static inline gboolean mono_class_is_auto_layout(MonoClass * klass)73mono_class_is_auto_layout (MonoClass *klass) 74 { 75 return (mono_class_get_flags (klass) & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_AUTO_LAYOUT; 76 } 77 78 static inline gboolean mono_class_is_explicit_layout(MonoClass * klass)79mono_class_is_explicit_layout (MonoClass *klass) 80 { 81 return (mono_class_get_flags (klass) & TYPE_ATTRIBUTE_LAYOUT_MASK) == TYPE_ATTRIBUTE_EXPLICIT_LAYOUT; 82 } 83 84 static inline gboolean mono_class_is_public(MonoClass * klass)85mono_class_is_public (MonoClass *klass) 86 { 87 return mono_class_get_flags (klass) & TYPE_ATTRIBUTE_PUBLIC; 88 } 89 90 static inline gboolean mono_class_has_static_metadata(MonoClass * klass)91mono_class_has_static_metadata (MonoClass *klass) 92 { 93 return klass->type_token && !klass->image->dynamic && !mono_class_is_ginst (klass); 94 } 95 96 #endif 97