xref: /AOO41X/main/codemaker/source/cunomaker/cunotype.hxx (revision 2037b4dea6c6e1d64a540d6f09020763cd429168)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef INCLUDED_CODEMAKER_SOURCE_CUNOMAKER_CUNOTYPE_HXX_
25 #define INCLUDED_CODEMAKER_SOURCE_CUNOMAKER_CUNOTYPE_HXX
26 
27 #include    <codemaker/typemanager.hxx>
28 #include    <codemaker/dependency.hxx>
29 
30 enum BASETYPE
31 {
32     BT_INVALID,
33     BT_VOID,
34     BT_ANY,
35     BT_TYPE,
36     BT_BOOLEAN,
37     BT_CHAR,
38     BT_STRING,
39     BT_FLOAT,
40     BT_DOUBLE,
41     BT_OCTET,
42     BT_BYTE,
43     BT_SHORT,
44     BT_LONG,
45     BT_HYPER,
46     BT_UNSIGNED_SHORT,
47     BT_UNSIGNED_LONG,
48     BT_UNSIGNED_HYPER
49 };
50 
51 
52 enum CunoTypeDecl
53 {
54     CUNOTYPEDECL_ALLTYPES,
55     CUNOTYPEDECL_NOINTERFACES,
56     CUNOTYPEDECL_ONLYINTERFACES
57 };
58 
59 class CunoOptions;
60 class FileStream;
61 
62 class CunoType
63 {
64 public:
65     CunoType(TypeReader& typeReader,
66              const ::rtl::OString& typeName,
67              const TypeManager& typeMgr,
68              const TypeDependency& typeDependencies);
69 
70     virtual ~CunoType();
71 
72     virtual sal_Bool dump(CunoOptions* pOptions) throw( CannotDumpException );
73     virtual sal_Bool dumpDependedTypes(CunoOptions* pOptions)  throw( CannotDumpException );
74     virtual sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ) = 0;
75     virtual sal_Bool dumpCFile(FileStream& o) throw( CannotDumpException ) = 0;
76 
77     virtual ::rtl::OString dumpHeaderDefine(FileStream& o, sal_Char* prefix, sal_Bool bExtended=sal_False);
78     virtual void dumpDefaultHIncludes(FileStream& o);
79     virtual void dumpDefaultCIncludes(FileStream& o);
80     virtual void dumpInclude(FileStream& o, const ::rtl::OString& typeName, sal_Char* prefix, sal_Bool bExtended=sal_False, sal_Bool bCaseSensitive=sal_False);
81     virtual void dumpDepIncludes(FileStream& o, const ::rtl::OString& typeName, sal_Char* prefix);
82 
83     virtual void dumpOpenExternC(FileStream& o);
84     virtual void dumpCloseExternC(FileStream& o);
85 
86     virtual void dumpGetCunoType(FileStream& o);
87     virtual void dumpCGetCunoType(FileStream& o);
88     virtual void dumpLGetCunoType(FileStream& o);
89 
90     virtual void dumpType(FileStream& o, const ::rtl::OString& type, sal_Bool bConst=sal_False,
91                           sal_Bool bPointer=sal_False, sal_Bool bParam=sal_False)
92                     throw( CannotDumpException );
93     ::rtl::OString  getTypeClass(const ::rtl::OString& type="", sal_Bool bCStyle=sal_False);
94     ::rtl::OString  getBaseType(const ::rtl::OString& type);
95     void    dumpCppuGetType(FileStream& o, const ::rtl::OString& type, sal_Bool bDecl=sal_False, CunoTypeDecl eDeclFlag=CUNOTYPEDECL_ALLTYPES);
96     void    dumpTypeInit(FileStream& o, const ::rtl::OString& type);
97     BASETYPE isBaseType(const ::rtl::OString& type);
98 
99     ::rtl::OString typeToIdentifier(const ::rtl::OString& type);
100 
101     void    dumpConstantValue(FileStream& o, sal_uInt16 index);
102 
103     virtual sal_uInt32  getMemberCount();
104     virtual sal_uInt32  getInheritedMemberCount();
105     void    dumpInheritedMembers(FileStream& o, rtl::OString& superType);
106 
107     sal_Bool isSeqType(const ::rtl::OString& type, ::rtl::OString& baseType, ::rtl::OString& seqPrefix);
108     sal_Bool isArrayType(const ::rtl::OString& type, ::rtl::OString& baseType, ::rtl::OString& arrayPrefix);
isVoid(const::rtl::OString & type)109     sal_Bool isVoid(const ::rtl::OString& type)
110         { return type.equals("void"); }
111     void            inc(sal_uInt32 num=4);
112     void            dec(sal_uInt32 num=4);
113     ::rtl::OString  indent();
114     ::rtl::OString  indent(sal_uInt32 num);
115 protected:
116     virtual sal_uInt32  checkInheritedMemberCount(const TypeReader* pReader);
117 
118     ::rtl::OString  checkSpecialCunoType(const ::rtl::OString& type);
119     ::rtl::OString  checkRealBaseType(const ::rtl::OString& type, sal_Bool bResolveTypeOnly = sal_False);
120     void    dumpCppuGetTypeMemberDecl(FileStream& o, CunoTypeDecl eDeclFlag);
121 
isNestedType()122     sal_Bool isNestedType()
123         { return m_bIsNestedType; };
124 
getNestedTypeNames()125     RegistryKeyNames& getNestedTypeNames()
126         { return  m_nestedTypeNames; };
127 
128     sal_Bool isNestedTypeByName(const ::rtl::OString& type);
129     sal_Bool hasNestedType(const ::rtl::OString& type);
130 
131 protected:
132     sal_uInt32          m_inheritedMemberCount;
133 
134     sal_Bool            m_cunoTypeLib;
135     sal_Bool            m_cunoTypeLeak;
136     sal_Bool            m_cunoTypeDynamic;
137     sal_uInt32          m_indentLength;
138     ::rtl::OString      m_typeName;
139     ::rtl::OString      m_name;
140     TypeReader          m_reader;
141     TypeManager&        m_typeMgr;
142     TypeDependency      m_dependencies;
143     sal_Bool            m_bIsNestedType;
144     RegistryKeyNames    m_nestedTypeNames;
145 };
146 
147 class InterfaceType : public CunoType
148 {
149 public:
150     InterfaceType(TypeReader& typeReader,
151                  const ::rtl::OString& typeName,
152                  const TypeManager& typeMgr,
153                  const TypeDependency& typeDependencies);
154 
155     virtual ~InterfaceType();
156 
157     sal_Bool    dumpDeclaration(FileStream& o) throw( CannotDumpException );
158     sal_Bool    dumpHFile(FileStream& o) throw( CannotDumpException );
159     sal_Bool    dumpCFile(FileStream& o) throw( CannotDumpException );
160 
161     void        dumpInheritedFunctions(FileStream& o, rtl::OString& superType);
162     void        dumpAttributes(FileStream& o, const ::rtl::OString& interfaceType, TypeReader& reader );
163     void        dumpMethods(FileStream& o, const ::rtl::OString& interfaceType, TypeReader& reader );
164     void        dumpGetCunoType(FileStream& o);
165     void        dumpCGetCunoType(FileStream& o);
166     void        dumpCUnoAttributeTypeNames(FileStream& o, sal_Bool bRelease=sal_False);
167     void        dumpCUnoMethodTypeNames(FileStream& o, sal_Bool bRelease=sal_False);
168     void        dumpCUnoAttributeRefs(FileStream& o, sal_uInt32& index);
169     void        dumpCUnoMethodRefs(FileStream& o, sal_uInt32& index);
170     void        dumpCUnoAttributes(FileStream& o, sal_uInt32& index);
171     void        dumpCUnoMethods(FileStream& o, sal_uInt32& index);
172     void        dumpAttributesCppuDecl(FileStream& o, StringSet* pFinishedTypes, CunoTypeDecl eDeclFlag);
173     void        dumpMethodsCppuDecl(FileStream& o, StringSet* pFinishedTypes, CunoTypeDecl eDeclFlag );
174 
175     sal_uInt32  getMemberCount();
176     sal_uInt32  getInheritedMemberCount();
177 
178 protected:
179     sal_uInt32  checkInheritedMemberCount(const TypeReader* pReader);
180 
181 protected:
182     sal_uInt32  m_inheritedMemberCount;
183     sal_Bool    m_hasAttributes;
184     sal_Bool    m_hasMethods;
185 };
186 
187 class ModuleType : public CunoType
188 {
189 public:
190     ModuleType(TypeReader& typeReader,
191                const ::rtl::OString& typeName,
192                const TypeManager& typeMgr,
193                const TypeDependency& typeDependencies);
194 
195     virtual ~ModuleType();
196 
197     virtual sal_Bool    dump(CunoOptions* pOptions) throw( CannotDumpException );
198 
199     sal_Bool            dumpDeclaration(FileStream& o) throw( CannotDumpException );
200     sal_Bool            dumpHFile(FileStream& o) throw( CannotDumpException );
201     sal_Bool            dumpCFile(FileStream& o) throw( CannotDumpException );
202     sal_Bool            hasConstants();
203 };
204 
205 class ConstantsType : public ModuleType
206 {
207 public:
208     ConstantsType(TypeReader& typeReader,
209                const ::rtl::OString& typeName,
210                const TypeManager& typeMgr,
211                const TypeDependency& typeDependencies);
212 
213     virtual ~ConstantsType();
214 
215     virtual sal_Bool    dump(CunoOptions* pOptions) throw( CannotDumpException );
216 };
217 
218 class StructureType : public CunoType
219 {
220 public:
221     StructureType(TypeReader& typeReader,
222                   const ::rtl::OString& typeName,
223                   const TypeManager& typeMgr,
224                   const TypeDependency& typeDependencies);
225 
226     virtual ~StructureType();
227 
228     sal_Bool    dumpDeclaration(FileStream& o) throw( CannotDumpException );
229     sal_Bool    dumpHFile(FileStream& o) throw( CannotDumpException );
230     sal_Bool    dumpCFile(FileStream& o) throw( CannotDumpException );
231 };
232 
233 class ExceptionType : public CunoType
234 {
235 public:
236     ExceptionType(TypeReader& typeReader,
237                   const ::rtl::OString& typeName,
238                   const TypeManager& typeMgr,
239                   const TypeDependency& typeDependencies);
240 
241     virtual ~ExceptionType();
242 
243     sal_Bool    dumpDeclaration(FileStream& o) throw( CannotDumpException );
244     sal_Bool    dumpHFile(FileStream& o) throw( CannotDumpException );
245     sal_Bool    dumpCFile(FileStream& o) throw( CannotDumpException );
246 };
247 
248 class EnumType : public CunoType
249 {
250 public:
251     EnumType(TypeReader& typeReader,
252              const ::rtl::OString& typeName,
253              const TypeManager& typeMgr,
254              const TypeDependency& typeDependencies);
255 
256     virtual ~EnumType();
257 
258     sal_Bool    dumpDeclaration(FileStream& o) throw( CannotDumpException );
259     sal_Bool    dumpHFile(FileStream& o) throw( CannotDumpException );
260     sal_Bool    dumpCFile(FileStream& o) throw( CannotDumpException );
261 
262     void        dumpGetCunoType(FileStream& o);
263     void        dumpCGetCunoType(FileStream& o);
264 };
265 
266 class TypeDefType : public CunoType
267 {
268 public:
269     TypeDefType(TypeReader& typeReader,
270              const ::rtl::OString& typeName,
271              const TypeManager& typeMgr,
272              const TypeDependency& typeDependencies);
273 
274     virtual ~TypeDefType();
275 
276     sal_Bool    dumpDeclaration(FileStream& o) throw( CannotDumpException );
277     sal_Bool    dumpHFile(FileStream& o) throw( CannotDumpException );
278     sal_Bool    dumpCFile(FileStream& o) throw( CannotDumpException );
279 
280     void        dumpGetCunoType(FileStream& o);
281     void        dumpLGetCunoType(FileStream& o);
282     void        dumpCGetCunoType(FileStream& o);
283 };
284 
285 
286 sal_Bool produceType(const ::rtl::OString& typeName,
287                      TypeManager& typeMgr,
288                      TypeDependency& typeDependencies,
289                      CunoOptions* pOptions)
290                  throw( CannotDumpException );
291 
292 /**
293  * This function returns a C++ scoped name, represents the namespace
294  * scoping of this type, e.g. com:.sun::star::uno::XInterface. If the scope of
295  * the type is equal scope, the relativ name will be used.
296  */
297 ::rtl::OString scopedName(const ::rtl::OString& scope, const ::rtl::OString& type,
298                    sal_Bool bNoNameSpace=sal_False);
299 
300 ::rtl::OString shortScopedName(const ::rtl::OString& scope, const ::rtl::OString& type,
301                         sal_Bool bNoNameSpace=sal_False);
302 
303 
304 #endif // INCLUDED_CODEMAKER_SOURCE_CUNOMAKER_CUNOTYPE_HXX
305 
306