blob: ad6ad47a070d6b5c558028f3ef15dd1ab5088a58 [file] [log] [blame]
/**************************************************************
*
* 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 <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 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