/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef INCLUDED_CODEMAKER_SOURCE_CUNOMAKER_CUNOTYPE_HXX_ #define INCLUDED_CODEMAKER_SOURCE_CUNOMAKER_CUNOTYPE_HXX #include #include enum BASETYPE { BT_INVALID, BT_VOID, BT_ANY, BT_TYPE, BT_BOOLEAN, BT_CHAR, BT_STRING, BT_FLOAT, BT_DOUBLE, BT_OCTET, BT_BYTE, BT_SHORT, BT_LONG, BT_HYPER, BT_UNSIGNED_SHORT, BT_UNSIGNED_LONG, BT_UNSIGNED_HYPER }; enum CunoTypeDecl { CUNOTYPEDECL_ALLTYPES, CUNOTYPEDECL_NOINTERFACES, CUNOTYPEDECL_ONLYINTERFACES }; class CunoOptions; class FileStream; class CunoType { public: CunoType(TypeReader& typeReader, const ::rtl::OString& typeName, const TypeManager& typeMgr, const TypeDependency& typeDependencies); virtual ~CunoType(); virtual sal_Bool dump(CunoOptions* pOptions) throw( CannotDumpException ); virtual sal_Bool dumpDependedTypes(CunoOptions* pOptions) throw( CannotDumpException ); virtual sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ) = 0; virtual sal_Bool dumpCFile(FileStream& o) throw( CannotDumpException ) = 0; virtual ::rtl::OString dumpHeaderDefine(FileStream& o, sal_Char* prefix, sal_Bool bExtended=sal_False); virtual void dumpDefaultHIncludes(FileStream& o); virtual void dumpDefaultCIncludes(FileStream& o); virtual void dumpInclude(FileStream& o, const ::rtl::OString& typeName, sal_Char* prefix, sal_Bool bExtended=sal_False, sal_Bool bCaseSensitive=sal_False); virtual void dumpDepIncludes(FileStream& o, const ::rtl::OString& typeName, sal_Char* prefix); virtual void dumpOpenExternC(FileStream& o); virtual void dumpCloseExternC(FileStream& o); virtual void dumpGetCunoType(FileStream& o); virtual void dumpCGetCunoType(FileStream& o); virtual void dumpLGetCunoType(FileStream& o); virtual void dumpType(FileStream& o, const ::rtl::OString& type, sal_Bool bConst=sal_False, sal_Bool bPointer=sal_False, sal_Bool bParam=sal_False) throw( CannotDumpException ); ::rtl::OString getTypeClass(const ::rtl::OString& type="", sal_Bool bCStyle=sal_False); ::rtl::OString getBaseType(const ::rtl::OString& type); void dumpCppuGetType(FileStream& o, const ::rtl::OString& type, sal_Bool bDecl=sal_False, CunoTypeDecl eDeclFlag=CUNOTYPEDECL_ALLTYPES); void dumpTypeInit(FileStream& o, const ::rtl::OString& type); BASETYPE isBaseType(const ::rtl::OString& type); ::rtl::OString typeToIdentifier(const ::rtl::OString& type); void dumpConstantValue(FileStream& o, sal_uInt16 index); virtual sal_uInt32 getMemberCount(); virtual sal_uInt32 getInheritedMemberCount(); void dumpInheritedMembers(FileStream& o, rtl::OString& superType); sal_Bool isSeqType(const ::rtl::OString& type, ::rtl::OString& baseType, ::rtl::OString& seqPrefix); sal_Bool isArrayType(const ::rtl::OString& type, ::rtl::OString& baseType, ::rtl::OString& arrayPrefix); sal_Bool isVoid(const ::rtl::OString& type) { return type.equals("void"); } void inc(sal_uInt32 num=4); void dec(sal_uInt32 num=4); ::rtl::OString indent(); ::rtl::OString indent(sal_uInt32 num); protected: virtual sal_uInt32 checkInheritedMemberCount(const TypeReader* pReader); ::rtl::OString checkSpecialCunoType(const ::rtl::OString& type); ::rtl::OString checkRealBaseType(const ::rtl::OString& type, sal_Bool bResolveTypeOnly = sal_False); void dumpCppuGetTypeMemberDecl(FileStream& o, CunoTypeDecl eDeclFlag); sal_Bool isNestedType() { return m_bIsNestedType; }; RegistryKeyNames& getNestedTypeNames() { return m_nestedTypeNames; }; sal_Bool isNestedTypeByName(const ::rtl::OString& type); sal_Bool hasNestedType(const ::rtl::OString& type); protected: sal_uInt32 m_inheritedMemberCount; sal_Bool m_cunoTypeLib; sal_Bool m_cunoTypeLeak; sal_Bool m_cunoTypeDynamic; sal_uInt32 m_indentLength; ::rtl::OString m_typeName; ::rtl::OString m_name; TypeReader m_reader; TypeManager& m_typeMgr; TypeDependency m_dependencies; sal_Bool m_bIsNestedType; RegistryKeyNames m_nestedTypeNames; }; class InterfaceType : public CunoType { public: InterfaceType(TypeReader& typeReader, const ::rtl::OString& typeName, const TypeManager& typeMgr, const TypeDependency& typeDependencies); virtual ~InterfaceType(); sal_Bool dumpDeclaration(FileStream& o) throw( CannotDumpException ); sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ); sal_Bool dumpCFile(FileStream& o) throw( CannotDumpException ); void dumpInheritedFunctions(FileStream& o, rtl::OString& superType); void dumpAttributes(FileStream& o, const ::rtl::OString& interfaceType, TypeReader& reader ); void dumpMethods(FileStream& o, const ::rtl::OString& interfaceType, TypeReader& reader ); void dumpGetCunoType(FileStream& o); void dumpCGetCunoType(FileStream& o); void dumpCUnoAttributeTypeNames(FileStream& o, sal_Bool bRelease=sal_False); void dumpCUnoMethodTypeNames(FileStream& o, sal_Bool bRelease=sal_False); void dumpCUnoAttributeRefs(FileStream& o, sal_uInt32& index); void dumpCUnoMethodRefs(FileStream& o, sal_uInt32& index); void dumpCUnoAttributes(FileStream& o, sal_uInt32& index); void dumpCUnoMethods(FileStream& o, sal_uInt32& index); void dumpAttributesCppuDecl(FileStream& o, StringSet* pFinishedTypes, CunoTypeDecl eDeclFlag); void dumpMethodsCppuDecl(FileStream& o, StringSet* pFinishedTypes, CunoTypeDecl eDeclFlag ); sal_uInt32 getMemberCount(); sal_uInt32 getInheritedMemberCount(); protected: sal_uInt32 checkInheritedMemberCount(const TypeReader* pReader); protected: sal_uInt32 m_inheritedMemberCount; sal_Bool m_hasAttributes; sal_Bool m_hasMethods; }; class ModuleType : public CunoType { public: ModuleType(TypeReader& typeReader, const ::rtl::OString& typeName, const TypeManager& typeMgr, const TypeDependency& typeDependencies); virtual ~ModuleType(); virtual sal_Bool dump(CunoOptions* pOptions) throw( CannotDumpException ); sal_Bool dumpDeclaration(FileStream& o) throw( CannotDumpException ); sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ); sal_Bool dumpCFile(FileStream& o) throw( CannotDumpException ); sal_Bool hasConstants(); }; class ConstantsType : public ModuleType { public: ConstantsType(TypeReader& typeReader, const ::rtl::OString& typeName, const TypeManager& typeMgr, const TypeDependency& typeDependencies); virtual ~ConstantsType(); virtual sal_Bool dump(CunoOptions* pOptions) throw( CannotDumpException ); }; class StructureType : public CunoType { public: StructureType(TypeReader& typeReader, const ::rtl::OString& typeName, const TypeManager& typeMgr, const TypeDependency& typeDependencies); virtual ~StructureType(); sal_Bool dumpDeclaration(FileStream& o) throw( CannotDumpException ); sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ); sal_Bool dumpCFile(FileStream& o) throw( CannotDumpException ); }; class ExceptionType : public CunoType { public: ExceptionType(TypeReader& typeReader, const ::rtl::OString& typeName, const TypeManager& typeMgr, const TypeDependency& typeDependencies); virtual ~ExceptionType(); sal_Bool dumpDeclaration(FileStream& o) throw( CannotDumpException ); sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ); sal_Bool dumpCFile(FileStream& o) throw( CannotDumpException ); }; class EnumType : public CunoType { public: EnumType(TypeReader& typeReader, const ::rtl::OString& typeName, const TypeManager& typeMgr, const TypeDependency& typeDependencies); virtual ~EnumType(); sal_Bool dumpDeclaration(FileStream& o) throw( CannotDumpException ); sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ); sal_Bool dumpCFile(FileStream& o) throw( CannotDumpException ); void dumpGetCunoType(FileStream& o); void dumpCGetCunoType(FileStream& o); }; class TypeDefType : public CunoType { public: TypeDefType(TypeReader& typeReader, const ::rtl::OString& typeName, const TypeManager& typeMgr, const TypeDependency& typeDependencies); virtual ~TypeDefType(); sal_Bool dumpDeclaration(FileStream& o) throw( CannotDumpException ); sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ); sal_Bool dumpCFile(FileStream& o) throw( CannotDumpException ); void dumpGetCunoType(FileStream& o); void dumpLGetCunoType(FileStream& o); void dumpCGetCunoType(FileStream& o); }; sal_Bool produceType(const ::rtl::OString& typeName, TypeManager& typeMgr, TypeDependency& typeDependencies, CunoOptions* pOptions) throw( CannotDumpException ); /** * This function returns a C++ scoped name, represents the namespace * scoping of this type, e.g. com:.sun::star::uno::XInterface. If the scope of * the type is equal scope, the relativ name will be used. */ ::rtl::OString scopedName(const ::rtl::OString& scope, const ::rtl::OString& type, sal_Bool bNoNameSpace=sal_False); ::rtl::OString shortScopedName(const ::rtl::OString& scope, const ::rtl::OString& type, sal_Bool bNoNameSpace=sal_False); #endif // INCLUDED_CODEMAKER_SOURCE_CUNOMAKER_CUNOTYPE_HXX