Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. // Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2007, 2009
  2. // Free Software Foundation
  3. //
  4. // This file is part of GCC.
  5. //
  6. // GCC is free software; you can redistribute it and/or modify
  7. // it under the terms of the GNU General Public License as published by
  8. // the Free Software Foundation; either version 3, or (at your option)
  9. // any later version.
  10.  
  11. // GCC is distributed in the hope that it will be useful,
  12. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. // GNU General Public License for more details.
  15.  
  16. // Under Section 7 of GPL version 3, you are granted additional
  17. // permissions described in the GCC Runtime Library Exception, version
  18. // 3.1, as published by the Free Software Foundation.
  19.  
  20. // You should have received a copy of the GNU General Public License and
  21. // a copy of the GCC Runtime Library Exception along with this program;
  22. // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  23. // <http://www.gnu.org/licenses/>.
  24.  
  25. #include "tinfo.h"
  26.  
  27. namespace __cxxabiv1 {
  28.  
  29. __si_class_type_info::
  30. ~__si_class_type_info ()
  31. {}
  32.  
  33. __class_type_info::__sub_kind __si_class_type_info::
  34. __do_find_public_src (ptrdiff_t src2dst,
  35.                       const void *obj_ptr,
  36.                       const __class_type_info *src_type,
  37.                       const void *src_ptr) const
  38. {
  39.   if (src_ptr == obj_ptr && *this == *src_type)
  40.     return __contained_public;
  41.   return __base_type->__do_find_public_src (src2dst, obj_ptr, src_type, src_ptr);
  42. }
  43.  
  44. bool __si_class_type_info::
  45. __do_dyncast (ptrdiff_t src2dst,
  46.               __sub_kind access_path,
  47.               const __class_type_info *dst_type,
  48.               const void *obj_ptr,
  49.               const __class_type_info *src_type,
  50.               const void *src_ptr,
  51.               __dyncast_result &__restrict result) const
  52. {
  53.   if (*this == *dst_type)
  54.     {
  55.       result.dst_ptr = obj_ptr;
  56.       result.whole2dst = access_path;
  57.       if (src2dst >= 0)
  58.         result.dst2src = adjust_pointer <void> (obj_ptr, src2dst) == src_ptr
  59.               ? __contained_public : __not_contained;
  60.       else if (src2dst == -2)
  61.         result.dst2src = __not_contained;
  62.       return false;
  63.     }
  64.   if (obj_ptr == src_ptr && *this == *src_type)
  65.     {
  66.       // The src object we started from. Indicate how we are accessible from
  67.       // the most derived object.
  68.       result.whole2src = access_path;
  69.       return false;
  70.     }
  71.   return __base_type->__do_dyncast (src2dst, access_path, dst_type, obj_ptr,
  72.                              src_type, src_ptr, result);
  73. }
  74.  
  75. bool __si_class_type_info::
  76. __do_upcast (const __class_type_info *dst, const void *obj_ptr,
  77.              __upcast_result &__restrict result) const
  78. {
  79.   if (__class_type_info::__do_upcast (dst, obj_ptr, result))
  80.     return true;
  81.  
  82.   return __base_type->__do_upcast (dst, obj_ptr, result);
  83. }
  84.  
  85. }
  86.