home *** CD-ROM | disk | FTP | other *** search
- #include "MetaInfo.h"
-
- int MetaInfo::sNumClasses = 0;
- MetaInfo *MetaInfo::g_head_info;
-
- static int cstrcmp(char const *a,char const *b)
- {
- int ac,bc,c;
-
- for (;;) {
- ac=*a++;
- bc=*b++;
- c=ac-bc;
- if (c || !ac || !bc)
- break;
- }
- return c;
- }
-
- void * MetaInfo :: NewByName ( const char * str )
- {
- MetaInfo * iter ;
-
- for ( iter = g_head_info ; iter ; iter = iter -> next )
- {
- if ( ! cstrcmp ( str , iter -> name ) )
- return ( * ( iter -> new_func ) ) ( ) ;
- }
- DebugStr ( "\pnew_by_name failed!" ) ;
- return NULL ;
- }
-
- Boolean MetaInfo :: Member ( MetaInfo * obj , MetaInfo * cls )
- {
- return obj &&
- ( obj == cls ||
- Member ( obj -> ancestor1 , cls ) ||
- Member ( obj -> ancestor2 , cls ) ||
- Member ( obj -> ancestor3 , cls ) ||
- Member ( obj -> ancestor4 , cls ) ) ;
- }
-
-
- Boolean
- MetaInfo::ClassExists(
- const char *name)
- {
- MetaInfo *iter;
- #if defined(DEBUG)
- int numClasses=0;
- #endif
- for(iter = g_head_info; iter; iter = iter->next)
- {
- sNumClasses++;
- if (!cstrcmp(iter->name, name))
- return true;
- }
- #if defined(DEBUG)
- if (numClasses != sNumClasses)
- DebugStr("\pnumClasses doesn't match!");
- #endif
- return false;
- }
-