/************************************************************** * * 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 #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 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