Enlightenment CVS committal

Author  : mej
Project : eterm
Module  : libast

Dir     : eterm/libast/include/libast


Modified Files:
        obj.h 


Log Message:
Fri Jun 27 17:53:29 2003                        Michael Jennings (mej)

Starting in on the docs for the object system.  Yum.

===================================================================
RCS file: /cvsroot/enlightenment/eterm/libast/include/libast/obj.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- obj.h       19 Feb 2003 21:10:26 -0000      1.14
+++ obj.h       27 Jun 2003 21:53:49 -0000      1.15
@@ -25,21 +25,104 @@
 #define _LIBAST_OBJ_H_
 
 
-/*
- * Generic macro goop
+/[EMAIL PROTECTED]/
+/**
+ * @name Object Definition and Declaration Macros
+ * Macros used to help declare and manipulate objects of any type.
+ *
+ * This set of macros is intended to abstract certain details about
+ * the internal workings of objects and greatly simplify their
+ * definition.  The results have been known to cause non-cpp-compliant
+ * parsers to have the occasional fit, but they work. :-)
+ *
+ * @ingroup DOXGRP_OBJ
  */
 
-/* Convenience macros for declaring object structures and types. */
+/**
+ * Declare an object structure.
+ *
+ * This macro abstracts the actual name of the object structure to
+ * help prevent its direct use.  Obviously the translation is plainly
+ * visible, so those sufficiently determined to do it the Wrong Way
+ * still can.  This macro is not used directly, but rather as part of
+ * the SPIF_DEFINE_OBJ() macro (see below), which is in turn used to
+ * define object types.
+ *
+ * @param t The object type as a non-quoted string (e.g., obj).
+ * @return  The @c struct keyword followed by the structure name for
+ *          the specified object type.
+ *
+ * @see DOXGRP_OBJ, SPIF_DEFINE_OBJ(), SPIF_DEFINE_TYPE()
+ */
 #define SPIF_DECL_OBJ_STRUCT(t)          struct spif_ ## t ## _t_struct
+
+/**
+ * Define an object type based on the structure definition immediately
+ * following.
+ *
+ * This macro simplifies the creation of a new class by adding the
+ * appropriate @c typedef along with introducing the structure
+ * definition.  Although use of this macro presents a bit of an
+ * unnatural parsing problem for non-cpp-aware tools (e.g., indent),
+ * its use is recommended for encapsulation purposes.  Invocation of
+ * this macro should be immediately followed by an open brace ('{')
+ * and a normal C-style structure definition.
+ *
+ * @param t The object type as a non-quoted string (e.g., obj).
+ * @return  An appropriate @c typedef and @c struct introducer.
+ *
+ * @see DOXGRP_OBJ
+ */
 #define SPIF_DEFINE_OBJ(t)               SPIF_DEFINE_TYPE(t, 
SPIF_DECL_OBJ_STRUCT(t)); SPIF_DECL_OBJ_STRUCT(t)
+/**
+ * Declare the parent type of an object being defined.
+ *
+ * This macro is used to declare that a particular object type (e.g.,
+ * obj) is the parent type of an object which is being defined via
+ * SPIF_DEFINE_OBJ().  The call to this macro should @em immediately
+ * follow the opening brace (which, in turn, immediately follows the
+ * call to SPIF_DEFINE_OBJ()).  Declaring the parent type allows for
+ * safe typecasting of any object of the current type to its parent
+ * type (or any parent type in its "family tree").  At minimum, any
+ * true object must at @em least be derived from the @c obj type so
+ * that it can be safely cast to a generic object.
+ *
+ * @param t The object type as a non-quoted string (e.g., obj).
+ *
+ * @see DOXGRP_OBJ
+ */
 #define SPIF_DECL_PARENT_TYPE(t)         SPIF_CONST_TYPE(t) parent
 
-/* Cast an arbitrary object pointer to a pointer to a nullobj.  Coincidentally,
-   a nullobj *is* an arbitrary object pointer.  Even moreso than an obj. :-) */
-#define SPIF_NULLOBJ(obj)                ((spif_nullobj_t) (obj))
-
-/* Typecase macros for classes */
+/**
+ * Cast an arbitrary class object to the generic class type.
+ *
+ * Most non-interface classes use the generic obj-style class
+ * variable, containing only the basic methods (create, delete,
+ * compare, etc.) that every object needs.  However, interface classes
+ * require the use of more specific class objects with support for
+ * additional object methods.  This macro allows an arbitrary class
+ * object, be it the generic class type or a decendent thereof, to be
+ * cast to the generic class type.  This allows basic method calls to
+ * be performed on complex types by treating them as simple objects.
+ *
+ * @param cls An arbitrary class object.
+ * @return    The class object cast to the generic type.
+ *
+ * @see DOXGRP_OBJ, SPIF_OBJ_CLASS()
+ */
 #define SPIF_CLASS(cls)                  (SPIF_CAST(class) (cls))
+
+/**
+ * Cast an arbitrary class object to a const generic class type.
+ *
+ * This macro is equivalent to SPIF_CLASS(), except that the resulting
+ * object is a @c const object.
+ *
+ * @param cls An arbitrary class object.
+ * @return    The class object cast to the generic type.
+ *
+ * @see DOXGRP_OBJ, SPIF_CLASS()
+ */
 #define SPIF_CONST_CLASS(cls)            (SPIF_CONST_CAST(class) (cls))
 
 /* Assembles the name of the object class variable. */
@@ -57,6 +140,10 @@
 #  define SPIF_OBJ_CHECK_TYPE(o, type)   SPIF_OBJ_IS_TYPE(o, type)
 #endif
 
+/* Cast an arbitrary object pointer to a pointer to a nullobj.  Coincidentally,
+   a nullobj *is* an arbitrary object pointer.  Even moreso than an obj. :-) */
+#define SPIF_NULLOBJ(obj)                ((spif_nullobj_t) (obj))
+
 /* Cast an arbitrary object pointer to an obj.  Any object of sufficient size
    and/or complexity should be derived from this type. */
 #define SPIF_OBJ(obj)                    ((spif_obj_t) (obj))
@@ -85,6 +172,7 @@
 #define SPIF_OBJ_COMP(o1, o2)            SPIF_CAST(cmp) (SPIF_OBJ_CALL_METHOD((o1),  
comp)(o1, o2))
 #define SPIF_OBJ_DUP(o)                  SPIF_CAST(obj) (SPIF_OBJ_CALL_METHOD((o), 
dup)(o))
 #define SPIF_OBJ_TYPE(o)                 SPIF_CAST(classname) 
(SPIF_OBJ_CALL_METHOD((o), type)(o))
+/[EMAIL PROTECTED]/
 
 /* Convenience macro */
 #define SPIF_SHOW(o, fd)                 do { \




-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100006ave/direct;at.asp_061203_01/01
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to