Fixed binary search: no more infinite loops when vendor is unknown.
[tangerine.git] / rom / oop / docs / meta.doc
blobbc27b65e040f74717804a4dbb7f8883fa7c8fc93
1 /*
2     Copyright © 1995-2001, The AROS Development Team. All rights reserved.
3     $Id$
5     Desc: Autodoc for the Meta interface.
6     Lang: english
7 */
9 Attrs:
11 NAME
12         aMeta_ID                [I],    STRPTR
13         
14 FUNCTION
15         Specifies the class ID for the class.
16         
17 ---------------------------
18 NAME
19         aMeta_SuperID           [I],    STRPTR
21 FUNCTION
22         ID of public class that will be superclass of class to be created.
23         
24         
25                         
26 ---------------------------
27 NAME
28         aMeta_SuperPtr  [I],    Class *
30 FUNCTION
31         Pointer to private class that will be superclass to
32         class created.
33         
34 NAME
35         aMeta_InstSize  [I],    ULONG
37 FUNCTION
38         Size of the instance data for this class.
39         Note, this is not necessarily the same as the size of the whole
40         object of this class.
41         
42 ---------------------------
43 NAME
44         aMeta_InterfaceDescr    [I],    struct InterfaceDescr *
45         
46         Pointer to an array struct InterfaceDescr.
47         This array has to be nullterminated. Each 
48         
49         struct InterfaceDescr
50         {
51                 struct MethodDescr *MethodTable;
52                 STRPTR InterfaceID;
53                 ULONG NumMethods; /* Number of methods in the methodtable  */
54         };
55         
56         describes an interface of the class.
57         The MethodTable is an array of 
59         struct MethodDescr
60         {
61                 IPTR (*MethodFunc)();
62                 ULONG MethodIdx;
63         };
64         
65         which describes each method's implemtation.
67 EXAMPLE
69     struct MethodDescr root_mdescr[NUM_ROOT_METHODS + 1] =
70     {
71         { (IPTR (*)())unixio_new,       MIDX_Root_New           },
72         { (IPTR (*)())unixio_dispose,   MIDX_Root_Dispose       },
73         { NULL, 0UL }
74     };
76     struct MethodDescr unixio_mdescr[NUM_UNIXIO_METHODS + 1] =
77     {
78         { (IPTR (*)())unixio_wait,      HIDDMIDX_UnixIO_Wait            },
79         { NULL, 0UL }
80     };
81     
82     struct InterfaceDescr ifdescr[] =
83     {
84         {root_mdescr, IID_Root, NUM_ROOT_METHODS},
85         {unixio_mdescr, IID_UnixIO, NUM_UNIXIO_METHODS},
86         {NULL, NULL, 0UL}
87     };
89         
90     struct TagItem tags[] =
91     {
92         {aMeta_SuperID,                 (IPTR)CLID_Hidd},
93         {aMeta_InterfaceDescr,          (IPTR)ifdescr},
94         {aMeta_ID,                      (IPTR)CLID_UnixIO_Hidd},
95         {aMeta_InstSize,                (IPTR)sizeof (struct UnixIOData) },
96         {TAG_DONE, 0UL}
97     };
98     
99     ...
100     
102     cl = NewObjectA(NULL, CLID_HIDDMeta, tags);
103         
104         
105 BUGS
106         This API to class creation is not good, as it's not flexible
107         nor "future-compatible" One should probably use tags for everything.
108         For example there is no way to specify attribute
109         types, method parameter struct types/stubs etc.
110         
111         Suggestions are welcome.
112