diff options
author | Roberto C. Sanchez <roberto@connexer.com> | 2014-03-29 10:53:33 -0400 |
---|---|---|
committer | Roberto C. Sanchez <roberto@connexer.com> | 2014-03-29 10:53:33 -0400 |
commit | 8d3fc864d094eeadc721f8e93436b37a5fab173e (patch) | |
tree | 05e201c67dca55b4ccdf90ad479a25d95e3b1e63 /include/swobject.h |
Imported Upstream version 1.5.3
Diffstat (limited to 'include/swobject.h')
-rw-r--r-- | include/swobject.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/include/swobject.h b/include/swobject.h new file mode 100644 index 0000000..974f982 --- /dev/null +++ b/include/swobject.h @@ -0,0 +1,54 @@ +#ifndef SWOBJECT_H +#define SWOBJECT_H + +#include <utilfuns.h> +#if !defined(__GNUC__) && !defined(_WIN32_WCE) +#else +#include <unixstr.h> +#endif + +#include <defs.h> +#include <string.h> + +#define SWDYNAMIC_CAST(className, object) (className *)((object->getClass()->isAssignableFrom(#className))?object:0) + +/** +* Class used for SWDYNAMIC_CAST to save the inheritance order. +*/ +class SWDLLEXPORT SWClass { +private: + const char **descends; + +public: + SWClass (const char **descends) { + this->descends = descends; + } + + bool isAssignableFrom (const char *className) const { + for (int i = 0; descends[i]; i++) { + if (!stricmp (descends[i], className)) + return true; + } + return false; + } +}; + +/** Base class for major Sword classes. +* SWObject is the base class for major Sword classes like SWKey. +* It is used because dynamic_cast is not available on all plattforms supported +* by Sword. Use SWDYNAMIC_CAST(classname, object) instead of dynamic_cast<classname>(object). +*/ +class SWObject { +protected: + SWClass * myclass; + +public: + /** Use this to get the class definition and inheritance order. + * @return The class definition of this object + */ + const SWClass *getClass () const { + return myclass; + } +}; + +#endif |