summaryrefslogtreecommitdiffstats
path: root/rdbmaker/inc
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2000-09-18 14:29:57 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2000-09-18 14:29:57 +0000
commitb525a3115f54576017a576ff842dede5e2e3545d (patch)
treec534b95a9e572b63896467624293a5ca1887d3a3 /rdbmaker/inc
parentinitial import (diff)
downloadcore-b525a3115f54576017a576ff842dede5e2e3545d.tar.gz
core-b525a3115f54576017a576ff842dede5e2e3545d.zip
initial import
Diffstat (limited to 'rdbmaker/inc')
-rw-r--r--rdbmaker/inc/codemaker/dependency.hxx215
-rw-r--r--rdbmaker/inc/codemaker/global.hxx152
-rw-r--r--rdbmaker/inc/codemaker/options.hxx141
-rw-r--r--rdbmaker/inc/codemaker/registry.hxx254
-rw-r--r--rdbmaker/inc/codemaker/typemanager.hxx212
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_