Fixed line breaks.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14959 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2005-11-16 15:48:17 +00:00
parent ad512dbeac
commit d4637d3200
+85 -85
View File
@@ -1,85 +1,85 @@
#include <stdio.h> #include <stdio.h>
#include <string> #include <string>
#include <typeinfo> #include <typeinfo>
#include <Directory.h> #include <Directory.h>
#include <File.h> #include <File.h>
using std::string; using std::string;
struct A { struct A {
A() {} A() {}
virtual ~A() {} virtual ~A() {}
int a; int a;
}; };
struct B : A { struct B : A {
B() {} B() {}
virtual ~B() {} virtual ~B() {}
int b; int b;
}; };
struct C : A { struct C : A {
C() {} C() {}
virtual ~C() {} virtual ~C() {}
int c; int c;
}; };
template<typename A, typename B, typename C> template<typename A, typename B, typename C>
static void static void
rtti_test(A *a, const char *inputClass, const char *classNameA, rtti_test(A *a, const char *inputClass, const char *classNameA,
const char *classNameB, const char *classNameC) const char *classNameB, const char *classNameC)
{ {
printf("class %s\n", inputClass); printf("class %s\n", inputClass);
printf(" dynamic_cast<%s*>(a): %p\n", classNameA, dynamic_cast<A*>(a)); printf(" dynamic_cast<%s*>(a): %p\n", classNameA, dynamic_cast<A*>(a));
printf(" dynamic_cast<%s*>(a): %p\n", classNameB, dynamic_cast<B*>(a)); printf(" dynamic_cast<%s*>(a): %p\n", classNameB, dynamic_cast<B*>(a));
printf(" dynamic_cast<%s*>(a): %p\n", classNameC, dynamic_cast<C*>(a)); printf(" dynamic_cast<%s*>(a): %p\n", classNameC, dynamic_cast<C*>(a));
const std::type_info *info = &typeid(*a); const std::type_info *info = &typeid(*a);
printf(" typeinfo: %p, name: %s\n", info, (info ? info->name() : NULL)); printf(" typeinfo: %p, name: %s\n", info, (info ? info->name() : NULL));
} }
int int
main() main()
{ {
// test with artificial classes defined in this file // test with artificial classes defined in this file
#define RTTI_TEST(obj, className) rtti_test<A, B, C>(obj, className, \ #define RTTI_TEST(obj, className) rtti_test<A, B, C>(obj, className, \
"A", "B", "C") "A", "B", "C")
A a; A a;
B b; B b;
C c; C c;
printf("A: %p\n", &a); printf("A: %p (vtable: %p)\n", &a, *(void**)&a);
printf("B: %p\n", &b); printf("B: %p (vtable: %p)\n", &b, *(void**)&b);
printf("C: %p\n", &c); printf("C: %p (vtable: %p)\n", &c, *(void**)&c);
RTTI_TEST(&a, "A"); RTTI_TEST(&a, "A");
RTTI_TEST(&b, "B"); RTTI_TEST(&b, "B");
RTTI_TEST(&c, "C"); RTTI_TEST(&c, "C");
// test with real classes defined in a library // test with real classes defined in a library
#undef RTTI_TEST #undef RTTI_TEST
#define RTTI_TEST(obj, className) rtti_test<BNode, BFile, BDirectory>(obj, \ #define RTTI_TEST(obj, className) rtti_test<BNode, BFile, BDirectory>(obj, \
className, "BNode", "BFile", "BDirectory") className, "BNode", "BFile", "BDirectory")
BNode node; BNode node;
BFile file; BFile file;
BDirectory dir; BDirectory dir;
printf("BNode: %p\n", &node); printf("BNode: %p (vtable: %p)\n", &node, *(void**)&node);
printf("BFile: %p\n", &file); printf("BFile: %p (vtable: %p)\n", &file, *(void**)&file);
printf("BDirectory: %p\n", &dir); printf("BDirectory: %p (vtable: %p)\n", &dir, *(void**)&dir);
RTTI_TEST(&node, "BNode"); RTTI_TEST(&node, "BNode");
RTTI_TEST(&file, "BFile"); RTTI_TEST(&file, "BFile");
RTTI_TEST(&dir, "BDirectory"); RTTI_TEST(&dir, "BDirectory");
return 0; return 0;
} }