Fixed line breaks.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14959 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user