source: trunk/nom/include/nomtk.h@ 195

Last change on this file since 195 was 195, checked in by cinc, 19 years ago

Class DLLs register themselves with the garbage collector now. Some clean ups.

File size: 6.0 KB
Line 
1/* ***** BEGIN LICENSE BLOCK *****
2* Version: CDDL 1.0/LGPL 2.1
3*
4* The contents of this file are subject to the COMMON DEVELOPMENT AND
5* DISTRIBUTION LICENSE (CDDL) Version 1.0 (the "License"); you may not use
6* this file except in compliance with the License. You may obtain a copy of
7* the License at http://www.sun.com/cddl/
8*
9* Software distributed under the License is distributed on an "AS IS" basis,
10* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11* for the specific language governing rights and limitations under the
12* License.
13*
14* The Original Code is "NOM" Netlabs Object Model
15*
16* The Initial Developer of the Original Code is
17* netlabs.org: Chris Wohlgemuth <cinc-ml@netlabs.org>.
18* Portions created by the Initial Developer are Copyright (C) 2005-2006
19* the Initial Developer. All Rights Reserved.
20*
21* Contributor(s):
22*
23* Alternatively, the contents of this file may be used under the terms of
24* the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
25* case the provisions of the LGPL are applicable instead of those above. If
26* you wish to allow use of your version of this file only under the terms of
27* the LGPL, and not to allow others to use your version of this file under
28* the terms of the CDDL, indicate your decision by deleting the provisions
29* above and replace them with the notice and other provisions required by the
30* LGPL. If you do not delete the provisions above, a recipient may use your
31* version of this file under the terms of any one of the CDDL or the LGPL.
32*
33* ***** END LICENSE BLOCK ***** */
34
35#ifndef NOMTK_H_INCLUDED
36#define NOMTK_H_INCLUDED
37
38/* The shared memory holding all the objects */
39#define SOMTK_SHARED_MEM_SIZE_POOL 0x100000 /* 1Mb */
40
41/* This holds the som environment, e.g. heads of the object lists... */
42#define SOMTK_SHARED_MEM_SIZE_ROOT sizeof(NOM_ENV)
43#define SOMTK_SHARED_MEM_NAME_ROOT "\\SHAREMEM\\CWSOMTK\\ROOT"
44
45
46/* That's the base structure of all the SOM stuff */
47typedef struct _nomEnv {
48 ULONG cbSize; /* Size of this struct */
49 PVOID pMemPool; /* Shared memory heap for sub alloc */
50 HMTX hmtx_obsolete; /* Mutex sem to protect this structure -Will go away! */
51 ULONG ulNumRegIds; /* Number of registered somIDs */
52 NOMClassPriv *ncpNOMObject; /* This is for NOMObject*/
53 nomClasses livingMetaClasses; /* List of created meta classes. */
54 NOMClass *defaultMetaClass; /* This is a pointer to the NOMClass object */
55 NOMClass *nomObjectMetaClass; /* Metaclass of NOMObject */
56}NOM_ENV;
57typedef NOM_ENV *PNOM_ENV;
58
59/* Redefine SOMFree(), SOMCalloc(), SOMMalloc */
60#define SOMFree NOMFree
61#define SOMMalloc NOMMalloc
62#define SOMCalloc NOMCalloc
63
64
65NOMEXTERN PNOM_ENV NOMLINK nomTkInit(void);
66
67NOMEXTERN nomToken NOMLINK NOMMalloc(const ULONG size);
68NOMEXTERN boolean NOMLINK NOMFree(const nomToken memPtr);
69NOMEXTERN nomToken NOMLINK NOMCalloc(const ULONG num, const ULONG size);
70//NOMEXTERN gboolean NOMLINK nomIsObj(NOMObject * nomObj);
71NOMEXTERN gboolean NOMLINK nomIsObj(gpointer nomObj);
72NOMEXTERN int NOMLINK nomPrintf(string chrFormat, ...);
73NOMEXTERN NOMClassMgr * NOMLINK nomEnvironmentNew (void);
74NOMEXTERN void NOMLINK dumpClasses(void);
75NOMEXTERN nomId NOMLINK nomIdFromString(gchar* inString);
76NOMEXTERN gchar* NOMLINK nomStringFromId(nomId inId);
77
78/* Functions used by nomBuildClass() */
79ULONG priv_requestSomEnvMutex(PNOM_ENV pEnv);
80ULONG priv_releaseSomEnvMutex(PNOM_ENV pEnv);
81BOOL priv_addPrivClassToGlobalClassList(PNOM_ENV pEnv, NOMClassPriv * nClass);
82NOMClassPriv* priv_findPrivClassInGlobalClassListFromName(PNOM_ENV pEnv, char* nClass);
83
84NOMClass * NOMLINK priv_buildNOMClass(NOM_ulong ulReserved,
85 nomStaticClassInfo *sci,
86 NOM_ulong majorVersion,
87 NOM_ulong minorVersion);
88NOMClassPriv * NOMLINK priv_buildNOMObjectClassInfo(NOM_ulong ulReserved,
89 nomStaticClassInfo *sci,
90 NOM_ulong majorVersion,
91 NOM_ulong minorVersion);
92void addMethodAndDataToThisPrivClassStruct(NOMClassPriv* nClass, NOMClassPriv* ncpParent, nomStaticClassInfo *sci);
93NOMClass* createNOMObjectClassObjectAndUpdateNOMObject(NOMClass* nomClass, NOMClassPriv* nClass, NOM_ulong ulSize);
94void fillCClassDataStructParentMtab(nomStaticClassInfo *sci, NOMClassPriv *nClass, NOMClass *nomClass);
95void priv_resolveOverrideMethods(NOMClassPriv *nClass, nomStaticClassInfo *sci);
96
97/* Debug function */
98//#define METHOD_DEBUG
99
100#ifdef METHOD_DEBUG
101#define NOMMethodDebug(a) g_message("Line %d: class %s, entering %s", __LINE__, a, __FUNCTION__)
102#define TST_OBJECT(a) if(!nomIsObj(a)){ \
103 g_message("Line %d: in %s given object (0x%x) is NO NOMObject",\
104 __LINE__, __FUNCTION__, (UINT)a);\
105 }else{ \
106 g_message("Line %d: in %s given object (0x%x) is NOMObject, class: %s", \
107 __LINE__, __FUNCTION__, (UINT)a, ((PNOMObject)a)->mtab->nomClassName);}
108#else
109#define NOMMethodDebug(a)
110#define TST_OBJECT(a)
111#endif
112
113void _dumpClassDataStruct(nomClassDataStructure* cds, ULONG ulNumMethods);
114void _dumpSci(nomStaticClassInfo* sci);
115void _dumpMtab(nomMethodTab* mtab);
116void _dumpObjShort(NOMObject* sObj);
117void _dumpClasses();
118
119#if 0
120ULONG calculateNameHash(char * theString);
121/* Debugging functions */
122
123
124void _dumpStaticMTab(somStaticMethod_t* smt, ULONG ulMethod);
125SOMEXTERN void SOMLINK _dumpParentMTab(somParentMtabStructPtr pMtabPtr);
126void _dumpParentMTabList(somParentMtabStructPtr pMtabPtr);
127SOMEXTERN void SOMLINK _dumpObj(SOMObject* sObj);
128void _dumpMethodTabList(somMethodTabList *mtabList);
129void SOMLINK _dumpMtab(somMethodTab* mtab);
130SOMEXTERN void SOMLINK _dumpMTabListPrivClass(SOMClassPriv *sClass);
131SOMEXTERN void SOMLINK _dumpObjShort(SOMObject* sObj);
132#endif
133
134#endif /* NOMTK_H_INCLUDED */
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
Note: See TracBrowser for help on using the repository browser.