diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 14:29:57 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 14:29:57 +0000 |
commit | b525a3115f54576017a576ff842dede5e2e3545d (patch) | |
tree | c534b95a9e572b63896467624293a5ca1887d3a3 /rdbmaker/inc | |
parent | 9399c662f36c385b0c705eb34e636a9aec450282 (diff) |
initial import
Diffstat (limited to 'rdbmaker/inc')
-rw-r--r-- | rdbmaker/inc/codemaker/dependency.hxx | 215 | ||||
-rw-r--r-- | rdbmaker/inc/codemaker/global.hxx | 152 | ||||
-rw-r--r-- | rdbmaker/inc/codemaker/options.hxx | 141 | ||||
-rw-r--r-- | rdbmaker/inc/codemaker/registry.hxx | 254 | ||||
-rw-r--r-- | rdbmaker/inc/codemaker/typemanager.hxx | 212 |
5 files changed, 974 insertions, 0 deletions
diff --git a/rdbmaker/inc/codemaker/dependency.hxx b/rdbmaker/inc/codemaker/dependency.hxx new file mode 100644 index 000000000000..f8b2d1805931 --- /dev/null +++ b/rdbmaker/inc/codemaker/dependency.hxx @@ -0,0 +1,215 @@ +/************************************************************************* + * + * $RCSfile: dependency.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 15:29:08 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _CODEMAKER_DEPENDENCY_HXX_ +#define _CODEMAKER_DEPENDENCY_HXX_ + +#include <hash_map> + +#ifndef _REGISTRY_REGISTRY_HXX_ +#include <registry/registry.hxx> +#endif +#ifndef __REGISTRY_REFLREAD_HXX__ +#include <registry/reflread.hxx> +#endif + +#ifndef _CODEMAKER_TYPEMANAGER_HXX_ +#include <codemaker/typemanager.hxx> +#endif +#ifndef _CODEMAKER_GLOBAL_HXX_ +#include <codemaker/global.hxx> +#endif + +#ifndef _OSL_DIAGNOSE_H_ +#include <osl/diagnose.h> +#endif + +#define TYPEUSE_NORMAL 0x0001 +#define TYPEUSE_SUPER 0x0002 +#define TYPEUSE_MEMBER 0x0004 +#define TYPEUSE_INPARAM 0x0008 +#define TYPEUSE_OUTPARAM 0x0010 +#define TYPEUSE_INOUTPARAM 0x0020 +#define TYPEUSE_RETURN 0x0040 +#define TYPEUSE_EXCEPTION 0x0080 + +/** + * Flag shows the state of the code generation. If the Flag is set + * the code for this type is generated. + */ +#define CODEGEN_DEFAULT 0x0001 + +struct TypeUsing +{ + TypeUsing(const ::rtl::OString& type, sal_uInt16 use) + : m_type(type) + , m_use(use) + {} + + ::rtl::OString m_type; + sal_uInt16 m_use; + + sal_Bool operator == (const TypeUsing & typeUsing) const + { + OSL_ASSERT(0); + return m_type == typeUsing.m_type && m_use == typeUsing.m_use; + } +}; + +struct LessTypeUsing +{ + sal_Bool operator()(const TypeUsing& tuse1, const TypeUsing& tuse2) const + { + return (tuse1.m_type < tuse2.m_type); + } +}; + +typedef NAMESPACE_STD(set) <TypeUsing, LessTypeUsing> TypeUsingSet; + + +#if (defined( _MSC_VER ) && ( _MSC_VER < 1200 )) +typedef NAMESPACE_STD(__hash_map__) +< + ::rtl::OString, + TypeUsingSet, + HashString, + EqualString, + NewAlloc +> DependencyMap; + +typedef NAMESPACE_STD(__hash_map__) +< + ::rtl::OString, + sal_uInt16, + HashString, + EqualString, + NewAlloc +> GenerationMap; +#else +typedef NAMESPACE_STD(hash_map) +< + ::rtl::OString, + TypeUsingSet, + HashString, + EqualString +> DependencyMap; + +typedef NAMESPACE_STD(hash_map) +< + ::rtl::OString, + sal_uInt16, + HashString, + EqualString +> GenerationMap; + +#endif + +struct TypeDependencyImpl +{ + TypeDependencyImpl() + : m_refCount(0) + {} + + sal_Int32 m_refCount; + DependencyMap m_dependencies; + GenerationMap m_generatedTypes; +}; + +class TypeDependency +{ +public: + TypeDependency(); + ~TypeDependency(); + + TypeDependency( const TypeDependency& value ) + : m_pImpl( value.m_pImpl ) + { + acquire(); + } + + TypeDependency& operator = ( const TypeDependency& value ) + { + release(); + m_pImpl = value.m_pImpl; + acquire(); + return *this; + } + + sal_Bool insert(const ::rtl::OString& type, const ::rtl::OString& depend, sal_uInt16); + TypeUsingSet getDependencies(const ::rtl::OString& type); + sal_Bool lookupDependency(const ::rtl::OString& type, const ::rtl::OString& depend, sal_uInt16); + sal_Bool hasDependencies(const ::rtl::OString& type); + + void setGenerated(const ::rtl::OString& type, sal_uInt16 genFlag=CODEGEN_DEFAULT); + sal_Bool isGenerated(const ::rtl::OString& type, sal_uInt16 genFlag=CODEGEN_DEFAULT); + + sal_Int32 getSize() { return m_pImpl->m_generatedTypes.size(); } +protected: + void acquire(); + void release(); + +protected: + TypeDependencyImpl* m_pImpl; +}; + +sal_Bool checkTypeDependencies(TypeManager& typeMgr, TypeDependency& dependencies, const ::rtl::OString& type); + +#endif // _CODEMAKER_DEPENDENCY_HXX_ diff --git a/rdbmaker/inc/codemaker/global.hxx b/rdbmaker/inc/codemaker/global.hxx new file mode 100644 index 000000000000..6ab359efd970 --- /dev/null +++ b/rdbmaker/inc/codemaker/global.hxx @@ -0,0 +1,152 @@ +/************************************************************************* + * + * $RCSfile: global.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 15:29:08 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _CODEMAKER_GLOBAL_HXX_ +#define _CODEMAKER_GLOBAL_HXX_ + +#include <list> +#include <vector> +#include <set> + +#include <fstream.h> + +#ifndef _RTL_USTRING_HXX_ +#include <rtl/ustring.hxx> +#endif + +#ifndef _VOS_MACROS_HXX_ +#include <vos/macros.hxx> +#endif + + +struct EqualString +{ + sal_Bool operator()(const ::rtl::OString& str1, const ::rtl::OString& str2) const + { + return (str1 == str2); + } +}; + +struct HashString +{ + size_t operator()(const ::rtl::OString& str) const + { + return str.hashCode(); + } +}; + +struct LessString +{ + sal_Bool operator()(const ::rtl::OString& str1, const ::rtl::OString& str2) const + { + return (str1 < str2); + } +}; + +#if defined(_MSC_VER) && _MSC_VER < 1200 +typedef NAMESPACE_STD(new_alloc) NewAlloc; +#endif + + +typedef NAMESPACE_STD(list) < ::rtl::OString > StringList; +typedef NAMESPACE_STD(vector)< ::rtl::OString > StringVector; +typedef NAMESPACE_STD(set) < ::rtl::OString, LessString > StringSet; + +::rtl::OString makeTempName(sal_Char* prefix); + +::rtl::OString createFileNameFromType(const ::rtl::OString& destination, + const ::rtl::OString type, + const ::rtl::OString postfix, + sal_Bool bLowerCase=sal_False, + const ::rtl::OString prefix=""); + +sal_Bool fileExists(const ::rtl::OString& fileName); +sal_Bool checkFileContent(const ::rtl::OString& targetFileName, const ::rtl::OString& tmpFileName); + +const ::rtl::OString inGlobalSet(const ::rtl::OUString & r); +inline const ::rtl::OString inGlobalSet(sal_Char* p) +{ + return inGlobalSet( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(p) ) ); +} + +//************************************************************************* +// FileStream +//************************************************************************* +class FileStream : public ofstream +{ +public: + FileStream(); + FileStream(const ::rtl::OString& name, sal_Int32 nMode = ios::out | ios::trunc); + virtual ~FileStream(); + + sal_Bool isValid(); + + void openFile(const ::rtl::OString& name, sal_Int32 nMode = ios::out | ios::trunc); + void closeFile(); + + sal_Int32 getSize(); + ::rtl::OString getName() { return m_name; } +protected: + ::rtl::OString m_name; +}; + +#endif // _CODEMAKER_GLOBAL_HXX_ + diff --git a/rdbmaker/inc/codemaker/options.hxx b/rdbmaker/inc/codemaker/options.hxx new file mode 100644 index 000000000000..875d3e785d9b --- /dev/null +++ b/rdbmaker/inc/codemaker/options.hxx @@ -0,0 +1,141 @@ +/************************************************************************* + * + * $RCSfile: options.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 15:29:08 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _CODEMAKER_OPTIONS_HXX_ +#define _CODEMAKER_OPTIONS_HXX_ + +#include <hash_map> + +#ifndef _CODEMAKER_GLOBAL_HXX_ +#include <codemaker/global.hxx> +#endif + +#if defined( _MSC_VER ) && ( _MSC_VER < 1200 ) +typedef NAMESPACE_STD(__hash_map__) +< + ::rtl::OString, + ::rtl::OString, + HashString, + EqualString, + NewAlloc +> OptionMap; +#else +typedef NAMESPACE_STD(hash_map) +< + ::rtl::OString, + ::rtl::OString, + HashString, + EqualString +> OptionMap; +#endif + +class CannotDumpException +{ +public: + CannotDumpException(const ::rtl::OString& msg) + : m_message(msg) {} + + ::rtl::OString m_message; +}; + + +class IllegalArgument +{ +public: + IllegalArgument(const ::rtl::OString& msg) + : m_message(msg) {} + + ::rtl::OString m_message; +}; + + +class Options +{ +public: + Options(); + ~Options(); + + virtual sal_Bool initOptions(int ac, char* av[], sal_Bool bCmdFile=sal_False) + throw( IllegalArgument ) = 0; + + virtual ::rtl::OString prepareHelp() = 0; + + const ::rtl::OString& getProgramName() const; + sal_uInt16 getNumberOfOptions() const; + sal_Bool isValid(const ::rtl::OString& option); + const ::rtl::OString getOption(const ::rtl::OString& option) + throw( IllegalArgument ); + const OptionMap& getOptions(); + + sal_uInt16 getNumberOfInputFiles() const; + const ::rtl::OString getInputFile(sal_uInt16 index) + throw( IllegalArgument ); + + const StringVector& getInputFiles(); + +protected: + ::rtl::OString m_program; + StringVector m_inputFiles; + OptionMap m_options; +}; + +#endif // _CODEMAKER_OPTIONS_HXX_ + diff --git a/rdbmaker/inc/codemaker/registry.hxx b/rdbmaker/inc/codemaker/registry.hxx new file mode 100644 index 000000000000..aef51ffa048d --- /dev/null +++ b/rdbmaker/inc/codemaker/registry.hxx @@ -0,0 +1,254 @@ +/************************************************************************* + * + * $RCSfile: registry.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 15:29:08 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _CODEMAKER_REGISTRY_HXX_ +#define _CODEMAKER_REGISTRY_HXX_ + +#ifndef _RTL_ALLOC_H_ +#include <rtl/alloc.h> +#endif + +#ifndef _OSL_INTERLOCK_H_ +#include <osl/interlck.h> +#endif + +#ifndef _REGISTRY_REGISTRY_HXX_ +#include <registry/registry.hxx> +#endif +#ifndef __REGISTRY_REFLREAD_HXX__ +#include <registry/reflread.hxx> +#endif + +#ifndef _CODEMAKER_OPTIONS_HXX_ +#include <codemaker/options.hxx> +#endif + +struct TypeReader_Impl +{ + TypeReader_Impl(const RegistryTypeReaderLoader& rLoader, + const sal_uInt8* buffer, + sal_uInt32 bufferLen, + sal_Bool copyData) + : m_refCount(0) + , m_copyData(copyData) + , m_blopSize(bufferLen) + , m_pBlop(buffer) + { + if (copyData) + { + m_pBlop = (sal_uInt8*)rtl_allocateMemory(bufferLen); + rtl_copyMemory((void*)m_pBlop, buffer, bufferLen); + } else + { + m_blopSize = bufferLen; + m_pBlop = buffer; + } + + m_pReader = new RegistryTypeReader( rLoader, m_pBlop, m_blopSize, sal_False); + } + + ~TypeReader_Impl() + { + if (m_copyData && m_pReader) + { + delete m_pReader; + } + } + + sal_Int32 m_refCount; + sal_Bool m_copyData; + sal_Int32 m_blopSize; + const sal_uInt8* m_pBlop; + RegistryTypeReader* m_pReader; +}; + +class TypeReader +{ +/* + inline TypeReader(const RegistryTypeReader_Api* pApi, + const sal_uInt8* buffer, + sal_uInt32 bufferLen, + sal_Bool copyData); +*/ +public: + inline TypeReader() + : m_pImpl(NULL) + {} + + inline TypeReader(const RegistryTypeReaderLoader& rLoader, + const sal_uInt8* buffer, + sal_uInt32 bufferLen, + sal_Bool copyData) + { + m_pImpl = new TypeReader_Impl(rLoader, buffer, bufferLen, copyData); + acquire(); + } + + inline TypeReader(const TypeReader& toCopy) + : m_pImpl(toCopy.m_pImpl) + { + acquire(); + } + + inline void acquire() + { + if (m_pImpl) + osl_incrementInterlockedCount(&m_pImpl->m_refCount); + } + + inline void release() + { + if (m_pImpl && 0 == osl_decrementInterlockedCount(&m_pImpl->m_refCount)) + { + delete m_pImpl; + } + } + + inline TypeReader& operator = ( const TypeReader& value ) + { + release(); + m_pImpl = value.m_pImpl; + acquire(); + return *this; + } + + inline sal_Bool isValid() const + { + if (m_pImpl) + return m_pImpl->m_pReader->isValid(); + else + return sal_False; + } + + inline sal_uInt16 getMinorVersion() const + { return m_pImpl->m_pReader->getMinorVersion(); } + inline sal_uInt16 getMajorVersion() const + { return m_pImpl->m_pReader->getMajorVersion(); } + inline RTTypeClass getTypeClass() const + { return m_pImpl->m_pReader->getTypeClass(); } + inline const ::rtl::OString getTypeName() const + { return inGlobalSet( m_pImpl->m_pReader->getTypeName() ); } + inline const ::rtl::OString getSuperTypeName() const + { return inGlobalSet( m_pImpl->m_pReader->getSuperTypeName() ); } + inline void getUik(RTUik& uik) const + { m_pImpl->m_pReader->getUik(uik); } + inline const ::rtl::OString getDoku() const + { return inGlobalSet( m_pImpl->m_pReader->getDoku() ); } + inline const ::rtl::OString getFileName() const + { return inGlobalSet( m_pImpl->m_pReader->getFileName() ); } + inline sal_uInt32 getFieldCount() const + { return m_pImpl->m_pReader->getFieldCount(); } + inline const ::rtl::OString getFieldName( sal_uInt16 index ) const + { return inGlobalSet( m_pImpl->m_pReader->getFieldName(index) ); } + inline const ::rtl::OString getFieldType( sal_uInt16 index ) const + { return inGlobalSet( m_pImpl->m_pReader->getFieldType(index) ); } + inline RTFieldAccess getFieldAccess( sal_uInt16 index ) const + { return m_pImpl->m_pReader->getFieldAccess(index); } + inline RTConstValue getFieldConstValue( sal_uInt16 index ) const + { return m_pImpl->m_pReader->getFieldConstValue(index); } + inline const ::rtl::OString getFieldDoku( sal_uInt16 index ) const + { return inGlobalSet( m_pImpl->m_pReader->getFieldDoku(index) ); } + inline const ::rtl::OString getFieldFileName( sal_uInt16 index ) const + { return inGlobalSet( m_pImpl->m_pReader->getFieldFileName(index) ); } + inline sal_uInt32 getMethodCount() const + { return m_pImpl->m_pReader->getMethodCount(); } + inline const ::rtl::OString getMethodName( sal_uInt16 index ) const + { return inGlobalSet( m_pImpl->m_pReader->getMethodName(index) ); } + inline sal_uInt32 getMethodParamCount( sal_uInt16 index ) const + { return m_pImpl->m_pReader->getMethodParamCount(index); } + inline const ::rtl::OString getMethodParamType( sal_uInt16 index, sal_uInt16 paramIndex ) const + { return inGlobalSet( m_pImpl->m_pReader->getMethodParamType(index,paramIndex) ); } + inline const ::rtl::OString getMethodParamName( sal_uInt16 index, sal_uInt16 paramIndex ) const + { return inGlobalSet( m_pImpl->m_pReader->getMethodParamName(index,paramIndex) ); } + inline RTParamMode getMethodParamMode( sal_uInt16 index, sal_uInt16 paramIndex ) const + { return m_pImpl->m_pReader->getMethodParamMode(index,paramIndex); } + inline sal_uInt32 getMethodExcCount( sal_uInt16 index ) const + { return m_pImpl->m_pReader->getMethodExcCount(index); } + inline const ::rtl::OString getMethodExcType( sal_uInt16 index, sal_uInt16 excIndex ) const + { return inGlobalSet( m_pImpl->m_pReader->getMethodExcType(index,excIndex) ); } + inline const ::rtl::OString getMethodReturnType( sal_uInt16 index ) const + { return inGlobalSet( m_pImpl->m_pReader->getMethodReturnType(index) ); } + inline RTMethodMode getMethodMode( sal_uInt16 index ) const + { return m_pImpl->m_pReader->getMethodMode(index); } + inline const ::rtl::OString getMethodDoku( sal_uInt16 index ) const + { return inGlobalSet( m_pImpl->m_pReader->getMethodDoku(index) ); } + + inline sal_uInt32 getReferenceCount() const + { return m_pImpl->m_pReader->getReferenceCount(); } + inline const ::rtl::OString getReferenceName( sal_uInt16 index ) const + { return inGlobalSet( m_pImpl->m_pReader->getReferenceName(index) ); } + inline RTReferenceType getReferenceType( sal_uInt16 index ) const + { return m_pImpl->m_pReader->getReferenceType(index); } + inline const ::rtl::OString getReferenceDoku( sal_uInt16 index ) const + { return inGlobalSet( m_pImpl->m_pReader->getReferenceDoku(index) ); } + + inline sal_uInt32 getBlopSize() const + { return m_pImpl->m_blopSize; } + + inline const sal_uInt8* getBlop() const + { return m_pImpl->m_pBlop; } + +private: + TypeReader_Impl* m_pImpl; +}; + + +#endif // _CODEMAKER_REGISTRY_HXX_ diff --git a/rdbmaker/inc/codemaker/typemanager.hxx b/rdbmaker/inc/codemaker/typemanager.hxx new file mode 100644 index 000000000000..030dd962795e --- /dev/null +++ b/rdbmaker/inc/codemaker/typemanager.hxx @@ -0,0 +1,212 @@ +/************************************************************************* + * + * $RCSfile: typemanager.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 15:29:08 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include <hash_map> + +#ifndef _CODEMAKER_TYPEMANAGER_HXX_ +#define _CODEMAKER_TYPEMANAGER_HXX_ + +#ifndef _CODEMAKER_REGISTRY_HXX_ +#include <codemaker/registry.hxx> +#endif + +RegistryTypeReaderLoader & getRegistryTypeReaderLoader(); + + +typedef NAMESPACE_STD(list) <Registry*> RegistryList; + +#if defined( _MSC_VER ) && ( _MSC_VER < 1200 ) +typedef NAMESPACE_STD(__hash_map__) +< + ::rtl::OString, // Typename + RTTypeClass, // TypeClass + HashString, + EqualString, + NewAlloc +> T2TypeClassMap; +#else +typedef NAMESPACE_STD(hash_map) +< + ::rtl::OString, // Typename + RTTypeClass, // TypeClass + HashString, + EqualString +> T2TypeClassMap; +#endif + +struct TypeManagerImpl +{ + TypeManagerImpl() + : m_refCount(0) + {} + + sal_Int32 m_refCount; +}; + +class TypeManager +{ +public: + TypeManager(); + ~TypeManager(); + + TypeManager( const TypeManager& value ) + : m_pImpl( value.m_pImpl ) + { + acquire(); + } + + TypeManager& operator = ( const TypeManager& value ) + { + release(); + m_pImpl = value.m_pImpl; + acquire(); + return *this; + } + + virtual sal_Bool init(sal_Bool bMerge, const StringVector& regFiles) + { return sal_False; } + virtual sal_Bool init(const ::rtl::OString& registryName) + { return sal_False; } + + virtual sal_Bool isValidType(const ::rtl::OString& name) + { return sal_False; } + + virtual RegistryKey getTypeKey(const ::rtl::OString& name) + { return RegistryKey(); } + virtual TypeReader getTypeReader(const ::rtl::OString& name) + { return TypeReader(); } + virtual RTTypeClass getTypeClass(const ::rtl::OString& name) + { return RT_TYPE_INVALID; } + + virtual void setBase(const ::rtl::OString& base) {} + virtual ::rtl::OString getBase() { return ::rtl::OString(); } + + virtual sal_Int32 getSize() { return 0; } + +protected: + sal_Int32 acquire(); + sal_Int32 release(); + +protected: + TypeManagerImpl* m_pImpl; +}; + +struct RegistryTypeManagerImpl +{ + RegistryTypeManagerImpl() + : m_pMergedRegistry(NULL) + , m_isMerged(sal_False) + , m_base("/") + {} + + T2TypeClassMap m_t2TypeClass; + RegistryList m_registries; + Registry* m_pMergedRegistry; + ::rtl::OString m_base; + sal_Bool m_isMerged; +}; + +class RegistryTypeManager : public TypeManager +{ +public: + RegistryTypeManager(); + ~RegistryTypeManager(); + + RegistryTypeManager( const RegistryTypeManager& value ) + : TypeManager(value) + , m_pImpl( value.m_pImpl ) + { + acquire(); + } +/* + RegistryTypeManager& operator = ( const RegistryTypeManager& value ) + { + release(); + m_pImpl = value.m_pImpl; + acquire(); + return *this; + } +*/ + sal_Bool init(sal_Bool bMerge, const StringVector& regFiles); + + sal_Bool isValidType(const ::rtl::OString& name) + { return searchTypeKey(name).isValid(); } + RegistryKey getTypeKey(const ::rtl::OString& name) + { return searchTypeKey(name); } + TypeReader getTypeReader(const ::rtl::OString& name); + RTTypeClass getTypeClass(const ::rtl::OString& name); + + void setBase(const ::rtl::OString& base); + ::rtl::OString getBase() { return m_pImpl->m_base; } + + sal_Int32 getSize() { return m_pImpl->m_t2TypeClass.size(); } +protected: + RegistryKey searchTypeKey(const ::rtl::OString& name); + void freeRegistries(); + + void acquire(); + void release(); + +protected: + RegistryTypeManagerImpl* m_pImpl; +}; + +#endif // _CODEMAKER_TYPEMANAGER_HXX_ |