00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef __CXXABI_H
00043 #define __CXXABI_H 1
00044
00045 #ifdef __cplusplus
00046
00047
00048
00049
00050
00051
00052
00053
00054 #include <typeinfo>
00055
00056 namespace __cxxabiv1
00057 {
00058
00059
00060 class __fundamental_type_info
00061 : public std::type_info
00062 {
00063 public:
00064 virtual ~__fundamental_type_info ();
00065 public:
00066 explicit __fundamental_type_info (const char *__n)
00067 : std::type_info (__n)
00068 { }
00069 };
00070
00071
00072 class __array_type_info
00073 : public std::type_info
00074 {
00075
00076 protected:
00077 virtual ~__array_type_info ();
00078 public:
00079 explicit __array_type_info (const char *__n)
00080 : std::type_info (__n)
00081 { }
00082 };
00083
00084
00085 class __function_type_info
00086 : public std::type_info
00087 {
00088
00089 public:
00090 virtual ~__function_type_info ();
00091 public:
00092 explicit __function_type_info (const char *__n)
00093 : std::type_info (__n)
00094 { }
00095
00096
00097 protected:
00098 virtual bool __is_function_p () const;
00099 };
00100
00101
00102 class __enum_type_info
00103 : public std::type_info
00104 {
00105
00106 public:
00107 virtual ~__enum_type_info ();
00108 public:
00109 explicit __enum_type_info (const char *__n)
00110 : std::type_info (__n)
00111 { }
00112 };
00113
00114
00115 class __pbase_type_info
00116 : public std::type_info
00117 {
00118
00119 public:
00120 unsigned int __qualifier_flags;
00121 const std::type_info *__pointee;
00122
00123
00124 public:
00125 virtual ~__pbase_type_info ();
00126 public:
00127 explicit __pbase_type_info (const char *__n,
00128 int __quals,
00129 const std::type_info *__type)
00130 : std::type_info (__n), __qualifier_flags (__quals), __pointee (__type)
00131 { }
00132
00133
00134 public:
00135 enum __qualifier_masks {
00136 __const_mask = 0x1,
00137 __volatile_mask = 0x2,
00138 __restrict_mask = 0x4,
00139 __incomplete_mask = 0x8,
00140 __incomplete_class_mask = 0x10
00141 };
00142
00143
00144 protected:
00145 virtual bool __do_catch (const std::type_info *__thr_type,
00146 void **__thr_obj,
00147 unsigned __outer) const;
00148 protected:
00149 inline virtual bool __pointer_catch (const __pbase_type_info *__thr_type,
00150 void **__thr_obj,
00151 unsigned __outer) const;
00152 };
00153
00154
00155 class __pointer_type_info
00156 : public __pbase_type_info
00157 {
00158
00159 public:
00160 virtual ~__pointer_type_info ();
00161 public:
00162 explicit __pointer_type_info (const char *__n,
00163 int __quals,
00164 const std::type_info *__type)
00165 : __pbase_type_info (__n, __quals, __type)
00166 { }
00167
00168
00169 protected:
00170 virtual bool __is_pointer_p () const;
00171
00172 protected:
00173 virtual bool __pointer_catch (const __pbase_type_info *__thr_type,
00174 void **__thr_obj,
00175 unsigned __outer) const;
00176 };
00177
00178
00179 class __pointer_to_member_type_info
00180 : public __pbase_type_info
00181 {
00182
00183 public:
00184 __class_type_info *__context_class;
00185
00186
00187 public:
00188 virtual ~__pointer_to_member_type_info ();
00189 public:
00190 explicit __pointer_to_member_type_info (const char *__n,
00191 int __quals,
00192 const std::type_info *__type,
00193 __class_type_info *__klass)
00194 : __pbase_type_info (__n, __quals, __type), __context_class (__klass)
00195 { }
00196
00197
00198 protected:
00199 virtual bool __pointer_catch (const __pbase_type_info *__thr_type,
00200 void **__thr_obj,
00201 unsigned __outer) const;
00202 };
00203
00204 class __class_type_info;
00205
00206
00207 class __base_class_info
00208 {
00209
00210 public:
00211 const __class_type_info *__base;
00212 long __offset_flags;
00213
00214
00215 public:
00216 enum __offset_flags_masks {
00217 __virtual_mask = 0x1,
00218 __public_mask = 0x2,
00219 hwm_bit = 2,
00220 offset_shift = 8
00221 };
00222
00223
00224 public:
00225 bool __is_virtual_p () const
00226 { return __offset_flags & __virtual_mask; }
00227 bool __is_public_p () const
00228 { return __offset_flags & __public_mask; }
00229 __PTRDIFF_TYPE__ __offset () const
00230 {
00231
00232
00233 return static_cast<__PTRDIFF_TYPE__> (__offset_flags) >> offset_shift;
00234 }
00235 };
00236
00237
00238 class __class_type_info
00239 : public std::type_info
00240 {
00241
00242 public:
00243 virtual ~__class_type_info ();
00244 public:
00245 explicit __class_type_info (const char *__n)
00246 : type_info (__n)
00247 { }
00248
00249
00250 public:
00251
00252
00253
00254 enum __sub_kind
00255 {
00256 __unknown = 0,
00257 __not_contained,
00258
00259
00260 __contained_ambig,
00261
00262 __contained_virtual_mask = __base_class_info::__virtual_mask,
00263 __contained_public_mask = __base_class_info::__public_mask,
00264 __contained_mask = 1 << __base_class_info::hwm_bit,
00265
00266 __contained_private = __contained_mask,
00267 __contained_public = __contained_mask | __contained_public_mask
00268 };
00269
00270 public:
00271 struct __upcast_result;
00272 struct __dyncast_result;
00273
00274
00275 protected:
00276 virtual bool __do_upcast (const __class_type_info *__dst_type, void **__obj_ptr) const;
00277
00278 protected:
00279 virtual bool __do_catch (const type_info *__thr_type, void **__thr_obj,
00280 unsigned __outer) const;
00281
00282
00283 public:
00284
00285
00286 virtual bool __do_upcast (const __class_type_info *__dst,
00287 const void *__obj,
00288 __upcast_result &__restrict __result) const;
00289
00290 public:
00291
00292
00293
00294
00295
00296
00297 inline __sub_kind __find_public_src (__PTRDIFF_TYPE__ __src2dst,
00298 const void *__obj_ptr,
00299 const __class_type_info *__src_type,
00300 const void *__src_ptr) const;
00301
00302 public:
00303
00304
00305
00306
00307
00308
00309 virtual bool __do_dyncast (__PTRDIFF_TYPE__ __src2dst,
00310 __sub_kind __access_path,
00311 const __class_type_info *__dst_type,
00312 const void *__obj_ptr,
00313 const __class_type_info *__src_type,
00314 const void *__src_ptr,
00315 __dyncast_result &__result) const;
00316 public:
00317
00318
00319
00320
00321 virtual __sub_kind __do_find_public_src (__PTRDIFF_TYPE__ __src2dst,
00322 const void *__obj_ptr,
00323 const __class_type_info *__src_type,
00324 const void *__src_ptr) const;
00325 };
00326
00327
00328 class __si_class_type_info
00329 : public __class_type_info
00330 {
00331
00332 public:
00333 const __class_type_info *__base_type;
00334
00335
00336 public:
00337 virtual ~__si_class_type_info ();
00338 public:
00339 explicit __si_class_type_info (const char *__n,
00340 const __class_type_info *__base)
00341 : __class_type_info (__n), __base_type (__base)
00342 { }
00343
00344
00345 protected:
00346 virtual bool __do_dyncast (__PTRDIFF_TYPE__ __src2dst,
00347 __sub_kind __access_path,
00348 const __class_type_info *__dst_type,
00349 const void *__obj_ptr,
00350 const __class_type_info *__src_type,
00351 const void *__src_ptr,
00352 __dyncast_result &__result) const;
00353 virtual __sub_kind __do_find_public_src (__PTRDIFF_TYPE__ __src2dst,
00354 const void *__obj_ptr,
00355 const __class_type_info *__src_type,
00356 const void *__sub_ptr) const;
00357 virtual bool __do_upcast (const __class_type_info *__dst,
00358 const void *__obj,
00359 __upcast_result &__restrict __result) const;
00360 };
00361
00362
00363 class __vmi_class_type_info : public __class_type_info {
00364
00365 public:
00366 unsigned int __flags;
00367 unsigned int __base_count;
00368 __base_class_info const __base_info[1];
00369
00370
00371
00372
00373
00374 public:
00375 virtual ~__vmi_class_type_info ();
00376 public:
00377 explicit __vmi_class_type_info (const char *__n,
00378 int ___flags)
00379 : __class_type_info (__n), __flags (___flags), __base_count (0)
00380 { }
00381
00382
00383 public:
00384 enum __flags_masks {
00385 __non_diamond_repeat_mask = 0x1,
00386 __diamond_shaped_mask = 0x2,
00387 non_public_base_mask = 0x4,
00388 public_base_mask = 0x8,
00389
00390 __flags_unknown_mask = 0x10
00391 };
00392
00393
00394 protected:
00395 virtual bool __do_dyncast (__PTRDIFF_TYPE__ __src2dst,
00396 __sub_kind __access_path,
00397 const __class_type_info *__dst_type,
00398 const void *__obj_ptr,
00399 const __class_type_info *__src_type,
00400 const void *__src_ptr,
00401 __dyncast_result &__result) const;
00402 virtual __sub_kind __do_find_public_src (__PTRDIFF_TYPE__ __src2dst,
00403 const void *__obj_ptr,
00404 const __class_type_info *__src_type,
00405 const void *__src_ptr) const;
00406 virtual bool __do_upcast (const __class_type_info *__dst,
00407 const void *__obj,
00408 __upcast_result &__restrict __result) const;
00409 };
00410
00411
00412 extern "C"
00413 void *__dynamic_cast (const void *__src_ptr,
00414 const __class_type_info *__src_type,
00415 const __class_type_info *__dst_type,
00416 __PTRDIFF_TYPE__ __src2dst);
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428 extern "C"
00429 void *__cxa_vec_new (__SIZE_TYPE__ __element_count,
00430 __SIZE_TYPE__ __element_size,
00431 __SIZE_TYPE__ __padding_size,
00432 void (*__constructor) (void *),
00433 void (*__destructor) (void *));
00434
00435 extern "C"
00436 void *__cxa_vec_new2 (__SIZE_TYPE__ __element_count,
00437 __SIZE_TYPE__ __element_size,
00438 __SIZE_TYPE__ __padding_size,
00439 void (*__constructor) (void *),
00440 void (*__destructor) (void *),
00441 void *(*__alloc) (__SIZE_TYPE__),
00442 void (*__dealloc) (void *));
00443
00444 extern "C"
00445 void *__cxa_vec_new3 (__SIZE_TYPE__ __element_count,
00446 __SIZE_TYPE__ __element_size,
00447 __SIZE_TYPE__ __padding_size,
00448 void (*__constructor) (void *),
00449 void (*__destructor) (void *),
00450 void *(*__alloc) (__SIZE_TYPE__),
00451 void (*__dealloc) (void *, __SIZE_TYPE__));
00452
00453
00454 extern "C"
00455 void __cxa_vec_ctor (void *__array_address,
00456 __SIZE_TYPE__ __element_count,
00457 __SIZE_TYPE__ __element_size,
00458 void (*__constructor) (void *),
00459 void (*__destructor) (void *));
00460
00461 extern "C"
00462 void __cxa_vec_cctor (void *dest_array,
00463 void *src_array,
00464 __SIZE_TYPE__ element_count,
00465 __SIZE_TYPE__ element_size,
00466 void (*constructor) (void *, void *),
00467 void (*destructor) (void *));
00468
00469
00470 extern "C"
00471 void __cxa_vec_dtor (void *__array_address,
00472 __SIZE_TYPE__ __element_count,
00473 __SIZE_TYPE__ __element_size,
00474 void (*__destructor) (void *));
00475
00476
00477 extern "C"
00478 void __cxa_vec_cleanup (void *__array_address,
00479 __SIZE_TYPE__ __element_count,
00480 __SIZE_TYPE__ __element_size,
00481 void (*__destructor) (void *));
00482
00483
00484 extern "C"
00485 void __cxa_vec_delete (void *__array_address,
00486 __SIZE_TYPE__ __element_size,
00487 __SIZE_TYPE__ __padding_size,
00488 void (*__destructor) (void *));
00489
00490 extern "C"
00491 void __cxa_vec_delete2 (void *__array_address,
00492 __SIZE_TYPE__ __element_size,
00493 __SIZE_TYPE__ __padding_size,
00494 void (*__destructor) (void *),
00495 void (*__dealloc) (void *));
00496
00497 extern "C"
00498 void __cxa_vec_delete3 (void *__array_address,
00499 __SIZE_TYPE__ __element_size,
00500 __SIZE_TYPE__ __padding_size,
00501 void (*__destructor) (void *),
00502 void (*__dealloc) (void *, __SIZE_TYPE__));
00503
00504
00505
00506 extern "C"
00507 char *__cxa_demangle (const char *__mangled_name,
00508 char *__output_buffer,
00509 __SIZE_TYPE__ *__length,
00510 int *__status);
00511
00512 }
00513
00514
00515 namespace abi = __cxxabiv1;
00516
00517 #else
00518 #endif
00519
00520
00521 #endif