135 const char* getname()
const;
136 int num_subclasses()
const;
138 int num_baseclasses()
const;
143 int can_create()
const;
144 RTTItypeid find_baseclass(
const char* name)
const;
170 void* (*)(
int,
void*),
void* (*)());
172 const char* getname()
const;
179 subclass(
int=0)
const;
180 int num_subclasses()
const;
185 int can_create()
const;
197 void* (*cast)(int,
void*);
216 return (i>=0 && i<ns)? subtypes[i]: 0;
221 return this==p || !strcmp(
n.c_str(),p->n.c_str());
283 for(i=0;
theId->
b[i];i++){}
319 #define STATIC_TYPE_INFO(T) T::RTTI_sinfo() 320 #define TYPE_INFO(p) ((p)? (p)->RTTI_vinfo() : RTTItypeid::null_type() ) 321 #define PTR_CAST(T,p) ((p)? (T*)((p)->RTTI_cast(STATIC_TYPE_INFO(T))) : 0) 325 #define STATIC_TYPE_NAME(T) (STATIC_TYPE_INFO(T).getname()) 326 #define TYPE_NAME(p) ((p)? ((p)->RTTI_vinfo().getname()) : RTTItypeid::null_type().getname()) 327 #define DYN_CAST(t,p) ((p)? ((p)->RTTI_cast((t))!=0) : 1) 328 #define UPTR_CAST(t,p) ((p)? ((p)->RTTI_cast((t))) : 0) 331 #define OLD_PTR_CAST(T,p) ((p)? ((STATIC_TYPE_INFO(T).can_cast((p)->RTTI_vinfo()))? (T*)p : 0) : 0) 332 #define OLD_UPTR_CAST(t,p) ((p)? ((t).can_cast((p)->RTTI_vinfo())? (void*)p : 0) : 0) 333 #define OLD_DYN_CAST(t,p) ((p)? ((t).can_cast((p)->RTTI_vinfo())? 1 : 0) : 1) 341 static const RTTITypeinfo RTTI_obj; \ 342 static void* RTTI_scast(int,void*); \ 343 static void* RTTI_new(); \ 345 virtual RTTItypeid RTTI_vinfo() const { return &RTTI_obj; }\ 346 static RTTItypeid RTTI_sinfo() { return &RTTI_obj; }\ 347 virtual void* RTTI_cast(RTTItypeid);\ 348 virtual const void* RTTI_cast(RTTItypeid)const; 356 #define RTTI_NEW(cls,name) void* cls::RTTI_new() { return new cls; } \ 357 const RTTITypeinfo cls::RTTI_obj = RTTITypeinfo(name,RTTI_base_##cls,cls::RTTI_scast,cls::RTTI_new); 359 #define RTTI_NO_NEW(cls,name) const RTTITypeinfo cls::RTTI_obj = RTTITypeinfo(name,RTTI_base_##cls,cls::RTTI_scast,0); 368 #define RTTI_DEF_BASE(cls,name) \ 369 static const RTTITypeinfo* RTTI_base_##cls [] = { 0 };\ 370 void* cls::RTTI_cast(RTTItypeid t) \ 372 if (t == &RTTI_obj) return this; \ 375 const void* cls::RTTI_cast(RTTItypeid t)const \ 377 if (t == &RTTI_obj) return this; \ 380 void* cls::RTTI_scast(int ,void* p) \ 381 { cls* ptr = (cls*)p; return ptr; } 384 #define RTTI_DEF1_BASE(cls,name,b1) \ 385 static const RTTITypeinfo* RTTI_base_##cls [] = \ 386 { STATIC_TYPE_INFO(b1).get_info(),0 }; \ 387 void* cls::RTTI_cast(RTTItypeid t) \ 389 if (t == &RTTI_obj) return this; \ 391 if ((ptr=b1::RTTI_cast(t))) return ptr; \ 394 const void* cls::RTTI_cast(RTTItypeid t)const \ 396 if (t == &RTTI_obj) return this; \ 398 if ((ptr=b1::RTTI_cast(t))) return ptr; \ 401 void* cls::RTTI_scast(int i,void* p) \ 402 { cls* ptr = (cls*)p; \ 404 { case 0: return (b1*)ptr; } \ 409 #define RTTI_DEF2_BASE(cls,name,b1,b2) \ 410 static const RTTITypeinfo* RTTI_base_##cls [] = \ 411 { STATIC_TYPE_INFO(b1).get_info(), \ 412 STATIC_TYPE_INFO(b2).get_info(),0 }; \ 413 void* cls::RTTI_cast(RTTItypeid t) \ 415 if (t == &RTTI_obj) return this; \ 417 if ((ptr=b1::RTTI_cast(t))) return ptr; \ 418 if ((ptr=b2::RTTI_cast(t))) return ptr; \ 421 const void* cls::RTTI_cast(RTTItypeid t)const \ 423 if (t == &RTTI_obj) return this; \ 425 if ((ptr=b1::RTTI_cast(t))) return ptr; \ 426 if ((ptr=b2::RTTI_cast(t))) return ptr; \ 429 void* cls::RTTI_scast(int i,void* p) \ 430 { cls* ptr = (cls*)p; \ 432 { case 0: return (b1*)ptr; \ 433 case 1: return (b2*)ptr; \ 438 #define RTTI_DEF3_BASE(cls,name,b1,b2,b3) \ 439 static const RTTITypeinfo* RTTI_base_##cls [] = \ 440 { STATIC_TYPE_INFO(b1).get_info(), \ 441 STATIC_TYPE_INFO(b2).get_info(), \ 442 STATIC_TYPE_INFO(b3).get_info(), 0 }; \ 443 void* cls::RTTI_cast(RTTItypeid t) \ 445 if (t == &RTTI_obj) return this; \ 447 if ((ptr=b1::RTTI_cast(t))) return ptr; \ 448 if ((ptr=b2::RTTI_cast(t))) return ptr; \ 449 if ((ptr=b3::RTTI_cast(t))) return ptr; \ 452 const void* cls::RTTI_cast(RTTItypeid t)const \ 454 if (t == &RTTI_obj) return this; \ 456 if ((ptr=b1::RTTI_cast(t))) return ptr; \ 457 if ((ptr=b2::RTTI_cast(t))) return ptr; \ 458 if ((ptr=b3::RTTI_cast(t))) return ptr; \ 461 void* cls::RTTI_scast(int i,void* p) \ 462 { cls* ptr = (cls*)p; \ 464 { case 0: return (b1*)ptr; \ 465 case 1: return (b2*)ptr; \ 466 case 2: return (b3*)ptr; \ 473 #define RTTI_DEF_INST(cls,name) \ 474 RTTI_DEF_BASE(cls,name) \ 477 #define RTTI_DEF(cls,name) \ 478 RTTI_DEF_BASE(cls,name) \ 479 RTTI_NO_NEW(cls,name) 481 #define RTTI_DEF1_INST(cls,name,b1) \ 482 RTTI_DEF1_BASE(cls,name,b1) \ 485 #define RTTI_DEF1(cls,name,b1) \ 486 RTTI_DEF1_BASE(cls,name,b1) \ 487 RTTI_NO_NEW(cls,name) 489 #define RTTI_DEF2_INST(cls,name,b1,b2) \ 490 RTTI_DEF2_BASE(cls,name,b1,b2) \ 493 #define RTTI_DEF2(cls,name,b1,b2) \ 494 RTTI_DEF2_BASE(cls,name,b1,b2) \ 495 RTTI_NO_NEW(cls,name) 497 #define RTTI_DEF3_INST(cls,name,b1,b2,b3) \ 498 RTTI_DEF3_BASE(cls,name,b1,b2,b3) \ 501 #define RTTI_DEF3(cls,name,b1,b2,b3) \ 502 RTTI_DEF3_BASE(cls,name,b1,b2,b3) \ 503 RTTI_NO_NEW(cls,name)
SubtypesConstVector subtypes
void * create(const RTTITypeinfo *, const char *) const
RTTIdyntypeid(const char *)
bool operator!=(const ossimRefPtr< _Tp1 > &__a, const ossimRefPtr< _Tp2 > &__b) noexcept
int same(const RTTITypeinfo *) const
const RTTITypeinfo * theId
int operator==(RTTItypeid) const
int operator!=(RTTItypeid) const
int num_baseclasses() const
int can_cast(RTTItypeid) const
RTTItypeid baseclass(int) const
static const RTTITypeinfo null_type
os2<< "> n<< " > nendobj n
int num_subclasses() const
const char * getname() const
void * create(RTTItypeid) const
bool operator==(const ossimRefPtr< _Tp1 > &__a, const ossimRefPtr< _Tp2 > &__b) noexcept
int can_cast(const RTTITypeinfo *) const
int has_base(const RTTITypeinfo *) const
const RTTITypeinfo * subclass(int=0) const
std::vector< const RTTITypeinfo * > SubtypesConstVector
RTTItypeid(const RTTITypeinfo *p)
const RTTITypeinfo * get_info() const
RTTItypeid subclass(int) const
static RTTItypeid null_type()
int num_subclasses() const
const char * getname() const