2 Copyright © 1995-2014, The AROS Development Team. All rights reserved.
5 Desc: OOP function OOP_GetMethodID
9 /*****************************************************************************
12 #include <proto/exec.h>
13 #include <proto/oop.h>
14 #include <exec/memory.h>
15 #include <aros/libcall.h>
17 #include <aros/debug.h>
20 AROS_LH2(OOP_MethodID
, OOP_GetMethodID
,
23 AROS_LHA(CONST_STRPTR
, interfaceID
, A0
),
24 AROS_LHA(ULONG
, methodOffset
, D0
),
27 struct Library
*, OOPBase
, 7, OOP
)
30 Maps a globally unique full method ID
31 (Interface ID + method offset) into
35 interfaceID - globally unique interface identifier.
36 methodOffset - offset to the method in this interface.
40 Numeric method identifier that is unique for this machine.
52 ******************************************************************************/
58 struct iid_bucket
*idb
;
59 struct HashTable
*iidtable
= GetOBase(OOPBase
)->ob_IIDTable
;
61 EnterFunc(bug("OOP_GetMethodID(interfaceID=%s, methodOffset=%ld)\n",
62 interfaceID
, methodOffset
));
64 /* #warning doesn't handle failures. (Should throw exception of some kind)
66 idb
= (struct iid_bucket
*)iidtable
->Lookup(iidtable
, (IPTR
)interfaceID
, GetOBase(OOPBase
));
69 D(bug("Got mid %ld\n", mid
));
70 /* Should throw exception here if methodbase == -1UL */
71 mid
= idb
->methodbase
+ methodOffset
;
73 ReturnInt ("OOP_GetMethodID", ULONG
, mid
);
76 /* Should throw exception here */
78 /* The ID must be left-shifted to make place for method offsets */
79 ReturnInt ("OOP_GetMethodID", ULONG
, -1);
83 } /* OOP_GetMethodID */