1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #ifndef INCLUDED_XMLOFF_SOURCE_FORMS_ATTRIBLISTMERGE_HXX 21 #define INCLUDED_XMLOFF_SOURCE_FORMS_ATTRIBLISTMERGE_HXX 22 23 #include <sal/config.h> 24 25 #include <vector> 26 27 #include <cppuhelper/implbase.hxx> 28 #include <com/sun/star/xml/sax/XAttributeList.hpp> 29 30 namespace xmloff 31 { 32 33 //= OAttribListMerger 34 typedef ::cppu::WeakImplHelper < css::xml::sax::XAttributeList 35 > OAttribListMerger_Base; 36 /** implements the XAttributeList list by merging different source attribute lists 37 38 <p>Currently, the time behaviour is O(n), though it would be possible to change it to O(log n).</p> 39 */ 40 class OAttribListMerger : public OAttribListMerger_Base 41 { 42 typedef std::vector< css::uno::Reference< css::xml::sax::XAttributeList > > AttributeListArray; 43 AttributeListArray m_aLists; 44 45 public: OAttribListMerger()46 OAttribListMerger() { } 47 48 // attribute list handling 49 // (very thin at the moment... only adding lists is allowed... add more if you need it :) 50 void addList(const css::uno::Reference< css::xml::sax::XAttributeList >& _rList); 51 52 // XAttributeList 53 virtual sal_Int16 SAL_CALL getLength( ) override; 54 virtual OUString SAL_CALL getNameByIndex( sal_Int16 i ) override; 55 virtual OUString SAL_CALL getTypeByIndex( sal_Int16 i ) override; 56 virtual OUString SAL_CALL getTypeByName( const OUString& aName ) override; 57 virtual OUString SAL_CALL getValueByIndex( sal_Int16 i ) override; 58 virtual OUString SAL_CALL getValueByName( const OUString& aName ) override; 59 60 private: 61 bool seekToIndex(sal_Int16 _nGlobalIndex, css::uno::Reference< css::xml::sax::XAttributeList >& _rSubList, sal_Int16& _rLocalIndex); 62 bool seekToName(const OUString& _rName, css::uno::Reference< css::xml::sax::XAttributeList >& _rSubList, sal_Int16& _rLocalIndex); 63 }; 64 65 } // namespace xmloff 66 67 #endif // INCLUDED_XMLOFF_SOURCE_FORMS_ATTRIBLISTMERGE_HXX 68 69 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 70