| /************************************************************** |
| * |
| * 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_IDLMAKER_IDLTYPE_HXX |
| #define INCLUDED_CODEMAKER_SOURCE_IDLMAKER_IDLTYPE_HXX |
| |
| #include <codemaker/typemanager.hxx> |
| #include <codemaker/dependency.hxx> |
| |
| 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 IdlTypeDecl |
| { |
| CPPUTYPEDECL_ALLTYPES, |
| CPPUTYPEDECL_NOINTERFACES, |
| CPPUTYPEDECL_ONLYINTERFACES |
| }; |
| |
| class IdlOptions; |
| class FileStream; |
| |
| class IdlType |
| { |
| public: |
| IdlType(TypeReader& typeReader, |
| const ::rtl::OString& typeName, |
| const TypeManager& typeMgr, |
| const TypeDependency& typeDependencies); |
| |
| virtual ~IdlType(); |
| |
| virtual sal_Bool dump(IdlOptions* pOptions) throw( CannotDumpException ); |
| virtual sal_Bool dumpDependedTypes(IdlOptions* pOptions) throw( CannotDumpException ); |
| virtual sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ) = 0; |
| |
| virtual ::rtl::OString dumpHeaderDefine(FileStream& o, sal_Char* prefix ); |
| virtual void dumpDefaultHIncludes(FileStream& o); |
| virtual void dumpInclude(FileStream& o, const ::rtl::OString& genTypeName, const ::rtl::OString& typeName, sal_Char* prefix ); |
| |
| virtual void dumpDepIncludes(FileStream& o, const ::rtl::OString& typeName, sal_Char* prefix); |
| |
| virtual void dumpNameSpace(FileStream& o, sal_Bool bOpen = sal_True, sal_Bool bFull = sal_False, const ::rtl::OString& type=""); |
| |
| virtual void dumpType(FileStream& o, const ::rtl::OString& type) |
| throw( CannotDumpException ); |
| ::rtl::OString getBaseType(const ::rtl::OString& type); |
| void dumpIdlGetType(FileStream& o, const ::rtl::OString& type, sal_Bool bDecl=sal_False, IdlTypeDecl eDeclFlag=CPPUTYPEDECL_ALLTYPES); |
| BASETYPE isBaseType(const ::rtl::OString& type); |
| |
| void dumpConstantValue(FileStream& o, sal_uInt16 index); |
| |
| virtual sal_uInt32 getMemberCount(); |
| virtual sal_uInt32 getInheritedMemberCount(); |
| |
| 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 checkSpecialIdlType(const ::rtl::OString& type); |
| ::rtl::OString checkRealBaseType(const ::rtl::OString& type, sal_Bool bResolveTypeOnly = sal_False); |
| |
| protected: |
| sal_uInt32 m_inheritedMemberCount; |
| |
| sal_uInt32 m_indentLength; |
| ::rtl::OString m_typeName; |
| ::rtl::OString m_name; |
| TypeReader m_reader; |
| TypeManager& m_typeMgr; |
| TypeDependency m_dependencies; |
| }; |
| |
| class InterfaceType : public IdlType |
| { |
| public: |
| InterfaceType(TypeReader& typeReader, |
| const ::rtl::OString& typeName, |
| const TypeManager& typeMgr, |
| const TypeDependency& typeDependencies); |
| |
| virtual ~InterfaceType(); |
| |
| sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ); |
| |
| void dumpAttributes(FileStream& o); |
| void dumpMethods(FileStream& o); |
| |
| 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 IdlType |
| { |
| public: |
| ModuleType(TypeReader& typeReader, |
| const ::rtl::OString& typeName, |
| const TypeManager& typeMgr, |
| const TypeDependency& typeDependencies); |
| |
| virtual ~ModuleType(); |
| |
| virtual sal_Bool dump(IdlOptions* pOptions) throw( CannotDumpException ); |
| sal_Bool dumpHFile(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(IdlOptions* pOptions) throw( CannotDumpException ); |
| }; |
| |
| class StructureType : public IdlType |
| { |
| public: |
| StructureType(TypeReader& typeReader, |
| const ::rtl::OString& typeName, |
| const TypeManager& typeMgr, |
| const TypeDependency& typeDependencies); |
| |
| virtual ~StructureType(); |
| |
| sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ); |
| |
| void dumpSuperMember(FileStream& o, const ::rtl::OString& super); |
| }; |
| |
| class ExceptionType : public IdlType |
| { |
| public: |
| ExceptionType(TypeReader& typeReader, |
| const ::rtl::OString& typeName, |
| const TypeManager& typeMgr, |
| const TypeDependency& typeDependencies); |
| |
| virtual ~ExceptionType(); |
| |
| sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ); |
| |
| void dumpSuperMember(FileStream& o, const ::rtl::OString& super); |
| }; |
| |
| class EnumType : public IdlType |
| { |
| public: |
| EnumType(TypeReader& typeReader, |
| const ::rtl::OString& typeName, |
| const TypeManager& typeMgr, |
| const TypeDependency& typeDependencies); |
| |
| virtual ~EnumType(); |
| |
| sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ); |
| }; |
| |
| class TypeDefType : public IdlType |
| { |
| public: |
| TypeDefType(TypeReader& typeReader, |
| const ::rtl::OString& typeName, |
| const TypeManager& typeMgr, |
| const TypeDependency& typeDependencies); |
| |
| virtual ~TypeDefType(); |
| |
| sal_Bool dumpHFile(FileStream& o) throw( CannotDumpException ); |
| }; |
| |
| |
| sal_Bool produceType(const ::rtl::OString& typeName, |
| TypeManager& typeMgr, |
| TypeDependency& typeDependencies, |
| IdlOptions* 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 scope(const ::rtl::OString& scope, const ::rtl::OString& type ); |
| |
| |
| #endif // INCLUDED_CODEMAKER_SOURCE_IDLMAKER_IDLTYPE_HXX |
| |