summaryrefslogtreecommitdiff
path: root/include/swobject.h
diff options
context:
space:
mode:
authorRoberto C. Sanchez <roberto@connexer.com>2014-03-29 10:53:59 -0400
committerRoberto C. Sanchez <roberto@connexer.com>2014-03-29 10:53:59 -0400
commit03134fa5f6f25d92724ce4c183f9bbe12a9e37dc (patch)
tree847326a4de82f0241ac87cbbc427a1b92a696a02 /include/swobject.h
parentd7469385b05b9510338407fa123e9ad090f80af6 (diff)
Imported Upstream version 1.5.11
Diffstat (limited to 'include/swobject.h')
-rw-r--r--include/swobject.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/include/swobject.h b/include/swobject.h
new file mode 100644
index 0000000..6f60a57
--- /dev/null
+++ b/include/swobject.h
@@ -0,0 +1,65 @@
+/******************************************************************************
+* swobject.h - definition for SWObject used as lowest base class for many
+* SWORD objects
+*
+* $Id: swobject.h 1790 2005-05-03 03:49:04Z scribe $
+*
+* Copyright 2005 CrossWire Bible Society (http://www.crosswire.org)
+* CrossWire Bible Society
+* P. O. Box 2528
+* Tempe, AZ 85280-2528
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of the GNU General Public License as published by the
+* Free Software Foundation version 2.
+*
+* This program is distributed in the hope that it will be useful, but
+* WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* General Public License for more details.
+*
+*/
+
+#ifndef SWOBJECT_H
+#define SWOBJECT_H
+
+#include <defs.h>
+
+SWORD_NAMESPACE_START
+#define SWDYNAMIC_CAST(className, object) (className *)((object)?((object->getClass()->isAssignableFrom(#className))?object:0):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;
+};
+
+/** 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;
+ }
+};
+
+SWORD_NAMESPACE_END
+#endif