00001 #ifndef SWOBJECT_H 00002 #define SWOBJECT_H 00003 00004 #include <utilfuns.h> 00005 #if !defined(__GNUC__) && !defined(_WIN32_WCE) 00006 #else 00007 #include <unixstr.h> 00008 #endif 00009 00010 #include <defs.h> 00011 #include <string.h> 00012 00013 SWORD_NAMESPACE_START 00014 #define SWDYNAMIC_CAST(className, object) (className *)((object)?((object->getClass()->isAssignableFrom(#className))?object:0):0) 00015 00019 class SWDLLEXPORT SWClass { 00020 private: 00021 const char **descends; 00022 00023 public: 00024 SWClass(const char **descends) { 00025 this->descends = descends; 00026 } 00027 00028 bool isAssignableFrom(const char *className) const { 00029 for (int i = 0; descends[i]; i++) { 00030 if (!stricmp(descends[i], className)) 00031 return true; 00032 } 00033 return false; 00034 } 00035 }; 00036 00042 class SWObject { 00043 protected: 00044 SWClass * myclass; 00045 00046 public: 00050 const SWClass *getClass () const { 00051 return myclass; 00052 } 00053 }; 00054 00055 SWORD_NAMESPACE_END 00056 #endif