Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

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