summaryrefslogtreecommitdiff
path: root/src/typeinfo.h
diff options
context:
space:
mode:
authoranonymous <local@localhost>2011-05-02 12:51:25 +0000
committeranonymous <local@localhost>2011-05-09 15:05:54 +0700
commit6f9032852fb6c55846c4b4a23f8b8976442cce51 (patch)
tree8b5222c3778ee59173bb753f5e7b446a20706b2f /src/typeinfo.h
parentb12153bb8ad75cf2bf51d486895fce2769fe66d9 (diff)
downloadlibcxxrt-6f9032852fb6c55846c4b4a23f8b8976442cce51.tar.gz
libcxxrt-6f9032852fb6c55846c4b4a23f8b8976442cce51.tar.bz2
libcxxrt-6f9032852fb6c55846c4b4a23f8b8976442cce51.tar.xz
Tidy up of the libcxxrt sources. Added missing comments, fixed some inconsistent indenting.
Diffstat (limited to 'src/typeinfo.h')
-rw-r--r--src/typeinfo.h103
1 files changed, 96 insertions, 7 deletions
diff --git a/src/typeinfo.h b/src/typeinfo.h
index 6bc4b60..1ee1fe5 100644
--- a/src/typeinfo.h
+++ b/src/typeinfo.h
@@ -4,33 +4,57 @@
namespace ABI_NAMESPACE
{
- // Primitive type info
+ /**
+ * Primitive type info, for intrinsic types.
+ */
struct __fundamental_type_info : public std::type_info
{
virtual ~__fundamental_type_info();
};
+ /**
+ * Type info for arrays.
+ */
struct __array_type_info : public std::type_info
{
virtual ~__array_type_info();
};
+ /**
+ * Type info for functions.
+ */
struct __function_type_info : public std::type_info
{
virtual ~__function_type_info();
};
+ /**
+ * Type info for enums.
+ */
struct __enum_type_info : public std::type_info
{
virtual ~__enum_type_info();
};
- // Base class for class type info. Used only for tentative definitions.
+ /**
+ * Base class for class type info. Used only for tentative definitions.
+ */
struct __class_type_info : public std::type_info
{
virtual ~__class_type_info();
- virtual void *cast_to(void *obj, const struct __class_type_info *other) const;
- virtual bool can_cast_to(const struct __class_type_info *other) const;
+ /**
+ * Function implementing dynamic casts.
+ */
+ virtual void *cast_to(void *obj,
+ const struct __class_type_info *other) const;
+ /**
+ * Function returning whether a cast from this type to another type is
+ * possible.
+ */
+ virtual bool can_cast_to(const struct __class_type_info *other) const;
};
- // Single-inheritance class.
+ /**
+ * Single-inheritance class type info. This is used for classes containing
+ * a single non-virtual base class at offset 0.
+ */
struct __si_class_type_info : public __class_type_info
{
virtual ~__si_class_type_info();
@@ -39,72 +63,137 @@ namespace ABI_NAMESPACE
virtual bool can_cast_to(const struct __class_type_info *other) const;
};
+ /**
+ * Type info for base classes. Classes with multiple bases store an array
+ * of these, one for each superclass.
+ */
struct __base_class_type_info
{
const __class_type_info *__base_type;
private:
+ /**
+ * The high __offset_shift bits of this store the (signed) offset
+ * of the base class. The low bits store flags from
+ * __offset_flags_masks.
+ */
long __offset_flags;
-
+ /**
+ * Flags used in the low bits of __offset_flags.
+ */
enum __offset_flags_masks
{
+ /** This base class is virtual. */
__virtual_mask = 0x1,
+ /** This base class is public. */
__public_mask = 0x2,
+ /** The number of bits reserved for flags. */
__offset_shift = 8
};
public:
+ /**
+ * Returns the offset of the base class.
+ */
long offset() const
{
return __offset_flags >> __offset_shift;
}
+ /**
+ * Returns the flags.
+ */
long flags() const
{
return __offset_flags & ((1 << __offset_shift) - 1);
}
+ /**
+ * Returns whether this is a public base class.
+ */
bool isPublic() const { return flags() & __public_mask; }
+ /**
+ * Returns whether this is a virtual base class.
+ */
bool isVirtual() const { return flags() & __virtual_mask; }
};
-
+ /**
+ * Type info for classes with virtual bases or multiple superclasses.
+ */
struct __vmi_class_type_info : public __class_type_info
{
virtual ~__vmi_class_type_info();
+ /** Flags describing this class. Contains values from __flags_masks. */
unsigned int __flags;
+ /** The number of base classes. */
unsigned int __base_count;
+ /**
+ * Array of base classes - this actually has __base_count elements, not
+ * 1.
+ */
__base_class_type_info __base_info[1];
+ /**
+ * Flags used in the __flags field.
+ */
enum __flags_masks
{
+ /** The class has non-diamond repeated inheritance. */
__non_diamond_repeat_mask = 0x1,
+ /** The class is diamond shaped. */
__diamond_shaped_mask = 0x2
};
virtual void *cast_to(void *obj, const struct __class_type_info *other) const;
virtual bool can_cast_to(const struct __class_type_info *other) const;
};
+ /**
+ * Base class used for both pointer and pointer-to-member type info.
+ */
struct __pbase_type_info : public std::type_info
{
virtual ~__pbase_type_info();
+ /**
+ * Flags. Values from __masks.
+ */
unsigned int __flags;
+ /**
+ * The type info for the pointee.
+ */
const std::type_info *__pointee;
+ /**
+ * Masks used for qualifiers on the pointer.
+ */
enum __masks
{
+ /** Pointer has const qualifier. */
__const_mask = 0x1,
+ /** Pointer has volatile qualifier. */
__volatile_mask = 0x2,
+ /** Pointer has restrict qualifier. */
__restrict_mask = 0x4,
+ /** Pointer points to an incomplete type. */
__incomplete_mask = 0x8,
+ /** Pointer is a pointer to a member of an incomplete class. */
__incomplete_class_mask = 0x10
};
};
+ /**
+ * Pointer type info.
+ */
struct __pointer_type_info : public __pbase_type_info
{
virtual ~__pointer_type_info();
};
+ /**
+ * Pointer to member type info.
+ */
struct __pointer_to_member_type_info : public __pbase_type_info
{
virtual ~__pointer_to_member_type_info();
+ /**
+ * Pointer to the class containing this member.
+ */
const __class_type_info *__context;
};