summaryrefslogtreecommitdiff
path: root/unotools/inc/unotools/atom.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'unotools/inc/unotools/atom.hxx')
-rw-r--r--unotools/inc/unotools/atom.hxx133
1 files changed, 133 insertions, 0 deletions
diff --git a/unotools/inc/unotools/atom.hxx b/unotools/inc/unotools/atom.hxx
new file mode 100644
index 000000000000..c6cff2529343
--- /dev/null
+++ b/unotools/inc/unotools/atom.hxx
@@ -0,0 +1,133 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _UTL_ATOM_HXX_
+#define _UTL_ATOM_HXX_
+
+#include "unotools/unotoolsdllapi.h"
+#include <rtl/ustring.hxx>
+#include <osl/mutex.hxx>
+#include <cppuhelper/implbase1.hxx>
+
+#include <boost/unordered_map.hpp>
+#include <list>
+#include <com/sun/star/util/XAtomServer.hpp>
+
+#define INVALID_ATOM 0
+
+namespace utl {
+
+ struct AtomDescription
+ {
+ int atom;
+ ::rtl::OUString description;
+ };
+
+ class AtomProvider
+ {
+ int m_nAtoms;
+ ::boost::unordered_map< int, ::rtl::OUString, ::boost::hash< int > > m_aStringMap;
+ ::boost::unordered_map< ::rtl::OUString, int, ::rtl::OUStringHash > m_aAtomMap;
+ public:
+ AtomProvider();
+ ~AtomProvider();
+
+ int getAtom( const ::rtl::OUString&, sal_Bool bCreate = sal_False );
+ int getLastAtom() const { return m_nAtoms-1; }
+ const ::rtl::OUString& getString( int ) const;
+
+ void getAll( ::std::list< AtomDescription >& atoms );
+
+ void getRecent( int atom, ::std::list< AtomDescription >& atoms );
+
+ void overrideAtom( int atom, const ::rtl::OUString& description );
+
+ sal_Bool hasAtom( int atom ) const;
+ };
+
+
+ class UNOTOOLS_DLLPUBLIC MultiAtomProvider
+ {
+ ::boost::unordered_map< int, AtomProvider*, ::boost::hash< int > > m_aAtomLists;
+ public:
+ MultiAtomProvider();
+ ~MultiAtomProvider();
+
+ int getLastAtom( int atomClass ) const;
+
+ sal_Bool insertAtomClass( int atomClass );
+
+ int getAtom( int atomClass, const ::rtl::OUString& rString, sal_Bool bCreate = sal_False );
+
+ void getRecent( int atomClass, int atom, ::std::list< AtomDescription >& atoms );
+
+ const ::rtl::OUString& getString( int atomClass, int atom ) const;
+ void getClass( int atomClass, ::std::list< AtomDescription >& atoms ) const;
+
+ void overrideAtom( int atomClass, int atom, const ::rtl::OUString& description );
+ void overrideAtom( int atomClass, const ::com::sun::star::util::AtomDescription& newDescription )
+ { overrideAtom( atomClass, newDescription.atom, newDescription.description ); }
+ sal_Bool hasAtom( int atomClass, int atom ) const;
+ };
+
+ class AtomServer : public ::cppu::WeakAggImplHelper1< ::com::sun::star::util::XAtomServer >
+ {
+ private:
+ MultiAtomProvider m_aProvider;
+ ::osl::Mutex m_aMutex;
+ public:
+ AtomServer();
+ virtual ~AtomServer();
+
+ const ::rtl::OUString& getString( int atomClass, int atom ) const
+ { return m_aProvider.getString( atomClass, atom ); }
+
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::util::AtomDescription > SAL_CALL getClass( sal_Int32 atomClass ) throw();
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::util::AtomDescription > > SAL_CALL getClasses( const ::com::sun::star::uno::Sequence< sal_Int32 >& atomClasses ) throw();
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getAtomDescriptions( const ::com::sun::star::uno::Sequence< ::com::sun::star::util::AtomClassRequest >& atoms ) throw();
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::util::AtomDescription > SAL_CALL getRecentAtoms( sal_Int32 atomClass, sal_Int32 atom ) throw();
+ virtual sal_Int32 SAL_CALL getAtom( sal_Int32 atomClass, const ::rtl::OUString& description, sal_Bool create ) throw();
+ };
+
+ class AtomClient
+ {
+ private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::util::XAtomServer > m_xServer;
+ MultiAtomProvider m_aProvider;
+ public:
+ AtomClient( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XAtomServer >& );
+ ~AtomClient();
+
+ void updateAtomClasses( const ::com::sun::star::uno::Sequence< sal_Int32 >& atomClasses );
+ int getAtom( int atomClass, const ::rtl::OUString& description, sal_Bool bCreate );
+ const ::rtl::OUString& getString( int atomClass, int atom );
+ };
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */